forked from mozilla/gecko-dev
-
Notifications
You must be signed in to change notification settings - Fork 1
/
ServiceWorkerRegistrationImpl.h
133 lines (93 loc) · 4.02 KB
/
ServiceWorkerRegistrationImpl.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#ifndef mozilla_dom_serviceworkerregistrationimpl_h
#define mozilla_dom_serviceworkerregistrationimpl_h
#include "mozilla/dom/WorkerPrivate.h"
#include "mozilla/Unused.h"
#include "nsCycleCollectionParticipant.h"
#include "mozilla/dom/Document.h"
#include "nsPIDOMWindow.h"
#include "ServiceWorkerManager.h"
#include "ServiceWorkerRegistration.h"
#include "ServiceWorkerRegistrationListener.h"
namespace mozilla {
namespace dom {
class Promise;
class PushManager;
class ServiceWorker;
class WeakWorkerRef;
////////////////////////////////////////////////////
// Main Thread implementation
class ServiceWorkerRegistrationMainThread final
: public ServiceWorkerRegistration::Inner,
public ServiceWorkerRegistrationListener {
public:
NS_INLINE_DECL_REFCOUNTING(ServiceWorkerRegistrationMainThread, override)
explicit ServiceWorkerRegistrationMainThread(
const ServiceWorkerRegistrationDescriptor& aDescriptor);
// ServiceWorkerRegistration::Inner
void SetServiceWorkerRegistration(ServiceWorkerRegistration* aReg) override;
void ClearServiceWorkerRegistration(ServiceWorkerRegistration* aReg) override;
void Update(const nsCString& aNewestWorkerScriptUrl,
ServiceWorkerRegistrationCallback&& aSuccessCB,
ServiceWorkerFailureCallback&& aFailureCB) override;
void Unregister(ServiceWorkerBoolCallback&& aSuccessCB,
ServiceWorkerFailureCallback&& aFailureCB) override;
// ServiceWorkerRegistrationListener
void UpdateState(
const ServiceWorkerRegistrationDescriptor& aDescriptor) override;
void FireUpdateFound() override;
void RegistrationCleared() override;
void GetScope(nsAString& aScope) const override { aScope = mScope; }
bool MatchesDescriptor(
const ServiceWorkerRegistrationDescriptor& aDescriptor) override;
private:
~ServiceWorkerRegistrationMainThread();
void StartListeningForEvents();
void StopListeningForEvents();
void RegistrationClearedInternal();
ServiceWorkerRegistration* mOuter;
ServiceWorkerRegistrationDescriptor mDescriptor;
RefPtr<ServiceWorkerRegistrationInfo> mInfo;
const nsString mScope;
bool mListeningForEvents;
};
////////////////////////////////////////////////////
// Worker Thread implementation
class WorkerListener;
class ServiceWorkerRegistrationWorkerThread final
: public ServiceWorkerRegistration::Inner {
friend class WorkerListener;
public:
NS_INLINE_DECL_REFCOUNTING(ServiceWorkerRegistrationWorkerThread, override)
explicit ServiceWorkerRegistrationWorkerThread(
const ServiceWorkerRegistrationDescriptor& aDescriptor);
void RegistrationCleared();
// ServiceWorkerRegistration::Inner
void SetServiceWorkerRegistration(ServiceWorkerRegistration* aReg) override;
void ClearServiceWorkerRegistration(ServiceWorkerRegistration* aReg) override;
void Update(const nsCString& aNewestWorkerScriptUrl,
ServiceWorkerRegistrationCallback&& aSuccessCB,
ServiceWorkerFailureCallback&& aFailureCB) override;
void Unregister(ServiceWorkerBoolCallback&& aSuccessCB,
ServiceWorkerFailureCallback&& aFailureCB) override;
private:
~ServiceWorkerRegistrationWorkerThread();
void InitListener();
void ReleaseListener();
void UpdateState(const ServiceWorkerRegistrationDescriptor& aDescriptor);
void FireUpdateFound();
// This can be called only by WorkerListener.
WorkerPrivate* GetWorkerPrivate(const MutexAutoLock& aProofOfLock);
ServiceWorkerRegistration* mOuter;
const ServiceWorkerRegistrationDescriptor mDescriptor;
const nsString mScope;
RefPtr<WorkerListener> mListener;
RefPtr<WeakWorkerRef> mWorkerRef;
};
} // namespace dom
} // namespace mozilla
#endif // mozilla_dom_serviceworkerregistrationimpl_h