gecko-dev/widget/windows/ToastNotificationHandler.h
Edouard Oger e46f0d7370 Bug 1155505 - Part 2. Implement native Window Toasts as a notification backend. r=jmathies
Implemnt notification backend by Windows Toast API that is from Windows 8+.

Original patch is me and add some features by eoger.

Differential Revision: https://phabricator.services.mozilla.com/D3003

--HG--
extra : rebase_source : 0368f269e9adb2347621500b7c9d62c172a71e39
2018-10-03 17:57:23 +09:00

108 lines
3.2 KiB
C++

/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#ifndef ToastNotificationHandler_h__
#define ToastNotificationHandler_h__
#include <windows.ui.notifications.h>
#include <windows.data.xml.dom.h>
#include <wrl.h>
#include "imgIContainer.h"
#include "nsCOMPtr.h"
#include "nsIAlertsService.h"
#include "nsICancelable.h"
#include "nsIFile.h"
#include "nsString.h"
namespace mozilla {
namespace widget {
class ToastNotification;
class ToastNotificationHandler final : public nsIAlertNotificationImageListener
{
public:
NS_DECL_ISUPPORTS
NS_DECL_NSIALERTNOTIFICATIONIMAGELISTENER
ToastNotificationHandler(ToastNotification* backend, nsIObserver* aAlertListener,
const nsAString& aName, const nsAString& aCookie,
const nsAString& aTitle, const nsAString& aMsg,
const nsAString& aHostPort,
bool aClickable)
: mBackend(backend)
, mHasImage(false)
, mAlertListener(aAlertListener)
, mName(aName)
, mCookie(aCookie)
, mTitle(aTitle)
, mMsg(aMsg)
, mHostPort(aHostPort)
, mClickable(aClickable)
{
}
nsresult InitAlertAsync(nsIAlertNotification* aAlert);
void OnWriteBitmapFinished(nsresult rv);
protected:
virtual ~ToastNotificationHandler();
typedef ABI::Windows::Data::Xml::Dom::IXmlDocument IXmlDocument;
typedef ABI::Windows::UI::Notifications::IToastNotifier
IToastNotifier;
typedef ABI::Windows::UI::Notifications::IToastNotification
IToastNotification;
typedef ABI::Windows::UI::Notifications::IToastDismissedEventArgs
IToastDismissedEventArgs;
typedef ABI::Windows::UI::Notifications::IToastFailedEventArgs
IToastFailedEventArgs;
typedef ABI::Windows::UI::Notifications::ToastTemplateType ToastTemplateType;
Microsoft::WRL::ComPtr<IToastNotification> mNotification;
Microsoft::WRL::ComPtr<IToastNotifier> mNotifier;
RefPtr<ToastNotification> mBackend;
nsCOMPtr<nsICancelable> mImageRequest;
nsCOMPtr<nsIFile> mImageFile;
nsString mImageUri;
bool mHasImage;
EventRegistrationToken mActivatedToken;
EventRegistrationToken mDismissedToken;
EventRegistrationToken mFailedToken;
nsCOMPtr<nsIObserver> mAlertListener;
nsString mName;
nsString mCookie;
nsString mTitle;
nsString mMsg;
nsString mHostPort;
bool mClickable;
nsresult TryShowAlert();
bool ShowAlert();
nsresult AsyncSaveImage(imgIRequest* aRequest);
nsresult OnWriteBitmapSuccess();
bool CreateWindowsNotificationFromXml(IXmlDocument* aToastXml);
Microsoft::WRL::ComPtr<IXmlDocument> InitializeXmlForTemplate(
ToastTemplateType templateType);
HRESULT OnActivate(IToastNotification *notification,
IInspectable *inspectable);
HRESULT OnDismiss(IToastNotification *notification,
IToastDismissedEventArgs* aArgs);
HRESULT OnFail(IToastNotification *notification,
IToastFailedEventArgs* aArgs);
};
} // widget
} // mozilla
#endif