1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
|
/* -*- 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 "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),
mSentFinished(!aAlertListener) {}
nsresult InitAlertAsync(nsIAlertNotification* aAlert);
void OnWriteBitmapFinished(nsresult rv);
void UnregisterHandler();
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;
bool mSentFinished;
nsresult TryShowAlert();
bool ShowAlert();
nsresult AsyncSaveImage(imgIRequest* aRequest);
nsresult OnWriteBitmapSuccess();
void SendFinished();
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);
};
} // namespace widget
} // namespace mozilla
#endif
|