FetchEventOpParent.cpp (3205B)
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 #include "FetchEventOpParent.h" 8 9 #include "mozilla/Assertions.h" 10 #include "mozilla/RefPtr.h" 11 #include "mozilla/dom/FetchEventOpProxyParent.h" 12 #include "mozilla/dom/FetchStreamUtils.h" 13 #include "mozilla/dom/FetchTypes.h" 14 #include "mozilla/dom/InternalResponse.h" 15 #include "mozilla/dom/RemoteWorkerControllerParent.h" 16 #include "mozilla/dom/RemoteWorkerParent.h" 17 #include "mozilla/dom/RemoteWorkerServiceParent.h" 18 #include "mozilla/ipc/BackgroundParent.h" 19 #include "nsDebug.h" 20 21 namespace mozilla { 22 23 using namespace ipc; 24 25 namespace dom { 26 27 std::tuple<Maybe<ParentToParentInternalResponse>, Maybe<ResponseEndArgs>> 28 FetchEventOpParent::OnStart( 29 MovingNotNull<RefPtr<FetchEventOpProxyParent>> aFetchEventOpProxyParent) { 30 Maybe<ParentToParentInternalResponse> preloadResponse = 31 std::move(mState.as<Pending>().mPreloadResponse); 32 Maybe<ResponseEndArgs> preloadResponseEndArgs = 33 std::move(mState.as<Pending>().mEndArgs); 34 mState = AsVariant(Started{std::move(aFetchEventOpProxyParent)}); 35 return std::make_tuple(preloadResponse, preloadResponseEndArgs); 36 } 37 38 void FetchEventOpParent::OnFinish() { 39 MOZ_ASSERT(mState.is<Started>()); 40 mState = AsVariant(Finished()); 41 } 42 43 mozilla::ipc::IPCResult FetchEventOpParent::RecvPreloadResponse( 44 ParentToParentInternalResponse&& aResponse) { 45 AssertIsOnBackgroundThread(); 46 47 mState.match( 48 [&aResponse](Pending& aPending) { 49 MOZ_ASSERT(aPending.mPreloadResponse.isNothing()); 50 aPending.mPreloadResponse = Some(std::move(aResponse)); 51 }, 52 [&aResponse](Started& aStarted) { 53 (void)aStarted.mFetchEventOpProxyParent->SendPreloadResponse( 54 ToParentToChild(aResponse)); 55 }, 56 [](const Finished&) {}); 57 58 return IPC_OK(); 59 } 60 61 mozilla::ipc::IPCResult FetchEventOpParent::RecvPreloadResponseTiming( 62 ResponseTiming&& aTiming) { 63 AssertIsOnBackgroundThread(); 64 65 mState.match( 66 [&aTiming](Pending& aPending) { 67 MOZ_ASSERT(aPending.mTiming.isNothing()); 68 aPending.mTiming = Some(std::move(aTiming)); 69 }, 70 [&aTiming](Started& aStarted) { 71 (void)aStarted.mFetchEventOpProxyParent->SendPreloadResponseTiming( 72 std::move(aTiming)); 73 }, 74 [](const Finished&) {}); 75 76 return IPC_OK(); 77 } 78 79 mozilla::ipc::IPCResult FetchEventOpParent::RecvPreloadResponseEnd( 80 ResponseEndArgs&& aArgs) { 81 AssertIsOnBackgroundThread(); 82 83 mState.match( 84 [&aArgs](Pending& aPending) { 85 MOZ_ASSERT(aPending.mEndArgs.isNothing()); 86 aPending.mEndArgs = Some(std::move(aArgs)); 87 }, 88 [&aArgs](Started& aStarted) { 89 (void)aStarted.mFetchEventOpProxyParent->SendPreloadResponseEnd( 90 std::move(aArgs)); 91 }, 92 [](const Finished&) {}); 93 94 return IPC_OK(); 95 } 96 97 void FetchEventOpParent::ActorDestroy(ActorDestroyReason) { 98 AssertIsOnBackgroundThread(); 99 } 100 101 } // namespace dom 102 } // namespace mozilla