Coverage Report

Created: 2018-09-25 14:53

/src/mozilla-central/toolkit/components/alerts/nsXULAlerts.h
Line
Count
Source (jump to first uncovered line)
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
struct PendingAlert
18
{
19
  void Init(nsIAlertNotification* aAlert, nsIObserver* aListener)
20
0
  {
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
  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
  NS_DECL_CYCLE_COLLECTION_CLASS(nsXULAlertObserver)
65
66
  nsXULAlertObserver(nsXULAlerts* aXULAlerts, const nsAString& aAlertName,
67
                     nsIObserver* aObserver, bool aIsPersistent)
68
    : 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