gecko-dev/dom/serviceworkers/ServiceWorkerUpdaterChild.cpp
Ben Kelly a99ba38721 Bug 1469048 Disable service worker propagation when e10s pref is enabled. r=mrbkap
--HG--
extra : rebase_source : f7a11d459a7f54ecc8b71746ff2810a7bb276692
2018-07-09 16:02:41 -07:00

70 lines
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 "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