Coverage Report

Created: 2018-09-25 14:53

/work/obj-fuzz/dist/include/mozilla/ExtensionPolicyService.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 mozilla_ExtensionPolicyService_h
7
#define mozilla_ExtensionPolicyService_h
8
9
#include "mozilla/MemoryReporting.h"
10
#include "mozilla/extensions/WebExtensionPolicy.h"
11
#include "nsCOMPtr.h"
12
#include "nsCycleCollectionParticipant.h"
13
#include "nsHashKeys.h"
14
#include "nsIAddonPolicyService.h"
15
#include "nsAtom.h"
16
#include "nsIDOMEventListener.h"
17
#include "nsIMemoryReporter.h"
18
#include "nsIObserver.h"
19
#include "nsIObserverService.h"
20
#include "nsISupports.h"
21
#include "nsPointerHashKeys.h"
22
#include "nsRefPtrHashtable.h"
23
#include "nsTHashtable.h"
24
25
class nsIChannel;
26
class nsIObserverService;
27
class nsIDocument;
28
class nsIPIDOMWindowInner;
29
class nsIPIDOMWindowOuter;
30
31
namespace mozilla {
32
namespace dom {
33
  class ContentFrameMessageManager;
34
  class Promise;
35
}
36
namespace extensions {
37
  class DocInfo;
38
  class DocumentObserver;
39
  class WebExtensionContentScript;
40
}
41
42
using extensions::DocInfo;
43
using extensions::WebExtensionPolicy;
44
45
class ExtensionPolicyService final : public nsIAddonPolicyService
46
                                   , public nsIObserver
47
                                   , public nsIDOMEventListener
48
                                   , public nsIMemoryReporter
49
{
50
public:
51
  NS_DECL_CYCLE_COLLECTION_CLASS_AMBIGUOUS(ExtensionPolicyService,
52
                                           nsIAddonPolicyService)
53
  NS_DECL_CYCLE_COLLECTING_ISUPPORTS
54
  NS_DECL_NSIADDONPOLICYSERVICE
55
  NS_DECL_NSIOBSERVER
56
  NS_DECL_NSIDOMEVENTLISTENER
57
  NS_DECL_NSIMEMORYREPORTER
58
59
  static ExtensionPolicyService& GetSingleton();
60
61
  static already_AddRefed<ExtensionPolicyService> GetInstance()
62
0
  {
63
0
    return do_AddRef(&GetSingleton());
64
0
  }
65
66
  WebExtensionPolicy*
67
  GetByID(const nsAtom* aAddonId)
68
0
  {
69
0
    return mExtensions.GetWeak(aAddonId);
70
0
  }
71
72
  WebExtensionPolicy* GetByID(const nsAString& aAddonId)
73
0
  {
74
0
    RefPtr<nsAtom> atom = NS_AtomizeMainThread(aAddonId);
75
0
    return GetByID(atom);
76
0
  }
77
78
  WebExtensionPolicy* GetByURL(const extensions::URLInfo& aURL);
79
80
  WebExtensionPolicy* GetByHost(const nsACString& aHost) const
81
0
  {
82
0
    return mExtensionHosts.GetWeak(aHost);
83
0
  }
84
85
  void GetAll(nsTArray<RefPtr<WebExtensionPolicy>>& aResult);
86
87
  bool RegisterExtension(WebExtensionPolicy& aPolicy);
88
  bool UnregisterExtension(WebExtensionPolicy& aPolicy);
89
90
  bool RegisterObserver(extensions::DocumentObserver& aPolicy);
91
  bool UnregisterObserver(extensions::DocumentObserver& aPolicy);
92
93
  void BaseCSP(nsAString& aDefaultCSP) const;
94
  void DefaultCSP(nsAString& aDefaultCSP) const;
95
96
  bool UseRemoteExtensions() const;
97
  bool IsExtensionProcess() const;
98
99
  nsresult InjectContentScripts(WebExtensionPolicy* aExtension);
100
101
protected:
102
  virtual ~ExtensionPolicyService();
103
104
private:
105
  ExtensionPolicyService();
106
107
  void RegisterObservers();
108
  void UnregisterObservers();
109
110
  void CheckRequest(nsIChannel* aChannel);
111
  void CheckDocument(nsIDocument* aDocument);
112
  void CheckWindow(nsPIDOMWindowOuter* aWindow);
113
114
  void CheckContentScripts(const DocInfo& aDocInfo, bool aIsPreload);
115
116
  already_AddRefed<dom::Promise>
117
  ExecuteContentScript(nsPIDOMWindowInner* aWindow,
118
                       extensions::WebExtensionContentScript& aScript);
119
120
  RefPtr<dom::Promise>
121
  ExecuteContentScripts(JSContext* aCx, nsPIDOMWindowInner* aWindow,
122
                        const nsTArray<RefPtr<extensions::WebExtensionContentScript>>& aScripts);
123
124
  nsRefPtrHashtable<nsPtrHashKey<const nsAtom>, WebExtensionPolicy> mExtensions;
125
  nsRefPtrHashtable<nsCStringHashKey, WebExtensionPolicy> mExtensionHosts;
126
127
  nsTHashtable<nsRefPtrHashKey<dom::ContentFrameMessageManager>> mMessageManagers;
128
129
  nsRefPtrHashtable<nsPtrHashKey<const extensions::DocumentObserver>,
130
                    extensions::DocumentObserver> mObservers;
131
132
  nsCOMPtr<nsIObserverService> mObs;
133
134
  static bool sRemoteExtensions;
135
};
136
137
} // namespace mozilla
138
139
#endif // mozilla_ExtensionPolicyService_h