FetchEventOpProxyChild.h (2788B)
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_fetcheventopproxychild_h__ 8 #define mozilla_dom_fetcheventopproxychild_h__ 9 10 #include "ServiceWorkerOp.h" 11 #include "ServiceWorkerOpPromise.h" 12 #include "mozilla/MozPromise.h" 13 #include "mozilla/RefPtr.h" 14 #include "mozilla/dom/InternalRequest.h" 15 #include "mozilla/dom/PFetchEventOpProxyChild.h" 16 #include "nsISupportsImpl.h" 17 18 namespace mozilla::dom { 19 20 class InternalRequest; 21 class InternalResponse; 22 class ParentToChildServiceWorkerFetchEventOpArgs; 23 24 class FetchEventOpProxyChild final : public PFetchEventOpProxyChild { 25 friend class PFetchEventOpProxyChild; 26 27 public: 28 NS_INLINE_DECL_THREADSAFE_REFCOUNTING(FetchEventOpProxyChild, override); 29 30 FetchEventOpProxyChild() = default; 31 32 void Initialize(const ParentToChildServiceWorkerFetchEventOpArgs& aArgs); 33 34 // Must only be called once and on a worker thread. 35 SafeRefPtr<InternalRequest> ExtractInternalRequest(); 36 37 RefPtr<FetchEventPreloadResponseAvailablePromise> 38 GetPreloadResponseAvailablePromise(); 39 40 RefPtr<FetchEventPreloadResponseTimingPromise> 41 GetPreloadResponseTimingPromise(); 42 43 RefPtr<FetchEventPreloadResponseEndPromise> GetPreloadResponseEndPromise(); 44 45 private: 46 ~FetchEventOpProxyChild() = default; 47 48 mozilla::ipc::IPCResult RecvPreloadResponse( 49 ParentToChildInternalResponse&& aResponse); 50 51 mozilla::ipc::IPCResult RecvPreloadResponseTiming(ResponseTiming&& aTiming); 52 53 mozilla::ipc::IPCResult RecvPreloadResponseEnd(ResponseEndArgs&& aArgs); 54 55 void ActorDestroy(ActorDestroyReason) override; 56 57 MozPromiseRequestHolder<FetchEventRespondWithPromise> 58 mRespondWithPromiseRequestHolder; 59 60 RefPtr<FetchEventOp> mOp; 61 62 // Initialized on RemoteWorkerService::Thread, read on a worker thread. 63 SafeRefPtr<InternalRequest> mInternalRequest; 64 65 RefPtr<FetchEventPreloadResponseAvailablePromise::Private> 66 mPreloadResponseAvailablePromise; 67 RefPtr<FetchEventPreloadResponseTimingPromise::Private> 68 mPreloadResponseTimingPromise; 69 RefPtr<FetchEventPreloadResponseEndPromise::Private> 70 mPreloadResponseEndPromise; 71 72 // MozPromise intentionally does not expose synchronous access to the 73 // resolved/rejected state of a promise, so track whether or not we've 74 // resolved these promises manually. 75 bool mPreloadResponseAvailablePromiseResolved = false; 76 bool mPreloadResponseEndPromiseResolved = false; 77 78 Maybe<ServiceWorkerOpResult> mCachedOpResult; 79 }; 80 81 } // namespace mozilla::dom 82 83 #endif // mozilla_dom_fetcheventopproxychild_h__