Line data Source code
1 : /* -*- Mode: C++; tab-width: 2; indent-tabs-mode:nil; c-basic-offset: 2 -*- */
2 : /* This Source Code Form is subject to the terms of the Mozilla Public
3 : * License, v. 2.0. If a copy of the MPL was not distributed with this
4 : * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
5 :
6 : #ifndef nsXULAlerts_h__
7 : #define nsXULAlerts_h__
8 :
9 : #include "nsCycleCollectionParticipant.h"
10 : #include "nsDataHashtable.h"
11 : #include "nsHashKeys.h"
12 : #include "nsInterfaceHashtable.h"
13 :
14 : #include "mozIDOMWindow.h"
15 : #include "nsIObserver.h"
16 :
17 0 : struct PendingAlert
18 : {
19 0 : void Init(nsIAlertNotification* aAlert, nsIObserver* aListener)
20 : {
21 0 : mAlert = aAlert;
22 0 : mListener = aListener;
23 0 : }
24 : nsCOMPtr<nsIAlertNotification> mAlert;
25 : nsCOMPtr<nsIObserver> mListener;
26 : };
27 :
28 : class nsXULAlerts : public nsIAlertsService,
29 : public nsIAlertsDoNotDisturb,
30 : public nsIAlertsIconURI
31 : {
32 : friend class nsXULAlertObserver;
33 : public:
34 : NS_DECL_NSIALERTSICONURI
35 : NS_DECL_NSIALERTSDONOTDISTURB
36 : NS_DECL_NSIALERTSSERVICE
37 : NS_DECL_ISUPPORTS
38 :
39 0 : nsXULAlerts()
40 0 : {
41 0 : }
42 :
43 : static already_AddRefed<nsXULAlerts> GetInstance();
44 :
45 : protected:
46 0 : virtual ~nsXULAlerts() {}
47 : void PersistentAlertFinished();
48 :
49 : nsInterfaceHashtable<nsStringHashKey, mozIDOMWindowProxy> mNamedWindows;
50 : uint32_t mPersistentAlertCount = 0;
51 : nsTArray<PendingAlert> mPendingPersistentAlerts;
52 : bool mDoNotDisturb = false;
53 : };
54 :
55 : /**
56 : * This class wraps observers for alerts and watches
57 : * for the "alertfinished" event in order to release
58 : * the reference on the nsIDOMWindow of the XUL alert.
59 : */
60 : class nsXULAlertObserver : public nsIObserver {
61 : public:
62 : NS_DECL_CYCLE_COLLECTING_ISUPPORTS
63 : NS_DECL_NSIOBSERVER
64 0 : NS_DECL_CYCLE_COLLECTION_CLASS(nsXULAlertObserver)
65 :
66 0 : nsXULAlertObserver(nsXULAlerts* aXULAlerts, const nsAString& aAlertName,
67 : nsIObserver* aObserver, bool aIsPersistent)
68 0 : : mXULAlerts(aXULAlerts), mAlertName(aAlertName),
69 0 : mObserver(aObserver), mIsPersistent(aIsPersistent) {}
70 :
71 0 : void SetAlertWindow(mozIDOMWindowProxy* aWindow) { mAlertWindow = aWindow; }
72 :
73 : protected:
74 0 : virtual ~nsXULAlertObserver() {}
75 :
76 : RefPtr<nsXULAlerts> mXULAlerts;
77 : nsString mAlertName;
78 : nsCOMPtr<mozIDOMWindowProxy> mAlertWindow;
79 : nsCOMPtr<nsIObserver> mObserver;
80 : bool mIsPersistent;
81 : };
82 :
83 : #endif /* nsXULAlerts_h__ */
84 :
|