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