Line data Source code
1 : /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 : /* vim: set ts=8 sts=2 et sw=2 tw=80: */
3 : /* This Source Code Form is subject to the terms of the Mozilla Public
4 : * License, v. 2.0. If a copy of the MPL was not distributed with this
5 : * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6 :
7 : #ifndef mozilla_dom_Navigator_h
8 : #define mozilla_dom_Navigator_h
9 :
10 : #include "mozilla/MemoryReporting.h"
11 : #include "mozilla/dom/BindingDeclarations.h"
12 : #include "mozilla/dom/Fetch.h"
13 : #include "mozilla/dom/Nullable.h"
14 : #include "mozilla/ErrorResult.h"
15 : #include "nsIDOMNavigator.h"
16 : #include "nsIMozNavigatorNetwork.h"
17 : #include "nsWrapperCache.h"
18 : #include "nsHashKeys.h"
19 : #include "nsInterfaceHashtable.h"
20 : #include "nsString.h"
21 : #include "nsTArray.h"
22 : #include "nsWeakPtr.h"
23 : #include "mozilla/dom/MediaKeySystemAccessManager.h"
24 :
25 : class nsPluginArray;
26 : class nsMimeTypeArray;
27 : class nsPIDOMWindowInner;
28 : class nsIDOMNavigatorSystemMessages;
29 : class nsIPrincipal;
30 : class nsIURI;
31 :
32 : namespace mozilla {
33 : namespace dom {
34 : class BodyExtractorBase;
35 : class Geolocation;
36 : class systemMessageCallback;
37 : class MediaDevices;
38 : struct MediaStreamConstraints;
39 : class WakeLock;
40 : class ArrayBufferOrArrayBufferViewOrBlobOrFormDataOrUSVStringOrURLSearchParams;
41 : class ServiceWorkerContainer;
42 : class DOMRequest;
43 : struct FlyWebPublishOptions;
44 : struct FlyWebFilter;
45 : class CredentialsContainer;
46 : } // namespace dom
47 : } // namespace mozilla
48 :
49 : //*****************************************************************************
50 : // Navigator: Script "navigator" object
51 : //*****************************************************************************
52 :
53 : namespace mozilla {
54 : namespace dom {
55 :
56 : class Permissions;
57 :
58 : namespace battery {
59 : class BatteryManager;
60 : } // namespace battery
61 :
62 : class Promise;
63 :
64 : class DesktopNotificationCenter;
65 : class MozIdleObserver;
66 : class Gamepad;
67 : class GamepadServiceTest;
68 : class NavigatorUserMediaSuccessCallback;
69 : class NavigatorUserMediaErrorCallback;
70 : class MozGetUserMediaDevicesSuccessCallback;
71 :
72 : namespace network {
73 : class Connection;
74 : } // namespace network
75 :
76 : class PowerManager;
77 : class Presentation;
78 : class LegacyMozTCPSocket;
79 : class VRDisplay;
80 : class VRServiceTest;
81 : class StorageManager;
82 :
83 : namespace time {
84 : class TimeManager;
85 : } // namespace time
86 :
87 : class Navigator final : public nsIDOMNavigator
88 : , public nsIMozNavigatorNetwork
89 : , public nsWrapperCache
90 : {
91 : public:
92 : explicit Navigator(nsPIDOMWindowInner* aInnerWindow);
93 :
94 : NS_DECL_CYCLE_COLLECTING_ISUPPORTS
95 1 : NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS_AMBIGUOUS(Navigator,
96 : nsIDOMNavigator)
97 : NS_DECL_NSIDOMNAVIGATOR
98 : NS_DECL_NSIMOZNAVIGATORNETWORK
99 :
100 : static void Init();
101 :
102 : void Invalidate();
103 0 : nsPIDOMWindowInner *GetWindow() const
104 : {
105 0 : return mWindow;
106 : }
107 :
108 : void RefreshMIMEArray();
109 :
110 : size_t SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const;
111 :
112 : /**
113 : * For use during document.write where our inner window changes.
114 : */
115 : void SetWindow(nsPIDOMWindowInner *aInnerWindow);
116 :
117 : /**
118 : * Called when the inner window navigates to a new page.
119 : */
120 : void OnNavigation();
121 :
122 : // The XPCOM GetProduct is OK
123 : // The XPCOM GetLanguage is OK
124 : void GetAppName(nsAString& aAppName, CallerType aCallerType) const;
125 : void GetAppVersion(nsAString& aAppName, CallerType aCallerType,
126 : ErrorResult& aRv) const;
127 : void GetPlatform(nsAString& aPlatform, CallerType aCallerType,
128 : ErrorResult& aRv) const;
129 : void GetUserAgent(nsAString& aUserAgent, CallerType aCallerType,
130 : ErrorResult& aRv) const;
131 : bool OnLine();
132 : void RegisterProtocolHandler(const nsAString& aScheme, const nsAString& aURL,
133 : const nsAString& aTitle, ErrorResult& aRv);
134 : void RegisterContentHandler(const nsAString& aMIMEType, const nsAString& aURL,
135 : const nsAString& aTitle, ErrorResult& aRv);
136 : nsMimeTypeArray* GetMimeTypes(ErrorResult& aRv);
137 : nsPluginArray* GetPlugins(ErrorResult& aRv);
138 : Permissions* GetPermissions(ErrorResult& aRv);
139 : // The XPCOM GetDoNotTrack is ok
140 : Geolocation* GetGeolocation(ErrorResult& aRv);
141 : Promise* GetBattery(ErrorResult& aRv);
142 :
143 : already_AddRefed<Promise> PublishServer(const nsAString& aName,
144 : const FlyWebPublishOptions& aOptions,
145 : ErrorResult& aRv);
146 : static void AppName(nsAString& aAppName, bool aUsePrefOverriddenValue);
147 :
148 : static nsresult GetPlatform(nsAString& aPlatform,
149 : bool aUsePrefOverriddenValue);
150 :
151 : static nsresult GetAppVersion(nsAString& aAppVersion,
152 : bool aUsePrefOverriddenValue);
153 :
154 : static nsresult GetUserAgent(nsPIDOMWindowInner* aWindow,
155 : bool aIsCallerChrome,
156 : nsAString& aUserAgent);
157 :
158 : // Clears the user agent cache by calling:
159 : // NavigatorBinding::ClearCachedUserAgentValue(this);
160 : void ClearUserAgentCache();
161 :
162 : bool Vibrate(uint32_t aDuration);
163 : bool Vibrate(const nsTArray<uint32_t>& aDuration);
164 : void SetVibrationPermission(bool aPermitted, bool aPersistent);
165 : uint32_t MaxTouchPoints();
166 : void GetAppCodeName(nsString& aAppCodeName, ErrorResult& aRv)
167 : {
168 : aRv = GetAppCodeName(aAppCodeName);
169 : }
170 : void GetOscpu(nsAString& aOscpu, CallerType aCallerType,
171 : ErrorResult& aRv) const;
172 : // The XPCOM GetVendor is OK
173 : // The XPCOM GetVendorSub is OK
174 : // The XPCOM GetProductSub is OK
175 : bool CookieEnabled();
176 : void GetBuildID(nsAString& aBuildID, CallerType aCallerType,
177 : ErrorResult& aRv) const;
178 : PowerManager* GetMozPower(ErrorResult& aRv);
179 : bool JavaEnabled(CallerType aCallerType, ErrorResult& aRv);
180 : uint64_t HardwareConcurrency();
181 : bool CpuHasSSE2();
182 0 : bool TaintEnabled()
183 : {
184 0 : return false;
185 : }
186 : void AddIdleObserver(MozIdleObserver& aObserver, ErrorResult& aRv);
187 : void RemoveIdleObserver(MozIdleObserver& aObserver, ErrorResult& aRv);
188 : already_AddRefed<WakeLock> RequestWakeLock(const nsAString &aTopic,
189 : ErrorResult& aRv);
190 :
191 : DesktopNotificationCenter* GetMozNotification(ErrorResult& aRv);
192 : already_AddRefed<LegacyMozTCPSocket> MozTCPSocket();
193 : network::Connection* GetConnection(ErrorResult& aRv);
194 : MediaDevices* GetMediaDevices(ErrorResult& aRv);
195 :
196 : void GetGamepads(nsTArray<RefPtr<Gamepad> >& aGamepads, ErrorResult& aRv);
197 : GamepadServiceTest* RequestGamepadServiceTest();
198 : already_AddRefed<Promise> GetVRDisplays(ErrorResult& aRv);
199 : void GetActiveVRDisplays(nsTArray<RefPtr<VRDisplay>>& aDisplays) const;
200 : VRServiceTest* RequestVRServiceTest();
201 : bool IsWebVRContentDetected() const;
202 : bool IsWebVRContentPresenting() const;
203 : void RequestVRPresentation(VRDisplay& aDisplay);
204 : #ifdef MOZ_TIME_MANAGER
205 : time::TimeManager* GetMozTime(ErrorResult& aRv);
206 : #endif // MOZ_TIME_MANAGER
207 :
208 : Presentation* GetPresentation(ErrorResult& aRv);
209 :
210 : bool SendBeacon(const nsAString& aUrl,
211 : const Nullable<fetch::BodyInit>& aData,
212 : ErrorResult& aRv);
213 :
214 : void MozGetUserMedia(const MediaStreamConstraints& aConstraints,
215 : NavigatorUserMediaSuccessCallback& aOnSuccess,
216 : NavigatorUserMediaErrorCallback& aOnError,
217 : CallerType aCallerType,
218 : ErrorResult& aRv);
219 : void MozGetUserMediaDevices(const MediaStreamConstraints& aConstraints,
220 : MozGetUserMediaDevicesSuccessCallback& aOnSuccess,
221 : NavigatorUserMediaErrorCallback& aOnError,
222 : uint64_t aInnerWindowID,
223 : const nsAString& aCallID,
224 : ErrorResult& aRv);
225 :
226 : already_AddRefed<ServiceWorkerContainer> ServiceWorker();
227 :
228 : mozilla::dom::CredentialsContainer* Credentials();
229 :
230 : void GetLanguages(nsTArray<nsString>& aLanguages);
231 :
232 : bool MozE10sEnabled();
233 :
234 : StorageManager* Storage();
235 :
236 : static void GetAcceptLanguages(nsTArray<nsString>& aLanguages);
237 :
238 : // WebIDL helper methods
239 : static bool HasWakeLockSupport(JSContext* /* unused*/, JSObject* /*unused */);
240 : static bool HasWifiManagerSupport(JSContext* /* unused */,
241 : JSObject* aGlobal);
242 : static bool HasUserMediaSupport(JSContext* /* unused */,
243 : JSObject* /* unused */);
244 :
245 : static bool IsE10sEnabled(JSContext* aCx, JSObject* aGlobal);
246 :
247 0 : nsPIDOMWindowInner* GetParentObject() const
248 : {
249 0 : return GetWindow();
250 : }
251 :
252 : virtual JSObject* WrapObject(JSContext* cx, JS::Handle<JSObject*> aGivenProto) override;
253 :
254 : // GetWindowFromGlobal returns the inner window for this global, if
255 : // any, else null.
256 : static already_AddRefed<nsPIDOMWindowInner> GetWindowFromGlobal(JSObject* aGlobal);
257 :
258 : already_AddRefed<Promise>
259 : RequestMediaKeySystemAccess(const nsAString& aKeySystem,
260 : const Sequence<MediaKeySystemConfiguration>& aConfig,
261 : ErrorResult& aRv);
262 : private:
263 : RefPtr<MediaKeySystemAccessManager> mMediaKeySystemAccessManager;
264 :
265 : public:
266 : void NotifyVRDisplaysUpdated();
267 : void NotifyActiveVRDisplaysChanged();
268 :
269 : private:
270 : virtual ~Navigator();
271 :
272 : bool CheckPermission(const char* type);
273 : static bool CheckPermission(nsPIDOMWindowInner* aWindow, const char* aType);
274 :
275 : // This enum helps SendBeaconInternal to apply different behaviors to body
276 : // types.
277 : enum BeaconType {
278 : eBeaconTypeBlob,
279 : eBeaconTypeArrayBuffer,
280 : eBeaconTypeOther
281 : };
282 :
283 : bool SendBeaconInternal(const nsAString& aUrl,
284 : BodyExtractorBase* aBody,
285 : BeaconType aType,
286 : ErrorResult& aRv);
287 :
288 : RefPtr<nsMimeTypeArray> mMimeTypes;
289 : RefPtr<nsPluginArray> mPlugins;
290 : RefPtr<Permissions> mPermissions;
291 : RefPtr<Geolocation> mGeolocation;
292 : RefPtr<DesktopNotificationCenter> mNotification;
293 : RefPtr<battery::BatteryManager> mBatteryManager;
294 : RefPtr<Promise> mBatteryPromise;
295 : RefPtr<PowerManager> mPowerManager;
296 : RefPtr<network::Connection> mConnection;
297 : RefPtr<CredentialsContainer> mCredentials;
298 : RefPtr<MediaDevices> mMediaDevices;
299 : RefPtr<time::TimeManager> mTimeManager;
300 : RefPtr<ServiceWorkerContainer> mServiceWorkerContainer;
301 : nsCOMPtr<nsPIDOMWindowInner> mWindow;
302 : RefPtr<Presentation> mPresentation;
303 : RefPtr<GamepadServiceTest> mGamepadServiceTest;
304 : nsTArray<RefPtr<Promise> > mVRGetDisplaysPromises;
305 : RefPtr<VRServiceTest> mVRServiceTest;
306 : nsTArray<uint32_t> mRequestedVibrationPattern;
307 : RefPtr<StorageManager> mStorageManager;
308 : };
309 :
310 : } // namespace dom
311 : } // namespace mozilla
312 :
313 : #endif // mozilla_dom_Navigator_h
|