gecko-dev/dom/serviceworkers/ServiceWorkerUpdaterChild.cpp

68 строки
1.8 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 "ServiceWorkerUpdaterChild.h"
#include "ServiceWorkerUtils.h"
#include "nsThreadUtils.h"
namespace mozilla {
namespace dom {
ServiceWorkerUpdaterChild::ServiceWorkerUpdaterChild(
GenericPromise* aPromise, CancelableRunnable* aSuccessRunnable,
CancelableRunnable* aFailureRunnable)
: mSuccessRunnable(aSuccessRunnable), mFailureRunnable(aFailureRunnable) {
// TODO: remove the main thread restriction after fixing bug 1364821.
MOZ_ASSERT(NS_IsMainThread());
MOZ_DIAGNOSTIC_ASSERT(!ServiceWorkerParentInterceptEnabled());
MOZ_ASSERT(aPromise);
MOZ_ASSERT(aSuccessRunnable);
MOZ_ASSERT(aFailureRunnable);
aPromise
->Then(GetMainThreadSerialEventTarget(), __func__,
[this]() {
mPromiseHolder.Complete();
Unused << Send__delete__(this);
})
.Track(mPromiseHolder);
}
mozilla::ipc::IPCResult ServiceWorkerUpdaterChild::RecvProceed(
const bool& aAllowed) {
// If we have a callback, it will resolve the promise.
if (aAllowed) {
mSuccessRunnable->Run();
mFailureRunnable->Cancel();
} else {
mFailureRunnable->Run();
mSuccessRunnable->Cancel();
}
mSuccessRunnable = nullptr;
mFailureRunnable = nullptr;
return IPC_OK();
}
void ServiceWorkerUpdaterChild::ActorDestroy(ActorDestroyReason aWhy) {
if (mSuccessRunnable) {
mSuccessRunnable->Cancel();
}
if (mFailureRunnable) {
mFailureRunnable->Cancel();
}
mPromiseHolder.DisconnectIfExists();
}
} // namespace dom
} // namespace mozilla