gecko-dev/dom/serviceworkers/ServiceWorkerRegistrationChild.cpp
Butkovits Atila 3f4c8378ae Backed out 4 changesets (bug 1715547) for frequent autoland crashes. CLOSED TREE
Backed out changeset 64e584ac229b (bug 1715547)
Backed out changeset b02cb05ea06c (bug 1715547)
Backed out changeset 6d0a9db1638c (bug 1715547)
Backed out changeset 93250012e5ac (bug 1715547)
2022-09-14 22:53:43 +03:00

91 lines
2.5 KiB
C++

/* -*- 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/. */
#include "ServiceWorkerRegistrationChild.h"
#include "RemoteServiceWorkerRegistrationImpl.h"
#include "mozilla/dom/WorkerCommon.h"
#include "mozilla/dom/WorkerRef.h"
namespace mozilla::dom {
using mozilla::ipc::IPCResult;
void ServiceWorkerRegistrationChild::ActorDestroy(ActorDestroyReason aReason) {
mIPCWorkerRef = nullptr;
if (mOwner) {
mOwner->RevokeActor(this);
MOZ_DIAGNOSTIC_ASSERT(!mOwner);
}
}
IPCResult ServiceWorkerRegistrationChild::RecvUpdateState(
const IPCServiceWorkerRegistrationDescriptor& aDescriptor) {
if (mOwner) {
mOwner->UpdateState(ServiceWorkerRegistrationDescriptor(aDescriptor));
}
return IPC_OK();
}
IPCResult ServiceWorkerRegistrationChild::RecvFireUpdateFound() {
if (mOwner) {
mOwner->FireUpdateFound();
}
return IPC_OK();
}
// static
RefPtr<ServiceWorkerRegistrationChild>
ServiceWorkerRegistrationChild::Create() {
RefPtr actor = new ServiceWorkerRegistrationChild;
if (!NS_IsMainThread()) {
WorkerPrivate* workerPrivate = GetCurrentThreadWorkerPrivate();
MOZ_DIAGNOSTIC_ASSERT(workerPrivate);
RefPtr<IPCWorkerRefHelper<ServiceWorkerRegistrationChild>> helper =
new IPCWorkerRefHelper<ServiceWorkerRegistrationChild>(actor);
actor->mIPCWorkerRef = IPCWorkerRef::Create(
workerPrivate, "ServiceWorkerRegistrationChild",
[helper] { helper->Actor()->MaybeStartTeardown(); });
if (NS_WARN_IF(!actor->mIPCWorkerRef)) {
return nullptr;
}
}
return actor;
}
ServiceWorkerRegistrationChild::ServiceWorkerRegistrationChild()
: mOwner(nullptr), mTeardownStarted(false) {}
void ServiceWorkerRegistrationChild::SetOwner(
RemoteServiceWorkerRegistrationImpl* aOwner) {
MOZ_DIAGNOSTIC_ASSERT(!mOwner);
MOZ_DIAGNOSTIC_ASSERT(aOwner);
mOwner = aOwner;
}
void ServiceWorkerRegistrationChild::RevokeOwner(
RemoteServiceWorkerRegistrationImpl* aOwner) {
MOZ_DIAGNOSTIC_ASSERT(mOwner);
MOZ_DIAGNOSTIC_ASSERT(aOwner == mOwner);
mOwner = nullptr;
}
void ServiceWorkerRegistrationChild::MaybeStartTeardown() {
if (mTeardownStarted) {
return;
}
mTeardownStarted = true;
Unused << SendTeardown();
}
} // namespace mozilla::dom