Files
palemoon27/dom/cache/CacheStorageParent.cpp
T
roytam1 cdb21a311f import changes from `dev' branch of rmottola/Arctic-Fox:
- Bug 1178508 ServiceWorker scripts should never be intercepted. r=baku (1dc29c560)
- Bug 1169044 - Patch 4 - Set referrer on intercepted request. r=jdm (e400d51bb)
- Bug 1169044 - Patch 5 - build fixes. a=bustage (ff54ccc97)
- Bug 1158319 Cache should throw SecurityError if the principal is incorrect. r=ehsan (28713b9cf)
- Bug 1160147 Improve Cache API WorkerFeature shutdown handling. r=baku (79ab46685)
- Bug 1160227 Improve Cache API warnings. r=ehsan (0adda61ee)
- Bug 1160138 P1 Update CacheStorage and Cache webidl to latest spec. r=ehsan (68025abcf)
- Bug 1160138 P2 Add a [ChromeConstructor] to CacheStorage to support devtools. r=ehsan (8d3ea55b8)
- Bug 1160138 P3 Test Cache chrome-only Constructor. r=ehsan (46d89d039)
- Bug 1173467 P1 Modify CacheStorage to reject with SecurityErr instead of throwing on creation. r=ehsan (db32dffbf)
- Bug 1140145 - Update web-platform-tests expected data to revision 9a2c04e06cb4e63b13b803722d345d085bf0debf, a=testonly (eb5c31e15)
- Bug 1142501 - Disable webvtt/rendering/cues-with-video/processing-model/basic.html on Linux due to extremely frequent timeouts. No review. (8c197e60a)
- Bug 1135107 - Enable pointer events for pointer events tests, a=testonly (03d19a853)
- partial bug 1135107 - Update web-platform-tests expected data, rs=Ms2ger (794895f17)
- Bug 1153521 - Update web-platform-tests expected data to revision 7311aa630534282885b9add15b1c30b2b59316dd, a=testonly (44a86bbb9)
- Bug 1162594 - create build_resources.json even if psutil fails; r=ahal (44a1d1780)
2021-05-01 11:37:45 +08:00

143 lines
3.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 "mozilla/dom/cache/CacheStorageParent.h"
#include "mozilla/unused.h"
#include "mozilla/dom/ContentParent.h"
#include "mozilla/dom/cache/ActorUtils.h"
#include "mozilla/dom/cache/CacheOpParent.h"
#include "mozilla/dom/cache/ManagerId.h"
#include "mozilla/ipc/PBackgroundParent.h"
namespace mozilla {
namespace dom {
namespace cache {
using mozilla::ipc::PBackgroundParent;
using mozilla::ipc::PrincipalInfo;
// declared in ActorUtils.h
PCacheStorageParent*
AllocPCacheStorageParent(PBackgroundParent* aManagingActor,
Namespace aNamespace,
const mozilla::ipc::PrincipalInfo& aPrincipalInfo)
{
return new CacheStorageParent(aManagingActor, aNamespace, aPrincipalInfo);
}
// declared in ActorUtils.h
void
DeallocPCacheStorageParent(PCacheStorageParent* aActor)
{
delete aActor;
}
CacheStorageParent::CacheStorageParent(PBackgroundParent* aManagingActor,
Namespace aNamespace,
const PrincipalInfo& aPrincipalInfo)
: mNamespace(aNamespace)
, mVerifiedStatus(NS_OK)
{
MOZ_COUNT_CTOR(cache::CacheStorageParent);
MOZ_ASSERT(aManagingActor);
// Start the async principal verification process immediately.
mVerifier = PrincipalVerifier::CreateAndDispatch(this, aManagingActor,
aPrincipalInfo);
MOZ_ASSERT(mVerifier);
}
CacheStorageParent::~CacheStorageParent()
{
MOZ_COUNT_DTOR(cache::CacheStorageParent);
MOZ_ASSERT(!mVerifier);
}
void
CacheStorageParent::ActorDestroy(ActorDestroyReason aReason)
{
if (mVerifier) {
mVerifier->RemoveListener(this);
mVerifier = nullptr;
}
}
PCacheOpParent*
CacheStorageParent::AllocPCacheOpParent(const CacheOpArgs& aOpArgs)
{
if (aOpArgs.type() != CacheOpArgs::TStorageMatchArgs &&
aOpArgs.type() != CacheOpArgs::TStorageHasArgs &&
aOpArgs.type() != CacheOpArgs::TStorageOpenArgs &&
aOpArgs.type() != CacheOpArgs::TStorageDeleteArgs &&
aOpArgs.type() != CacheOpArgs::TStorageKeysArgs)
{
MOZ_CRASH("Invalid operation sent to CacheStorage actor!");
}
return new CacheOpParent(Manager(), mNamespace, aOpArgs);
}
bool
CacheStorageParent::DeallocPCacheOpParent(PCacheOpParent* aActor)
{
delete aActor;
return true;
}
bool
CacheStorageParent::RecvPCacheOpConstructor(PCacheOpParent* aActor,
const CacheOpArgs& aOpArgs)
{
auto actor = static_cast<CacheOpParent*>(aActor);
if (mVerifier) {
MOZ_ASSERT(!mManagerId);
actor->WaitForVerification(mVerifier);
return true;
}
if (NS_WARN_IF(NS_FAILED(mVerifiedStatus))) {
unused << CacheOpParent::Send__delete__(actor, ErrorResult(mVerifiedStatus),
void_t());
return true;
}
MOZ_ASSERT(mManagerId);
actor->Execute(mManagerId);
return true;
}
bool
CacheStorageParent::RecvTeardown()
{
if (!Send__delete__(this)) {
// child process is gone, warn and allow actor to clean up normally
NS_WARNING("CacheStorage failed to delete actor.");
}
return true;
}
void
CacheStorageParent::OnPrincipalVerified(nsresult aRv, ManagerId* aManagerId)
{
MOZ_ASSERT(mVerifier);
MOZ_ASSERT(!mManagerId);
MOZ_ASSERT(NS_SUCCEEDED(mVerifiedStatus));
if (NS_WARN_IF(NS_FAILED(aRv))) {
mVerifiedStatus = aRv;
}
mManagerId = aManagerId;
mVerifier->RemoveListener(this);
mVerifier = nullptr;
}
} // namespace cache
} // namespace dom
} // namespace mozilla