LCOV - code coverage report
Current view: top level - dom/base - Navigator.h (source / functions) Hit Total Coverage
Test: output.info Lines: 1 7 14.3 %
Date: 2017-07-14 16:53:18 Functions: 1 10 10.0 %
Legend: Lines: hit not hit

          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

Generated by: LCOV version 1.13