LCOV - code coverage report
Current view: top level - dom/workers - WorkerScope.h (source / functions) Hit Total Coverage
Test: output.info Lines: 3 47 6.4 %
Date: 2017-07-14 16:53:18 Functions: 4 52 7.7 %
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_workerscope_h__
       8             : #define mozilla_dom_workerscope_h__
       9             : 
      10             : #include "Workers.h"
      11             : #include "mozilla/DOMEventTargetHelper.h"
      12             : #include "mozilla/dom/Headers.h"
      13             : #include "mozilla/dom/RequestBinding.h"
      14             : #include "nsWeakReference.h"
      15             : #include "mozilla/dom/ImageBitmapSource.h"
      16             : 
      17             : namespace mozilla {
      18             : namespace dom {
      19             : 
      20             : class AnyCallback;
      21             : struct ChannelPixelLayout;
      22             : class Console;
      23             : class Crypto;
      24             : class Function;
      25             : class IDBFactory;
      26             : enum class ImageBitmapFormat : uint8_t;
      27             : class Performance;
      28             : class Promise;
      29             : class RequestOrUSVString;
      30             : class ServiceWorkerRegistration;
      31             : class WorkerLocation;
      32             : class WorkerNavigator;
      33             : enum class CallerType : uint32_t;
      34             : 
      35             : namespace cache {
      36             : 
      37             : class CacheStorage;
      38             : 
      39             : } // namespace cache
      40             : 
      41             : namespace workers {
      42             : 
      43             : class ServiceWorkerClients;
      44             : class WorkerPrivate;
      45             : 
      46             : } // namespace workers
      47             : 
      48             : class WorkerGlobalScope : public DOMEventTargetHelper,
      49             :                           public nsIGlobalObject,
      50             :                           public nsSupportsWeakReference
      51             : {
      52             :   typedef mozilla::dom::IDBFactory IDBFactory;
      53             : 
      54             :   RefPtr<Console> mConsole;
      55             :   RefPtr<Crypto> mCrypto;
      56             :   RefPtr<WorkerLocation> mLocation;
      57             :   RefPtr<WorkerNavigator> mNavigator;
      58             :   RefPtr<Performance> mPerformance;
      59             :   RefPtr<IDBFactory> mIndexedDB;
      60             :   RefPtr<cache::CacheStorage> mCacheStorage;
      61             :   nsCOMPtr<nsISerialEventTarget> mSerialEventTarget;
      62             : 
      63             :   uint32_t mWindowInteractionsAllowed;
      64             : 
      65             : protected:
      66             :   typedef mozilla::dom::workers::WorkerPrivate WorkerPrivate;
      67             :   WorkerPrivate* mWorkerPrivate;
      68             : 
      69             :   explicit WorkerGlobalScope(WorkerPrivate* aWorkerPrivate);
      70             :   virtual ~WorkerGlobalScope();
      71             : 
      72             : public:
      73             :   virtual JSObject*
      74             :   WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override;
      75             : 
      76             :   virtual bool
      77             :   WrapGlobalObject(JSContext* aCx, JS::MutableHandle<JSObject*> aReflector) = 0;
      78             : 
      79             :   virtual JSObject*
      80         201 :   GetGlobalJSObject(void) override
      81             :   {
      82         201 :     return GetWrapper();
      83             :   }
      84             : 
      85             :   NS_DECL_ISUPPORTS_INHERITED
      86          17 :   NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS_INHERITED(WorkerGlobalScope,
      87             :                                                          DOMEventTargetHelper)
      88             : 
      89             :   WorkerGlobalScope*
      90           0 :   Self()
      91             :   {
      92           0 :     return this;
      93             :   }
      94             : 
      95             :   Console*
      96             :   GetConsole(ErrorResult& aRv);
      97             : 
      98             :   Console*
      99           0 :   GetConsoleIfExists() const
     100             :   {
     101           0 :     return mConsole;
     102             :   }
     103             : 
     104             :   Crypto*
     105             :   GetCrypto(ErrorResult& aError);
     106             : 
     107             :   already_AddRefed<WorkerLocation>
     108             :   Location();
     109             : 
     110             :   already_AddRefed<WorkerNavigator>
     111             :   Navigator();
     112             : 
     113             :   already_AddRefed<WorkerNavigator>
     114             :   GetExistingNavigator() const;
     115             : 
     116             :   OnErrorEventHandlerNonNull*
     117             :   GetOnerror();
     118             :   void
     119             :   SetOnerror(OnErrorEventHandlerNonNull* aHandler);
     120             : 
     121             :   void
     122             :   ImportScripts(const Sequence<nsString>& aScriptURLs, ErrorResult& aRv);
     123             : 
     124             :   int32_t
     125             :   SetTimeout(JSContext* aCx, Function& aHandler, const int32_t aTimeout,
     126             :              const Sequence<JS::Value>& aArguments, ErrorResult& aRv);
     127             :   int32_t
     128             :   SetTimeout(JSContext* aCx, const nsAString& aHandler, const int32_t aTimeout,
     129             :              const Sequence<JS::Value>& /* unused */, ErrorResult& aRv);
     130             :   void
     131             :   ClearTimeout(int32_t aHandle);
     132             :   int32_t
     133             :   SetInterval(JSContext* aCx, Function& aHandler,
     134             :               const Optional<int32_t>& aTimeout,
     135             :               const Sequence<JS::Value>& aArguments, ErrorResult& aRv);
     136             :   int32_t
     137             :   SetInterval(JSContext* aCx, const nsAString& aHandler,
     138             :               const Optional<int32_t>& aTimeout,
     139             :               const Sequence<JS::Value>& /* unused */, ErrorResult& aRv);
     140             :   void
     141             :   ClearInterval(int32_t aHandle);
     142             : 
     143             :   void
     144             :   GetOrigin(nsAString& aOrigin) const;
     145             : 
     146             :   void
     147             :   Atob(const nsAString& aAtob, nsAString& aOutput, ErrorResult& aRv) const;
     148             :   void
     149             :   Btoa(const nsAString& aBtoa, nsAString& aOutput, ErrorResult& aRv) const;
     150             : 
     151           0 :   IMPL_EVENT_HANDLER(online)
     152           0 :   IMPL_EVENT_HANDLER(offline)
     153             : 
     154             :   void
     155             :   Dump(const Optional<nsAString>& aString) const;
     156             : 
     157             :   Performance* GetPerformance();
     158             : 
     159             :   already_AddRefed<Promise>
     160             :   Fetch(const RequestOrUSVString& aInput, const RequestInit& aInit,
     161             :         CallerType aCallerType, ErrorResult& aRv);
     162             : 
     163             :   already_AddRefed<IDBFactory>
     164             :   GetIndexedDB(ErrorResult& aErrorResult);
     165             : 
     166             :   already_AddRefed<cache::CacheStorage>
     167             :   GetCaches(ErrorResult& aRv);
     168             : 
     169             :   bool IsSecureContext() const;
     170             : 
     171             :   already_AddRefed<Promise>
     172             :   CreateImageBitmap(JSContext* aCx,
     173             :                     const ImageBitmapSource& aImage, ErrorResult& aRv);
     174             : 
     175             :   already_AddRefed<Promise>
     176             :   CreateImageBitmap(JSContext* aCx,
     177             :                     const ImageBitmapSource& aImage,
     178             :                     int32_t aSx, int32_t aSy, int32_t aSw, int32_t aSh,
     179             :                     ErrorResult& aRv);
     180             : 
     181             :   already_AddRefed<mozilla::dom::Promise>
     182             :   CreateImageBitmap(JSContext* aCx,
     183             :                     const ImageBitmapSource& aImage,
     184             :                     int32_t aOffset, int32_t aLength,
     185             :                     mozilla::dom::ImageBitmapFormat aFormat,
     186             :                     const mozilla::dom::Sequence<mozilla::dom::ChannelPixelLayout>& aLayout,
     187             :                     mozilla::ErrorResult& aRv);
     188             : 
     189             :   bool
     190           0 :   WindowInteractionAllowed() const
     191             :   {
     192           0 :     return mWindowInteractionsAllowed > 0;
     193             :   }
     194             : 
     195             :   void
     196           0 :   AllowWindowInteraction()
     197             :   {
     198           0 :     mWindowInteractionsAllowed++;
     199           0 :   }
     200             : 
     201             :   void
     202           0 :   ConsumeWindowInteraction()
     203             :   {
     204           0 :     MOZ_ASSERT(mWindowInteractionsAllowed > 0);
     205           0 :     mWindowInteractionsAllowed--;
     206           0 :   }
     207             : 
     208             :   // Override DispatchTrait API to target the worker thread.  Dispatch may
     209             :   // return failure if the worker thread is not alive.
     210             :   nsresult
     211             :   Dispatch(const char* aName, TaskCategory aCategory,
     212             :            already_AddRefed<nsIRunnable>&& aRunnable) override;
     213             : 
     214             :   nsISerialEventTarget*
     215             :   EventTargetFor(TaskCategory aCategory) const override;
     216             : 
     217             :   AbstractThread*
     218             :   AbstractMainThreadFor(TaskCategory aCategory) override;
     219             : };
     220             : 
     221             : class DedicatedWorkerGlobalScope final : public WorkerGlobalScope
     222             : {
     223             :   const nsString mName;
     224             : 
     225           0 :   ~DedicatedWorkerGlobalScope() { }
     226             : 
     227             : public:
     228             :   DedicatedWorkerGlobalScope(WorkerPrivate* aWorkerPrivate,
     229             :                              const nsString& aName);
     230             : 
     231             :   virtual bool
     232             :   WrapGlobalObject(JSContext* aCx,
     233             :                    JS::MutableHandle<JSObject*> aReflector) override;
     234             : 
     235           0 :   void GetName(DOMString& aName) const
     236             :   {
     237           0 :     aName.AsAString() = mName;
     238           0 :   }
     239             : 
     240             :   void
     241             :   PostMessage(JSContext* aCx, JS::Handle<JS::Value> aMessage,
     242             :               const Sequence<JSObject*>& aTransferable,
     243             :               ErrorResult& aRv);
     244             : 
     245             :   void
     246             :   Close(JSContext* aCx);
     247             : 
     248           0 :   IMPL_EVENT_HANDLER(message)
     249             : };
     250             : 
     251             : class SharedWorkerGlobalScope final : public WorkerGlobalScope
     252             : {
     253             :   const nsString mName;
     254             : 
     255           0 :   ~SharedWorkerGlobalScope() { }
     256             : 
     257             : public:
     258             :   SharedWorkerGlobalScope(WorkerPrivate* aWorkerPrivate,
     259             :                           const nsString& aName);
     260             : 
     261             :   virtual bool
     262             :   WrapGlobalObject(JSContext* aCx,
     263             :                    JS::MutableHandle<JSObject*> aReflector) override;
     264             : 
     265           0 :   void GetName(DOMString& aName) const
     266             :   {
     267           0 :     aName.AsAString() = mName;
     268           0 :   }
     269             : 
     270             :   void
     271             :   Close(JSContext* aCx);
     272             : 
     273           0 :   IMPL_EVENT_HANDLER(connect)
     274             : };
     275             : 
     276             : class ServiceWorkerGlobalScope final : public WorkerGlobalScope
     277             : {
     278             :   const nsString mScope;
     279             :   RefPtr<workers::ServiceWorkerClients> mClients;
     280             :   RefPtr<ServiceWorkerRegistration> mRegistration;
     281             : 
     282             :   ~ServiceWorkerGlobalScope();
     283             : 
     284             : public:
     285             :   NS_DECL_ISUPPORTS_INHERITED
     286           0 :   NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(ServiceWorkerGlobalScope,
     287             :                                            WorkerGlobalScope)
     288           0 :   IMPL_EVENT_HANDLER(notificationclick)
     289           0 :   IMPL_EVENT_HANDLER(notificationclose)
     290             : 
     291             :   ServiceWorkerGlobalScope(WorkerPrivate* aWorkerPrivate, const nsACString& aScope);
     292             : 
     293             :   virtual bool
     294             :   WrapGlobalObject(JSContext* aCx,
     295             :                    JS::MutableHandle<JSObject*> aReflector) override;
     296             : 
     297             :   static bool
     298             :   OpenWindowEnabled(JSContext* aCx, JSObject* aObj);
     299             : 
     300             :   void
     301           0 :   GetScope(nsString& aScope) const
     302             :   {
     303           0 :     aScope = mScope;
     304           0 :   }
     305             : 
     306             :   workers::ServiceWorkerClients*
     307             :   Clients();
     308             : 
     309             :   ServiceWorkerRegistration*
     310             :   Registration();
     311             : 
     312             :   already_AddRefed<Promise>
     313             :   SkipWaiting(ErrorResult& aRv);
     314             : 
     315           0 :   IMPL_EVENT_HANDLER(activate)
     316           0 :   IMPL_EVENT_HANDLER(install)
     317           0 :   IMPL_EVENT_HANDLER(message)
     318             : 
     319           0 :   IMPL_EVENT_HANDLER(push)
     320           0 :   IMPL_EVENT_HANDLER(pushsubscriptionchange)
     321             : 
     322             :   EventHandlerNonNull*
     323             :   GetOnfetch();
     324             : 
     325             :   void
     326             :   SetOnfetch(mozilla::dom::EventHandlerNonNull* aCallback);
     327             : 
     328             :   using DOMEventTargetHelper::AddEventListener;
     329             :   virtual void
     330             :   AddEventListener(const nsAString& aType,
     331             :                    dom::EventListener* aListener,
     332             :                    const dom::AddEventListenerOptionsOrBoolean& aOptions,
     333             :                    const dom::Nullable<bool>& aWantsUntrusted,
     334             :                    ErrorResult& aRv) override;
     335             : };
     336             : 
     337             : class WorkerDebuggerGlobalScope final : public DOMEventTargetHelper,
     338             :                                         public nsIGlobalObject
     339             : {
     340             :   typedef mozilla::dom::workers::WorkerPrivate WorkerPrivate;
     341             : 
     342             :   WorkerPrivate* mWorkerPrivate;
     343             :   RefPtr<Console> mConsole;
     344             :   nsCOMPtr<nsISerialEventTarget> mSerialEventTarget;
     345             : 
     346             : public:
     347             :   explicit WorkerDebuggerGlobalScope(WorkerPrivate* aWorkerPrivate);
     348             : 
     349             :   NS_DECL_ISUPPORTS_INHERITED
     350           0 :   NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS_INHERITED(WorkerDebuggerGlobalScope,
     351             :                                                          DOMEventTargetHelper)
     352             : 
     353             :   virtual JSObject*
     354           0 :   WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override
     355             :   {
     356           0 :     MOZ_CRASH("Shouldn't get here!");
     357             :   }
     358             : 
     359             :   virtual bool
     360             :   WrapGlobalObject(JSContext* aCx,
     361             :                    JS::MutableHandle<JSObject*> aReflector);
     362             : 
     363             :   virtual JSObject*
     364           0 :   GetGlobalJSObject(void) override
     365             :   {
     366           0 :     return GetWrapper();
     367             :   }
     368             : 
     369             :   void
     370             :   GetGlobal(JSContext* aCx, JS::MutableHandle<JSObject*> aGlobal,
     371             :             ErrorResult& aRv);
     372             : 
     373             :   void
     374             :   CreateSandbox(JSContext* aCx, const nsAString& aName,
     375             :                 JS::Handle<JSObject*> aPrototype,
     376             :                 JS::MutableHandle<JSObject*> aResult,
     377             :                 ErrorResult& aRv);
     378             : 
     379             :   void
     380             :   LoadSubScript(JSContext* aCx, const nsAString& aURL,
     381             :                 const Optional<JS::Handle<JSObject*>>& aSandbox,
     382             :                 ErrorResult& aRv);
     383             : 
     384             :   void
     385             :   EnterEventLoop();
     386             : 
     387             :   void
     388             :   LeaveEventLoop();
     389             : 
     390             :   void
     391             :   PostMessage(const nsAString& aMessage);
     392             : 
     393           0 :   IMPL_EVENT_HANDLER(message)
     394             : 
     395             :   void
     396             :   SetImmediate(Function& aHandler, ErrorResult& aRv);
     397             : 
     398             :   void
     399             :   ReportError(JSContext* aCx, const nsAString& aMessage);
     400             : 
     401             :   void
     402             :   RetrieveConsoleEvents(JSContext* aCx, nsTArray<JS::Value>& aEvents,
     403             :                         ErrorResult& aRv);
     404             : 
     405             :   void
     406             :   SetConsoleEventHandler(JSContext* aCx, AnyCallback* aHandler,
     407             :                          ErrorResult& aRv);
     408             : 
     409             :   Console*
     410             :   GetConsole(ErrorResult& aRv);
     411             : 
     412             :   Console*
     413           0 :   GetConsoleIfExists() const
     414             :   {
     415           0 :     return mConsole;
     416             :   }
     417             : 
     418             :   void
     419             :   Dump(JSContext* aCx, const Optional<nsAString>& aString) const;
     420             : 
     421             :   // Override DispatchTrait API to target the worker thread.  Dispatch may
     422             :   // return failure if the worker thread is not alive.
     423             :   nsresult
     424             :   Dispatch(const char* aName, TaskCategory aCategory,
     425             :            already_AddRefed<nsIRunnable>&& aRunnable) override;
     426             : 
     427             :   nsISerialEventTarget*
     428             :   EventTargetFor(TaskCategory aCategory) const override;
     429             : 
     430             :   AbstractThread*
     431             :   AbstractMainThreadFor(TaskCategory aCategory) override;
     432             : 
     433             : private:
     434             :   virtual ~WorkerDebuggerGlobalScope();
     435             : };
     436             : 
     437             : } // namespace dom
     438             : } // namespace mozilla
     439             : 
     440             : inline nsISupports*
     441             : ToSupports(mozilla::dom::WorkerGlobalScope* aScope)
     442             : {
     443             :   return static_cast<nsIDOMEventTarget*>(aScope);
     444             : }
     445             : 
     446             : #endif /* mozilla_dom_workerscope_h__ */

Generated by: LCOV version 1.13