LCOV - code coverage report
Current view: top level - dom/workers - ServiceWorkerEvents.h (source / functions) Hit Total Coverage
Test: output.info Lines: 0 53 0.0 %
Date: 2017-07-14 16:53:18 Functions: 0 156 0.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_workers_serviceworkerevents_h__
       8             : #define mozilla_dom_workers_serviceworkerevents_h__
       9             : 
      10             : #include "mozilla/dom/Event.h"
      11             : #include "mozilla/dom/ExtendableEventBinding.h"
      12             : #include "mozilla/dom/ExtendableMessageEventBinding.h"
      13             : #include "mozilla/dom/FetchEventBinding.h"
      14             : #include "mozilla/dom/File.h"
      15             : #include "mozilla/dom/Promise.h"
      16             : #include "mozilla/dom/Response.h"
      17             : #include "mozilla/dom/workers/bindings/ServiceWorker.h"
      18             : #include "mozilla/dom/workers/Workers.h"
      19             : 
      20             : #include "nsProxyRelease.h"
      21             : #include "nsContentUtils.h"
      22             : 
      23             : class nsIInterceptedChannel;
      24             : 
      25             : namespace mozilla {
      26             : namespace dom {
      27             : class Blob;
      28             : class MessagePort;
      29             : class Request;
      30             : class ResponseOrPromise;
      31             : 
      32             : struct PushEventInit;
      33             : } // namespace dom
      34             : } // namespace mozilla
      35             : 
      36             : BEGIN_WORKERS_NAMESPACE
      37             : 
      38             : class ServiceWorkerRegistrationInfo;
      39             : 
      40           0 : class CancelChannelRunnable final : public Runnable
      41             : {
      42             :   nsMainThreadPtrHandle<nsIInterceptedChannel> mChannel;
      43             :   nsMainThreadPtrHandle<ServiceWorkerRegistrationInfo> mRegistration;
      44             :   const nsresult mStatus;
      45             : public:
      46             :   CancelChannelRunnable(nsMainThreadPtrHandle<nsIInterceptedChannel>& aChannel,
      47             :                         nsMainThreadPtrHandle<ServiceWorkerRegistrationInfo>& aRegistration,
      48             :                         nsresult aStatus);
      49             : 
      50             :   NS_IMETHOD Run() override;
      51             : };
      52             : 
      53             : class ExtendableEvent : public Event
      54             : {
      55             : public:
      56           0 :   class ExtensionsHandler {
      57             :   public:
      58             :     virtual bool
      59             :     WaitOnPromise(Promise& aPromise) = 0;
      60             : 
      61             :     NS_INLINE_DECL_PURE_VIRTUAL_REFCOUNTING
      62             :   };
      63             : 
      64             : private:
      65             :   RefPtr<ExtensionsHandler> mExtensionsHandler;
      66             : 
      67             : protected:
      68             :   bool
      69             :   WaitOnPromise(Promise& aPromise);
      70             : 
      71             :   explicit ExtendableEvent(mozilla::dom::EventTarget* aOwner);
      72           0 :   ~ExtendableEvent() {}
      73             : 
      74             : public:
      75             :   NS_DECL_ISUPPORTS_INHERITED
      76           0 :   NS_FORWARD_TO_EVENT
      77             : 
      78             :   void
      79             :   SetKeepAliveHandler(ExtensionsHandler* aExtensionsHandler);
      80             : 
      81           0 :   virtual JSObject* WrapObjectInternal(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override
      82             :   {
      83           0 :     return mozilla::dom::ExtendableEventBinding::Wrap(aCx, this, aGivenProto);
      84             :   }
      85             : 
      86             :   static already_AddRefed<ExtendableEvent>
      87           0 :   Constructor(mozilla::dom::EventTarget* aOwner,
      88             :               const nsAString& aType,
      89             :               const EventInit& aOptions)
      90             :   {
      91           0 :     RefPtr<ExtendableEvent> e = new ExtendableEvent(aOwner);
      92           0 :     bool trusted = e->Init(aOwner);
      93           0 :     e->InitEvent(aType, aOptions.mBubbles, aOptions.mCancelable);
      94           0 :     e->SetTrusted(trusted);
      95           0 :     e->SetComposed(aOptions.mComposed);
      96           0 :     return e.forget();
      97             :   }
      98             : 
      99             :   static already_AddRefed<ExtendableEvent>
     100           0 :   Constructor(const GlobalObject& aGlobal,
     101             :               const nsAString& aType,
     102             :               const EventInit& aOptions,
     103             :               ErrorResult& aRv)
     104             :   {
     105           0 :     nsCOMPtr<EventTarget> target = do_QueryInterface(aGlobal.GetAsSupports());
     106           0 :     return Constructor(target, aType, aOptions);
     107             :   }
     108             : 
     109             :   void
     110             :   WaitUntil(JSContext* aCx, Promise& aPromise, ErrorResult& aRv);
     111             : 
     112           0 :   virtual ExtendableEvent* AsExtendableEvent() override
     113             :   {
     114           0 :     return this;
     115             :   }
     116             : };
     117             : 
     118             : class FetchEvent final : public ExtendableEvent
     119             : {
     120             :   nsMainThreadPtrHandle<nsIInterceptedChannel> mChannel;
     121             :   nsMainThreadPtrHandle<ServiceWorkerRegistrationInfo> mRegistration;
     122             :   RefPtr<Request> mRequest;
     123             :   nsCString mScriptSpec;
     124             :   nsCString mPreventDefaultScriptSpec;
     125             :   nsString mClientId;
     126             :   uint32_t mPreventDefaultLineNumber;
     127             :   uint32_t mPreventDefaultColumnNumber;
     128             :   bool mIsReload;
     129             :   bool mWaitToRespond;
     130             : protected:
     131             :   explicit FetchEvent(EventTarget* aOwner);
     132             :   ~FetchEvent();
     133             : 
     134             : public:
     135             :   NS_DECL_ISUPPORTS_INHERITED
     136           0 :   NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(FetchEvent, ExtendableEvent)
     137             : 
     138             :   // Note, we cannot use NS_FORWARD_TO_EVENT because we want a different
     139             :   // PreventDefault(JSContext*, CallerType) override.
     140           0 :   NS_FORWARD_NSIDOMEVENT(Event::)
     141             : 
     142           0 :   virtual JSObject* WrapObjectInternal(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override
     143             :   {
     144           0 :     return FetchEventBinding::Wrap(aCx, this, aGivenProto);
     145             :   }
     146             : 
     147             :   void PostInit(nsMainThreadPtrHandle<nsIInterceptedChannel>& aChannel,
     148             :                 nsMainThreadPtrHandle<ServiceWorkerRegistrationInfo>& aRegistration,
     149             :                 const nsACString& aScriptSpec);
     150             : 
     151             :   static already_AddRefed<FetchEvent>
     152             :   Constructor(const GlobalObject& aGlobal,
     153             :               const nsAString& aType,
     154             :               const FetchEventInit& aOptions,
     155             :               ErrorResult& aRv);
     156             : 
     157             :   bool
     158           0 :   WaitToRespond() const
     159             :   {
     160           0 :     return mWaitToRespond;
     161             :   }
     162             : 
     163             :   Request*
     164           0 :   Request_() const
     165             :   {
     166           0 :     MOZ_ASSERT(mRequest);
     167           0 :     return mRequest;
     168             :   }
     169             : 
     170             :   void
     171           0 :   GetClientId(nsAString& aClientId) const
     172             :   {
     173           0 :     aClientId = mClientId;
     174           0 :   }
     175             : 
     176             :   bool
     177           0 :   IsReload() const
     178             :   {
     179           0 :     return mIsReload;
     180             :   }
     181             : 
     182             :   void
     183             :   RespondWith(JSContext* aCx, Promise& aArg, ErrorResult& aRv);
     184             : 
     185             :   already_AddRefed<Promise>
     186             :   ForwardTo(const nsAString& aUrl);
     187             : 
     188             :   already_AddRefed<Promise>
     189             :   Default();
     190             : 
     191             :   void
     192             :   PreventDefault(JSContext* aCx, CallerType aCallerType) override;
     193             : 
     194             :   void
     195             :   ReportCanceled();
     196             : };
     197             : 
     198             : class PushMessageData final : public nsISupports,
     199             :                               public nsWrapperCache
     200             : {
     201             : public:
     202             :   NS_DECL_CYCLE_COLLECTING_ISUPPORTS
     203           0 :   NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(PushMessageData)
     204             : 
     205             :   virtual JSObject* WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override;
     206             : 
     207           0 :   nsISupports* GetParentObject() const {
     208           0 :     return mOwner;
     209             :   }
     210             : 
     211             :   void Json(JSContext* cx, JS::MutableHandle<JS::Value> aRetval,
     212             :             ErrorResult& aRv);
     213             :   void Text(nsAString& aData);
     214             :   void ArrayBuffer(JSContext* cx, JS::MutableHandle<JSObject*> aRetval,
     215             :                    ErrorResult& aRv);
     216             :   already_AddRefed<mozilla::dom::Blob> Blob(ErrorResult& aRv);
     217             : 
     218             :   PushMessageData(nsISupports* aOwner, nsTArray<uint8_t>&& aBytes);
     219             : private:
     220             :   nsCOMPtr<nsISupports> mOwner;
     221             :   nsTArray<uint8_t> mBytes;
     222             :   nsString mDecodedText;
     223             :   ~PushMessageData();
     224             : 
     225             :   nsresult EnsureDecodedText();
     226             :   uint8_t* GetContentsCopy();
     227             : };
     228             : 
     229             : class PushEvent final : public ExtendableEvent
     230             : {
     231             :   RefPtr<PushMessageData> mData;
     232             : 
     233             : protected:
     234             :   explicit PushEvent(mozilla::dom::EventTarget* aOwner);
     235           0 :   ~PushEvent() {}
     236             : 
     237             : public:
     238             :   NS_DECL_ISUPPORTS_INHERITED
     239           0 :   NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(PushEvent, ExtendableEvent)
     240           0 :   NS_FORWARD_TO_EVENT
     241             : 
     242             :   virtual JSObject* WrapObjectInternal(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override;
     243             : 
     244             :   static already_AddRefed<PushEvent>
     245             :   Constructor(mozilla::dom::EventTarget* aOwner,
     246             :               const nsAString& aType,
     247             :               const PushEventInit& aOptions,
     248             :               ErrorResult& aRv);
     249             : 
     250             :   static already_AddRefed<PushEvent>
     251           0 :   Constructor(const GlobalObject& aGlobal,
     252             :               const nsAString& aType,
     253             :               const PushEventInit& aOptions,
     254             :               ErrorResult& aRv)
     255             :   {
     256           0 :     nsCOMPtr<EventTarget> owner = do_QueryInterface(aGlobal.GetAsSupports());
     257           0 :     return Constructor(owner, aType, aOptions, aRv);
     258             :   }
     259             : 
     260             :   PushMessageData*
     261           0 :   GetData() const
     262             :   {
     263           0 :     return mData;
     264             :   }
     265             : };
     266             : 
     267             : class ExtendableMessageEvent final : public ExtendableEvent
     268             : {
     269             :   JS::Heap<JS::Value> mData;
     270             :   nsString mOrigin;
     271             :   nsString mLastEventId;
     272             :   RefPtr<ServiceWorkerClient> mClient;
     273             :   RefPtr<ServiceWorker> mServiceWorker;
     274             :   RefPtr<MessagePort> mMessagePort;
     275             :   nsTArray<RefPtr<MessagePort>> mPorts;
     276             : 
     277             : protected:
     278             :   explicit ExtendableMessageEvent(EventTarget* aOwner);
     279             :   ~ExtendableMessageEvent();
     280             : 
     281             : public:
     282             :   NS_DECL_ISUPPORTS_INHERITED
     283           0 :   NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS_INHERITED(ExtendableMessageEvent,
     284             :                                                          ExtendableEvent)
     285             : 
     286           0 :   NS_FORWARD_TO_EVENT
     287             : 
     288           0 :   virtual JSObject* WrapObjectInternal(
     289             :     JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override
     290             :   {
     291           0 :     return mozilla::dom::ExtendableMessageEventBinding::Wrap(aCx, this, aGivenProto);
     292             :   }
     293             : 
     294             :   static already_AddRefed<ExtendableMessageEvent>
     295             :   Constructor(mozilla::dom::EventTarget* aOwner,
     296             :               const nsAString& aType,
     297             :               const ExtendableMessageEventInit& aOptions,
     298             :               ErrorResult& aRv);
     299             : 
     300             :   static already_AddRefed<ExtendableMessageEvent>
     301             :   Constructor(const GlobalObject& aGlobal,
     302             :               const nsAString& aType,
     303             :               const ExtendableMessageEventInit& aOptions,
     304             :               ErrorResult& aRv);
     305             : 
     306             :   void GetData(JSContext* aCx, JS::MutableHandle<JS::Value> aData,
     307             :                ErrorResult& aRv);
     308             : 
     309             :   void GetSource(Nullable<OwningClientOrServiceWorkerOrMessagePort>& aValue) const;
     310             : 
     311           0 :   NS_IMETHOD GetOrigin(nsAString& aOrigin)
     312             :   {
     313           0 :     aOrigin = mOrigin;
     314           0 :     return NS_OK;
     315             :   }
     316             : 
     317           0 :   NS_IMETHOD GetLastEventId(nsAString& aLastEventId)
     318             :   {
     319           0 :     aLastEventId = mLastEventId;
     320           0 :     return NS_OK;
     321             :   }
     322             : 
     323             :   void GetPorts(nsTArray<RefPtr<MessagePort>>& aPorts);
     324             : };
     325             : 
     326             : END_WORKERS_NAMESPACE
     327             : 
     328             : #endif /* mozilla_dom_workers_serviceworkerevents_h__ */

Generated by: LCOV version 1.13