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