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/. */
7 #include "ServiceWorkerDescriptor.h"
8 #include "mozilla/dom/IPCServiceWorkerDescriptor.h"
9 #include "mozilla/dom/ServiceWorkerBinding.h"
10 #include "mozilla/ipc/PBackgroundSharedTypes.h"
12 namespace mozilla::dom
{
14 using mozilla::ipc::PrincipalInfo
;
15 using mozilla::ipc::PrincipalInfoToPrincipal
;
17 ServiceWorkerDescriptor::ServiceWorkerDescriptor(
18 uint64_t aId
, uint64_t aRegistrationId
, uint64_t aRegistrationVersion
,
19 nsIPrincipal
* aPrincipal
, const nsACString
& aScope
,
20 const nsACString
& aScriptURL
, ServiceWorkerState aState
)
21 : mData(MakeUnique
<IPCServiceWorkerDescriptor
>()) {
23 PrincipalToPrincipalInfo(aPrincipal
, &mData
->principalInfo()));
26 mData
->registrationId() = aRegistrationId
;
27 mData
->registrationVersion() = aRegistrationVersion
;
28 mData
->scope() = aScope
;
29 mData
->scriptURL() = aScriptURL
;
30 mData
->state() = aState
;
31 // Set HandlesFetch as true in default
32 mData
->handlesFetch() = true;
35 ServiceWorkerDescriptor::ServiceWorkerDescriptor(
36 uint64_t aId
, uint64_t aRegistrationId
, uint64_t aRegistrationVersion
,
37 const mozilla::ipc::PrincipalInfo
& aPrincipalInfo
, const nsACString
& aScope
,
38 const nsACString
& aScriptURL
, ServiceWorkerState aState
)
39 : mData(MakeUnique
<IPCServiceWorkerDescriptor
>(
40 aId
, aRegistrationId
, aRegistrationVersion
, aPrincipalInfo
,
41 nsCString(aScriptURL
), nsCString(aScope
), aState
, true)) {}
43 ServiceWorkerDescriptor::ServiceWorkerDescriptor(
44 const IPCServiceWorkerDescriptor
& aDescriptor
)
45 : mData(MakeUnique
<IPCServiceWorkerDescriptor
>(aDescriptor
)) {}
47 ServiceWorkerDescriptor::ServiceWorkerDescriptor(
48 const ServiceWorkerDescriptor
& aRight
) {
52 ServiceWorkerDescriptor
& ServiceWorkerDescriptor::operator=(
53 const ServiceWorkerDescriptor
& aRight
) {
54 if (this == &aRight
) {
58 mData
= MakeUnique
<IPCServiceWorkerDescriptor
>(*aRight
.mData
);
62 ServiceWorkerDescriptor::ServiceWorkerDescriptor(
63 ServiceWorkerDescriptor
&& aRight
)
64 : mData(std::move(aRight
.mData
)) {}
66 ServiceWorkerDescriptor
& ServiceWorkerDescriptor::operator=(
67 ServiceWorkerDescriptor
&& aRight
) {
69 mData
= std::move(aRight
.mData
);
73 ServiceWorkerDescriptor::~ServiceWorkerDescriptor() = default;
75 bool ServiceWorkerDescriptor::operator==(
76 const ServiceWorkerDescriptor
& aRight
) const {
77 return *mData
== *aRight
.mData
;
80 uint64_t ServiceWorkerDescriptor::Id() const { return mData
->id(); }
82 uint64_t ServiceWorkerDescriptor::RegistrationId() const {
83 return mData
->registrationId();
86 uint64_t ServiceWorkerDescriptor::RegistrationVersion() const {
87 return mData
->registrationVersion();
90 const mozilla::ipc::PrincipalInfo
& ServiceWorkerDescriptor::PrincipalInfo()
92 return mData
->principalInfo();
95 Result
<nsCOMPtr
<nsIPrincipal
>, nsresult
> ServiceWorkerDescriptor::GetPrincipal()
97 AssertIsOnMainThread();
98 return PrincipalInfoToPrincipal(mData
->principalInfo());
101 const nsCString
& ServiceWorkerDescriptor::Scope() const {
102 return mData
->scope();
105 const nsCString
& ServiceWorkerDescriptor::ScriptURL() const {
106 return mData
->scriptURL();
109 ServiceWorkerState
ServiceWorkerDescriptor::State() const {
110 return mData
->state();
113 void ServiceWorkerDescriptor::SetState(ServiceWorkerState aState
) {
114 mData
->state() = aState
;
117 void ServiceWorkerDescriptor::SetRegistrationVersion(uint64_t aVersion
) {
118 MOZ_DIAGNOSTIC_ASSERT(aVersion
> mData
->registrationVersion());
119 mData
->registrationVersion() = aVersion
;
122 bool ServiceWorkerDescriptor::HandlesFetch() const {
123 return mData
->handlesFetch();
126 void ServiceWorkerDescriptor::SetHandlesFetch(bool aHandlesFetch
) {
127 mData
->handlesFetch() = aHandlesFetch
;
130 bool ServiceWorkerDescriptor::Matches(
131 const ServiceWorkerDescriptor
& aDescriptor
) const {
132 return Id() == aDescriptor
.Id() && Scope() == aDescriptor
.Scope() &&
133 ScriptURL() == aDescriptor
.ScriptURL() &&
134 PrincipalInfo() == aDescriptor
.PrincipalInfo();
137 const IPCServiceWorkerDescriptor
& ServiceWorkerDescriptor::ToIPC() const {
141 } // namespace mozilla::dom