|
|
|
|
| 145 |
}; |
145 |
}; |
| 146 |
|
146 |
|
| 147 |
// BackgroundSync |
147 |
// BackgroundSync |
| 148 |
|
148 |
|
| 149 |
// static |
149 |
// static |
| 150 |
already_AddRefed<BackgroundSync> |
150 |
already_AddRefed<BackgroundSync> |
| 151 |
BackgroundSync::CreateOnMainThread(nsIGlobalObject* aGlobal, |
151 |
BackgroundSync::CreateOnMainThread(nsIGlobalObject* aGlobal, |
| 152 |
nsIPrincipal* aPrincipal, |
152 |
nsIPrincipal* aPrincipal, |
|
|
153 |
const nsAString& aScope, |
| 153 |
ErrorResult& aRv) |
154 |
ErrorResult& aRv) |
| 154 |
{ |
155 |
{ |
| 155 |
MOZ_ASSERT(aGlobal); |
156 |
MOZ_ASSERT(aGlobal); |
| 156 |
MOZ_ASSERT(aPrincipal); |
157 |
MOZ_ASSERT(aPrincipal); |
|
|
158 |
MOZ_ASSERT(!aScope.IsEmpty()); |
| 157 |
MOZ_ASSERT(NS_IsMainThread()); |
159 |
MOZ_ASSERT(NS_IsMainThread()); |
| 158 |
|
160 |
|
| 159 |
PrincipalInfo principalInfo; |
161 |
PrincipalInfo principalInfo; |
| 160 |
aRv = PrincipalToPrincipalInfo(aPrincipal, &principalInfo); |
162 |
aRv = PrincipalToPrincipalInfo(aPrincipal, &principalInfo); |
| 161 |
if (NS_WARN_IF(aRv.Failed())) { |
163 |
if (NS_WARN_IF(aRv.Failed())) { |
| 162 |
return nullptr; |
164 |
return nullptr; |
| 163 |
} |
165 |
} |
| 164 |
|
166 |
|
| 165 |
RefPtr<BackgroundSync> ref = new BackgroundSync(aGlobal, principalInfo); |
167 |
RefPtr<BackgroundSync> ref = new BackgroundSync(aGlobal, principalInfo, |
|
|
168 |
aScope); |
| 166 |
|
169 |
|
| 167 |
// Register as observer for inner-window-destroyed. |
170 |
// Register as observer for inner-window-destroyed. |
| 168 |
nsCOMPtr<nsIObserverService> obs = mozilla::services::GetObserverService(); |
171 |
nsCOMPtr<nsIObserverService> obs = mozilla::services::GetObserverService(); |
| 169 |
if (obs) { |
172 |
if (obs) { |
| 170 |
aRv = obs->AddObserver(ref, "inner-window-destroyed", |
173 |
aRv = obs->AddObserver(ref, "inner-window-destroyed", |
| 171 |
false /* ownsWeak */); |
174 |
false /* ownsWeak */); |
| 172 |
if (NS_WARN_IF(aRv.Failed())) { |
175 |
if (NS_WARN_IF(aRv.Failed())) { |
| 173 |
return nullptr; |
176 |
return nullptr; |
|
Lines 189-229
BackgroundSync::CreateOnMainThread(nsIGl
|
Link Here
|
|---|
|
| 189 |
ref->mInnerID = window->WindowID(); |
192 |
ref->mInnerID = window->WindowID(); |
| 190 |
|
193 |
|
| 191 |
return ref.forget(); |
194 |
return ref.forget(); |
| 192 |
} |
195 |
} |
| 193 |
|
196 |
|
| 194 |
// static |
197 |
// static |
| 195 |
already_AddRefed<BackgroundSync> |
198 |
already_AddRefed<BackgroundSync> |
| 196 |
BackgroundSync::CreateOnWorker(nsIGlobalObject* aGlobal, |
199 |
BackgroundSync::CreateOnWorker(nsIGlobalObject* aGlobal, |
| 197 |
WorkerPrivate* aWorkerPrivate) |
200 |
WorkerPrivate* aWorkerPrivate, |
|
|
201 |
const nsAString& aScope) |
| 198 |
{ |
202 |
{ |
| 199 |
MOZ_ASSERT(aWorkerPrivate); |
203 |
MOZ_ASSERT(aWorkerPrivate); |
|
|
204 |
MOZ_ASSERT(!aScope.IsEmpty()); |
| 200 |
aWorkerPrivate->AssertIsOnWorkerThread(); |
205 |
aWorkerPrivate->AssertIsOnWorkerThread(); |
| 201 |
|
206 |
|
| 202 |
const PrincipalInfo& principalInfo = aWorkerPrivate->GetPrincipalInfo(); |
207 |
const PrincipalInfo& principalInfo = aWorkerPrivate->GetPrincipalInfo(); |
| 203 |
|
208 |
|
| 204 |
RefPtr<BackgroundSync> ref = new BackgroundSync(aGlobal, |
209 |
RefPtr<BackgroundSync> ref = new BackgroundSync(aGlobal, |
| 205 |
principalInfo); |
210 |
principalInfo, |
|
|
211 |
aScope); |
| 206 |
|
212 |
|
| 207 |
ref->mWorkerHolder = new BackgroundSyncHolder(ref); |
213 |
ref->mWorkerHolder = new BackgroundSyncHolder(ref); |
| 208 |
if (NS_WARN_IF(!ref->mWorkerHolder->HoldWorker(aWorkerPrivate, Terminating))) { |
214 |
if (NS_WARN_IF(!ref->mWorkerHolder->HoldWorker(aWorkerPrivate, Terminating))) { |
| 209 |
ref->mWorkerHolder = nullptr; |
215 |
ref->mWorkerHolder = nullptr; |
| 210 |
return nullptr; |
216 |
return nullptr; |
| 211 |
} |
217 |
} |
| 212 |
|
218 |
|
| 213 |
return ref.forget(); |
219 |
return ref.forget(); |
| 214 |
} |
220 |
} |
| 215 |
|
221 |
|
| 216 |
BackgroundSync::BackgroundSync(nsIGlobalObject* aGlobal, |
222 |
BackgroundSync::BackgroundSync(nsIGlobalObject* aGlobal, |
| 217 |
const PrincipalInfo& aPrincipalInfo) |
223 |
const PrincipalInfo& aPrincipalInfo, |
|
|
224 |
const nsAString& aScope) |
| 218 |
: mInnerID(0) |
225 |
: mInnerID(0) |
| 219 |
, mGlobal(aGlobal) |
226 |
, mGlobal(aGlobal) |
| 220 |
, mShuttingDown(false) |
227 |
, mShuttingDown(false) |
| 221 |
, mPrincipalInfo(MakeUnique<PrincipalInfo>(aPrincipalInfo)) |
228 |
, mPrincipalInfo(MakeUnique<PrincipalInfo>(aPrincipalInfo)) |
|
|
229 |
, mScope(aScope) |
| 222 |
{ |
230 |
{ |
| 223 |
#ifdef DEBUG |
231 |
#ifdef DEBUG |
| 224 |
mThread = do_GetCurrentThread(); |
232 |
mThread = do_GetCurrentThread(); |
| 225 |
#endif |
233 |
#endif |
| 226 |
|
234 |
|
| 227 |
MOZ_ASSERT(aGlobal); |
235 |
MOZ_ASSERT(aGlobal); |
| 228 |
|
236 |
|
| 229 |
// Register this component to PBackground. |
237 |
// Register this component to PBackground. |
|
Lines 413-429
BackgroundSync::ExecuteOp(const SyncOpAr
|
Link Here
|
|---|
|
| 413 |
|
421 |
|
| 414 |
// WebIDL interface methods. |
422 |
// WebIDL interface methods. |
| 415 |
|
423 |
|
| 416 |
already_AddRefed<Promise> |
424 |
already_AddRefed<Promise> |
| 417 |
BackgroundSync::Register(const nsAString& aTag, ErrorResult& aRv) |
425 |
BackgroundSync::Register(const nsAString& aTag, ErrorResult& aRv) |
| 418 |
{ |
426 |
{ |
| 419 |
MOZ_ASSERT(IsBackgroundSyncThread()); |
427 |
MOZ_ASSERT(IsBackgroundSyncThread()); |
| 420 |
|
428 |
|
| 421 |
const SyncRegisterArgs args((nsString(aTag))); |
429 |
const SyncRegisterArgs args(mScope, (nsString(aTag))); |
| 422 |
return ExecuteOp(SyncOpArgs(args), aRv); |
430 |
return ExecuteOp(SyncOpArgs(args), aRv); |
| 423 |
} |
431 |
} |
| 424 |
|
432 |
|
| 425 |
already_AddRefed<Promise> |
433 |
already_AddRefed<Promise> |
| 426 |
BackgroundSync::GetTags(ErrorResult& aRv) |
434 |
BackgroundSync::GetTags(ErrorResult& aRv) |
| 427 |
{ |
435 |
{ |
| 428 |
MOZ_ASSERT(IsBackgroundSyncThread()); |
436 |
MOZ_ASSERT(IsBackgroundSyncThread()); |
| 429 |
|
437 |
|