tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

ServiceWorkerRegistrationParent.cpp (4713B)


      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 "ServiceWorkerRegistrationParent.h"
      8 
      9 #include <utility>
     10 
     11 #include "ServiceWorkerRegistrationProxy.h"
     12 
     13 namespace mozilla::dom {
     14 
     15 using mozilla::ipc::IPCResult;
     16 
     17 void ServiceWorkerRegistrationParent::ActorDestroy(ActorDestroyReason aReason) {
     18  if (mProxy) {
     19    mProxy->RevokeActor(this);
     20    mProxy = nullptr;
     21  }
     22 }
     23 
     24 namespace {
     25 
     26 void ResolveUnregister(
     27    PServiceWorkerRegistrationParent::UnregisterResolver&& aResolver,
     28    bool aSuccess, nsresult aRv) {
     29  aResolver(std::tuple<const bool&, const CopyableErrorResult&>(
     30      aSuccess, CopyableErrorResult(aRv)));
     31 }
     32 
     33 }  // anonymous namespace
     34 
     35 IPCResult ServiceWorkerRegistrationParent::RecvUnregister(
     36    UnregisterResolver&& aResolver) {
     37  if (!mProxy) {
     38    ResolveUnregister(std::move(aResolver), false,
     39                      NS_ERROR_DOM_INVALID_STATE_ERR);
     40    return IPC_OK();
     41  }
     42 
     43  mProxy->Unregister()->Then(
     44      GetCurrentSerialEventTarget(), __func__,
     45      [aResolver](bool aSuccess) mutable {
     46        ResolveUnregister(std::move(aResolver), aSuccess, NS_OK);
     47      },
     48      [aResolver](nsresult aRv) mutable {
     49        ResolveUnregister(std::move(aResolver), false, aRv);
     50      });
     51 
     52  return IPC_OK();
     53 }
     54 
     55 IPCResult ServiceWorkerRegistrationParent::RecvUpdate(
     56    const nsACString& aNewestWorkerScriptUrl, UpdateResolver&& aResolver) {
     57  if (!mProxy) {
     58    aResolver(CopyableErrorResult(NS_ERROR_DOM_INVALID_STATE_ERR));
     59    return IPC_OK();
     60  }
     61 
     62  mProxy->Update(aNewestWorkerScriptUrl)
     63      ->Then(
     64          GetCurrentSerialEventTarget(), __func__,
     65          [aResolver](const ServiceWorkerRegistrationDescriptor& aDescriptor) {
     66            aResolver(aDescriptor.ToIPC());
     67          },
     68          [aResolver](const CopyableErrorResult& aResult) {
     69            aResolver(aResult);
     70          });
     71 
     72  return IPC_OK();
     73 }
     74 
     75 IPCResult ServiceWorkerRegistrationParent::RecvSetNavigationPreloadEnabled(
     76    const bool& aEnabled, SetNavigationPreloadEnabledResolver&& aResolver) {
     77  if (!mProxy) {
     78    aResolver(false);
     79    return IPC_OK();
     80  }
     81 
     82  mProxy->SetNavigationPreloadEnabled(aEnabled)->Then(
     83      GetCurrentSerialEventTarget(), __func__,
     84      [aResolver](bool) { aResolver(true); },
     85      [aResolver](nsresult) { aResolver(false); });
     86 
     87  return IPC_OK();
     88 }
     89 
     90 IPCResult ServiceWorkerRegistrationParent::RecvSetNavigationPreloadHeader(
     91    const nsACString& aHeader, SetNavigationPreloadHeaderResolver&& aResolver) {
     92  if (!mProxy) {
     93    aResolver(false);
     94    return IPC_OK();
     95  }
     96 
     97  mProxy->SetNavigationPreloadHeader(aHeader)->Then(
     98      GetCurrentSerialEventTarget(), __func__,
     99      [aResolver](bool) { aResolver(true); },
    100      [aResolver](nsresult) { aResolver(false); });
    101 
    102  return IPC_OK();
    103 }
    104 
    105 IPCResult ServiceWorkerRegistrationParent::RecvGetNavigationPreloadState(
    106    GetNavigationPreloadStateResolver&& aResolver) {
    107  if (!mProxy) {
    108    aResolver(Nothing());
    109    return IPC_OK();
    110  }
    111 
    112  mProxy->GetNavigationPreloadState()->Then(
    113      GetCurrentSerialEventTarget(), __func__,
    114      [aResolver](const IPCNavigationPreloadState& aState) {
    115        aResolver(Some(aState));
    116      },
    117      [aResolver](const CopyableErrorResult& aResult) {
    118        aResolver(Nothing());
    119      });
    120 
    121  return IPC_OK();
    122 }
    123 
    124 IPCResult ServiceWorkerRegistrationParent::RecvGetNotifications(
    125    const nsAString& aTag, GetNotificationsResolver&& aResolver) {
    126  if (!mProxy) {
    127    aResolver(NS_ERROR_DOM_INVALID_STATE_ERR);
    128    return IPC_OK();
    129  }
    130 
    131  mProxy->GetNotifications(aTag)->Then(
    132      GetCurrentSerialEventTarget(), __func__,
    133      [aResolver](const CopyableTArray<IPCNotification>& aNotifications) {
    134        aResolver(aNotifications);
    135      },
    136      [aResolver](nsresult) { aResolver(NS_ERROR_DOM_INVALID_STATE_ERR); });
    137 
    138  return IPC_OK();
    139 }
    140 
    141 ServiceWorkerRegistrationParent::ServiceWorkerRegistrationParent() {}
    142 
    143 ServiceWorkerRegistrationParent::~ServiceWorkerRegistrationParent() {
    144  MOZ_DIAGNOSTIC_ASSERT(!mProxy);
    145 }
    146 
    147 void ServiceWorkerRegistrationParent::Init(
    148    const IPCServiceWorkerRegistrationDescriptor& aDescriptor,
    149    const IPCClientInfo& aForClient) {
    150  MOZ_DIAGNOSTIC_ASSERT(!mProxy);
    151  mProxy = new ServiceWorkerRegistrationProxy(
    152      ServiceWorkerRegistrationDescriptor(aDescriptor), ClientInfo(aForClient));
    153  mProxy->Init(this);
    154 }
    155 
    156 void ServiceWorkerRegistrationParent::MaybeSendDelete() {
    157  if (!CanSend()) {
    158    return;
    159  }
    160  (void)Send__delete__(this);
    161 }
    162 
    163 }  // namespace mozilla::dom