tor-browser

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

ServiceWorkerDescriptor.cpp (4709B)


      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 "ServiceWorkerDescriptor.h"
      8 
      9 #include "mozilla/dom/IPCServiceWorkerDescriptor.h"
     10 #include "mozilla/dom/ServiceWorkerBinding.h"
     11 #include "mozilla/dom/WorkerBinding.h"
     12 #include "mozilla/ipc/PBackgroundSharedTypes.h"
     13 
     14 namespace mozilla::dom {
     15 
     16 using mozilla::ipc::PrincipalInfo;
     17 using mozilla::ipc::PrincipalInfoToPrincipal;
     18 
     19 ServiceWorkerDescriptor::ServiceWorkerDescriptor(
     20    uint64_t aId, uint64_t aRegistrationId, uint64_t aRegistrationVersion,
     21    nsIPrincipal* aPrincipal, const nsACString& aScope, WorkerType aType,
     22    const nsACString& aScriptURL, ServiceWorkerState aState)
     23    : mData(MakeUnique<IPCServiceWorkerDescriptor>()) {
     24  MOZ_ALWAYS_SUCCEEDS(
     25      PrincipalToPrincipalInfo(aPrincipal, &mData->principalInfo()));
     26 
     27  mData->id() = aId;
     28  mData->registrationId() = aRegistrationId;
     29  mData->registrationVersion() = aRegistrationVersion;
     30  mData->scope() = aScope;
     31  mData->type() = aType;
     32  mData->scriptURL() = aScriptURL;
     33  mData->state() = aState;
     34  // Set HandlesFetch as true in default
     35  mData->handlesFetch() = true;
     36 }
     37 
     38 ServiceWorkerDescriptor::ServiceWorkerDescriptor(
     39    uint64_t aId, uint64_t aRegistrationId, uint64_t aRegistrationVersion,
     40    const mozilla::ipc::PrincipalInfo& aPrincipalInfo, const nsACString& aScope,
     41    WorkerType aType, const nsACString& aScriptURL, ServiceWorkerState aState)
     42    : mData(MakeUnique<IPCServiceWorkerDescriptor>(
     43          aId, aRegistrationId, aRegistrationVersion, aPrincipalInfo,
     44          nsCString(aScriptURL), aType, nsCString(aScope), aState, true)) {}
     45 
     46 ServiceWorkerDescriptor::ServiceWorkerDescriptor(
     47    const IPCServiceWorkerDescriptor& aDescriptor)
     48    : mData(MakeUnique<IPCServiceWorkerDescriptor>(aDescriptor)) {}
     49 
     50 ServiceWorkerDescriptor::ServiceWorkerDescriptor(
     51    const ServiceWorkerDescriptor& aRight) {
     52  operator=(aRight);
     53 }
     54 
     55 ServiceWorkerDescriptor& ServiceWorkerDescriptor::operator=(
     56    const ServiceWorkerDescriptor& aRight) {
     57  if (this == &aRight) {
     58    return *this;
     59  }
     60  mData.reset();
     61  mData = MakeUnique<IPCServiceWorkerDescriptor>(*aRight.mData);
     62  return *this;
     63 }
     64 
     65 ServiceWorkerDescriptor::ServiceWorkerDescriptor(
     66    ServiceWorkerDescriptor&& aRight)
     67    : mData(std::move(aRight.mData)) {}
     68 
     69 ServiceWorkerDescriptor& ServiceWorkerDescriptor::operator=(
     70    ServiceWorkerDescriptor&& aRight) {
     71  mData.reset();
     72  mData = std::move(aRight.mData);
     73  return *this;
     74 }
     75 
     76 ServiceWorkerDescriptor::~ServiceWorkerDescriptor() = default;
     77 
     78 bool ServiceWorkerDescriptor::operator==(
     79    const ServiceWorkerDescriptor& aRight) const {
     80  return *mData == *aRight.mData;
     81 }
     82 
     83 uint64_t ServiceWorkerDescriptor::Id() const { return mData->id(); }
     84 
     85 uint64_t ServiceWorkerDescriptor::RegistrationId() const {
     86  return mData->registrationId();
     87 }
     88 
     89 uint64_t ServiceWorkerDescriptor::RegistrationVersion() const {
     90  return mData->registrationVersion();
     91 }
     92 
     93 const mozilla::ipc::PrincipalInfo& ServiceWorkerDescriptor::PrincipalInfo()
     94    const {
     95  return mData->principalInfo();
     96 }
     97 
     98 Result<nsCOMPtr<nsIPrincipal>, nsresult> ServiceWorkerDescriptor::GetPrincipal()
     99    const {
    100  AssertIsOnMainThread();
    101  return PrincipalInfoToPrincipal(mData->principalInfo());
    102 }
    103 
    104 const nsCString& ServiceWorkerDescriptor::Scope() const {
    105  return mData->scope();
    106 }
    107 
    108 WorkerType ServiceWorkerDescriptor::Type() const { return mData->type(); }
    109 
    110 const nsCString& ServiceWorkerDescriptor::ScriptURL() const {
    111  return mData->scriptURL();
    112 }
    113 
    114 ServiceWorkerState ServiceWorkerDescriptor::State() const {
    115  return mData->state();
    116 }
    117 
    118 void ServiceWorkerDescriptor::SetState(ServiceWorkerState aState) {
    119  mData->state() = aState;
    120 }
    121 
    122 void ServiceWorkerDescriptor::SetRegistrationVersion(uint64_t aVersion) {
    123  MOZ_DIAGNOSTIC_ASSERT(aVersion > mData->registrationVersion());
    124  mData->registrationVersion() = aVersion;
    125 }
    126 
    127 bool ServiceWorkerDescriptor::HandlesFetch() const {
    128  return mData->handlesFetch();
    129 }
    130 
    131 void ServiceWorkerDescriptor::SetHandlesFetch(bool aHandlesFetch) {
    132  mData->handlesFetch() = aHandlesFetch;
    133 }
    134 
    135 bool ServiceWorkerDescriptor::Matches(
    136    const ServiceWorkerDescriptor& aDescriptor) const {
    137  return Id() == aDescriptor.Id() && Scope() == aDescriptor.Scope() &&
    138         ScriptURL() == aDescriptor.ScriptURL() &&
    139         PrincipalInfo() == aDescriptor.PrincipalInfo();
    140 }
    141 
    142 const IPCServiceWorkerDescriptor& ServiceWorkerDescriptor::ToIPC() const {
    143  return *mData;
    144 }
    145 
    146 }  // namespace mozilla::dom