Backed out changeset a5beba8cc190 (bug 1534364) for assertion failures

This commit is contained in:
Andreea Pavel 2019-03-14 23:14:31 +02:00
Родитель fc71adb962
Коммит af20d1c10b
6 изменённых файлов: 63 добавлений и 46 удалений

Просмотреть файл

@ -23,5 +23,11 @@ struct IPCServiceWorkerDescriptor
ServiceWorkerState state;
};
union OptionalIPCServiceWorkerDescriptor
{
IPCServiceWorkerDescriptor;
void_t;
};
} // namespace dom
} // namespace mozilla

Просмотреть файл

@ -29,9 +29,9 @@ struct IPCServiceWorkerRegistrationDescriptor
ServiceWorkerUpdateViaCache updateViaCache;
IPCServiceWorkerDescriptor? installing;
IPCServiceWorkerDescriptor? waiting;
IPCServiceWorkerDescriptor? active;
OptionalIPCServiceWorkerDescriptor installing;
OptionalIPCServiceWorkerDescriptor waiting;
OptionalIPCServiceWorkerDescriptor active;
};
union IPCServiceWorkerRegistrationDescriptorOrCopyableErrorResult

Просмотреть файл

@ -19,12 +19,15 @@ using mozilla::ipc::PrincipalInfoToPrincipal;
Maybe<IPCServiceWorkerDescriptor>
ServiceWorkerRegistrationDescriptor::NewestInternal() const {
Maybe<IPCServiceWorkerDescriptor> result;
if (mData->installing().isSome()) {
result.emplace(mData->installing().ref());
} else if (mData->waiting().isSome()) {
result.emplace(mData->waiting().ref());
} else if (mData->active().isSome()) {
result.emplace(mData->active().ref());
if (mData->installing().type() !=
OptionalIPCServiceWorkerDescriptor::Tvoid_t) {
result.emplace(mData->installing().get_IPCServiceWorkerDescriptor());
} else if (mData->waiting().type() !=
OptionalIPCServiceWorkerDescriptor::Tvoid_t) {
result.emplace(mData->waiting().get_IPCServiceWorkerDescriptor());
} else if (mData->active().type() !=
OptionalIPCServiceWorkerDescriptor::Tvoid_t) {
result.emplace(mData->active().get_IPCServiceWorkerDescriptor());
}
return result;
}
@ -40,9 +43,9 @@ ServiceWorkerRegistrationDescriptor::ServiceWorkerRegistrationDescriptor(
mData->version() = aVersion;
mData->scope() = aScope;
mData->updateViaCache() = aUpdateViaCache;
mData->installing() = Nothing();
mData->waiting() = Nothing();
mData->active() = Nothing();
mData->installing() = void_t();
mData->waiting() = void_t();
mData->active() = void_t();
}
ServiceWorkerRegistrationDescriptor::ServiceWorkerRegistrationDescriptor(
@ -51,7 +54,7 @@ ServiceWorkerRegistrationDescriptor::ServiceWorkerRegistrationDescriptor(
ServiceWorkerUpdateViaCache aUpdateViaCache)
: mData(MakeUnique<IPCServiceWorkerRegistrationDescriptor>(
aId, aVersion, aPrincipalInfo, nsCString(aScope), aUpdateViaCache,
Nothing(), Nothing(), Nothing())) {}
void_t(), void_t(), void_t())) {}
ServiceWorkerRegistrationDescriptor::ServiceWorkerRegistrationDescriptor(
const IPCServiceWorkerRegistrationDescriptor& aDescriptor)
@ -132,8 +135,10 @@ Maybe<ServiceWorkerDescriptor>
ServiceWorkerRegistrationDescriptor::GetInstalling() const {
Maybe<ServiceWorkerDescriptor> result;
if (mData->installing().isSome()) {
result.emplace(ServiceWorkerDescriptor(mData->installing().ref()));
if (mData->installing().type() !=
OptionalIPCServiceWorkerDescriptor::Tvoid_t) {
result.emplace(ServiceWorkerDescriptor(
mData->installing().get_IPCServiceWorkerDescriptor()));
}
return result;
@ -143,8 +148,9 @@ Maybe<ServiceWorkerDescriptor> ServiceWorkerRegistrationDescriptor::GetWaiting()
const {
Maybe<ServiceWorkerDescriptor> result;
if (mData->waiting().isSome()) {
result.emplace(ServiceWorkerDescriptor(mData->waiting().ref()));
if (mData->waiting().type() != OptionalIPCServiceWorkerDescriptor::Tvoid_t) {
result.emplace(ServiceWorkerDescriptor(
mData->waiting().get_IPCServiceWorkerDescriptor()));
}
return result;
@ -154,8 +160,9 @@ Maybe<ServiceWorkerDescriptor> ServiceWorkerRegistrationDescriptor::GetActive()
const {
Maybe<ServiceWorkerDescriptor> result;
if (mData->active().isSome()) {
result.emplace(ServiceWorkerDescriptor(mData->active().ref()));
if (mData->active().type() != OptionalIPCServiceWorkerDescriptor::Tvoid_t) {
result.emplace(ServiceWorkerDescriptor(
mData->active().get_IPCServiceWorkerDescriptor()));
}
return result;
@ -184,13 +191,13 @@ bool ServiceWorkerRegistrationDescriptor::HasWorker(
namespace {
bool IsValidWorker(
const Maybe<IPCServiceWorkerDescriptor>& aWorker, const nsACString& aScope,
const OptionalIPCServiceWorkerDescriptor& aWorker, const nsACString& aScope,
const mozilla::ipc::ContentPrincipalInfo& aContentPrincipal) {
if (aWorker.isNothing()) {
if (aWorker.type() == OptionalIPCServiceWorkerDescriptor::Tvoid_t) {
return true;
}
auto& worker = aWorker.ref();
auto& worker = aWorker.get_IPCServiceWorkerDescriptor();
if (worker.scope() != aScope) {
return false;
}
@ -239,23 +246,23 @@ void ServiceWorkerRegistrationDescriptor::SetWorkers(
ServiceWorkerInfo* aActive) {
if (aInstalling) {
aInstalling->SetRegistrationVersion(Version());
mData->installing().emplace(aInstalling->Descriptor().ToIPC());
mData->installing() = aInstalling->Descriptor().ToIPC();
} else {
mData->installing() = Nothing();
mData->installing() = void_t();
}
if (aWaiting) {
aWaiting->SetRegistrationVersion(Version());
mData->waiting().emplace(aWaiting->Descriptor().ToIPC());
mData->waiting() = aWaiting->Descriptor().ToIPC();
} else {
mData->waiting() = Nothing();
mData->waiting() = void_t();
}
if (aActive) {
aActive->SetRegistrationVersion(Version());
mData->active().emplace(aActive->Descriptor().ToIPC());
mData->active() = aActive->Descriptor().ToIPC();
} else {
mData->active() = Nothing();
mData->active() = void_t();
}
MOZ_DIAGNOSTIC_ASSERT(IsValid());

Просмотреть файл

@ -19,6 +19,7 @@ class PrincipalInfo;
namespace dom {
class IPCServiceWorkerRegistrationDescriptor;
class OptionalIPCServiceWorkerDescriptor;
class ServiceWorkerInfo;
enum class ServiceWorkerUpdateViaCache : uint8_t;

Просмотреть файл

@ -494,10 +494,10 @@ nsresult LoadInfoToLoadInfoArgs(nsILoadInfo* aLoadInfo,
ipcInitialClientInfo.emplace(initialClientInfo.ref().ToIPC());
}
Maybe<IPCServiceWorkerDescriptor> ipcController;
OptionalIPCServiceWorkerDescriptor ipcController = mozilla::void_t();
const Maybe<ServiceWorkerDescriptor>& controller = aLoadInfo->GetController();
if (controller.isSome()) {
ipcController.emplace(controller.ref().ToIPC());
ipcController = controller.ref().ToIPC();
}
nsAutoString cspNonce;
@ -656,9 +656,10 @@ nsresult LoadInfoArgsToLoadInfo(
NS_ERROR_UNEXPECTED);
Maybe<ServiceWorkerDescriptor> controller;
if (loadInfoArgs.controller().isSome()) {
controller.emplace(
ServiceWorkerDescriptor(loadInfoArgs.controller().ref()));
if (loadInfoArgs.controller().type() !=
OptionalIPCServiceWorkerDescriptor::Tvoid_t) {
controller.emplace(ServiceWorkerDescriptor(
loadInfoArgs.controller().get_IPCServiceWorkerDescriptor()));
}
nsCOMPtr<nsICookieSettings> cookieSettings;
@ -708,7 +709,7 @@ void LoadInfoToParentLoadInfoForwarder(
nsILoadInfo* aLoadInfo, ParentLoadInfoForwarderArgs* aForwarderArgsOut) {
if (!aLoadInfo) {
*aForwarderArgsOut = ParentLoadInfoForwarderArgs(
false, Nothing(), nsILoadInfo::TAINTING_BASIC,
false, void_t(), nsILoadInfo::TAINTING_BASIC,
false, // serviceWorkerTaintingSynthesized
false, // documentHasUserInteracted
false, // documentHasLoaded
@ -716,10 +717,10 @@ void LoadInfoToParentLoadInfoForwarder(
return;
}
Maybe<IPCServiceWorkerDescriptor> ipcController;
OptionalIPCServiceWorkerDescriptor ipcController = void_t();
Maybe<ServiceWorkerDescriptor> controller(aLoadInfo->GetController());
if (controller.isSome()) {
ipcController.emplace(controller.ref().ToIPC());
ipcController = controller.ref().ToIPC();
}
uint32_t tainting = nsILoadInfo::TAINTING_BASIC;
@ -760,8 +761,9 @@ nsresult MergeParentLoadInfoForwarder(
aLoadInfo->ClearController();
auto& controller = aForwarderArgs.controller();
if (controller.isSome()) {
aLoadInfo->SetController(ServiceWorkerDescriptor(controller.ref()));
if (controller.type() != OptionalIPCServiceWorkerDescriptor::Tvoid_t) {
aLoadInfo->SetController(
ServiceWorkerDescriptor(controller.get_IPCServiceWorkerDescriptor()));
}
if (aForwarderArgs.serviceWorkerTaintingSynthesized()) {
@ -797,7 +799,7 @@ void LoadInfoToChildLoadInfoForwarder(
nsILoadInfo* aLoadInfo, ChildLoadInfoForwarderArgs* aForwarderArgsOut) {
if (!aLoadInfo) {
*aForwarderArgsOut =
ChildLoadInfoForwarderArgs(Nothing(), Nothing(), Nothing());
ChildLoadInfoForwarderArgs(Nothing(), Nothing(), void_t());
return;
}
@ -813,10 +815,10 @@ void LoadInfoToChildLoadInfoForwarder(
ipcInitial.emplace(initial.ref().ToIPC());
}
Maybe<IPCServiceWorkerDescriptor> ipcController;
OptionalIPCServiceWorkerDescriptor ipcController = void_t();
Maybe<ServiceWorkerDescriptor> controller(aLoadInfo->GetController());
if (controller.isSome()) {
ipcController.emplace(controller.ref().ToIPC());
ipcController = controller.ref().ToIPC();
}
*aForwarderArgsOut =
@ -868,8 +870,9 @@ nsresult MergeChildLoadInfoForwarder(
aLoadInfo->ClearController();
auto& controller = aForwarderArgs.controller();
if (controller.isSome()) {
aLoadInfo->SetController(ServiceWorkerDescriptor(controller.ref()));
if (controller.type() != OptionalIPCServiceWorkerDescriptor::Tvoid_t) {
aLoadInfo->SetController(
ServiceWorkerDescriptor(controller.get_IPCServiceWorkerDescriptor()));
}
return NS_OK;

Просмотреть файл

@ -130,7 +130,7 @@ struct LoadInfoArgs
* window/worker client. We must send this across IPC to support
* performing interception in the parent.
*/
IPCServiceWorkerDescriptor? controller;
OptionalIPCServiceWorkerDescriptor controller;
nsCString[] corsUnsafeHeaders;
bool forcePreflight;
@ -162,7 +162,7 @@ struct ParentLoadInfoForwarderArgs
// The ServiceWorker controller that may be set in the parent when
// interception occurs.
IPCServiceWorkerDescriptor? controller;
OptionalIPCServiceWorkerDescriptor controller;
// The service worker may synthesize a Response with a particular
// tainting value.
@ -200,7 +200,7 @@ struct ChildLoadInfoForwarderArgs
// The ServiceWorker controller may be cleared in the child during
// a redirect.
IPCServiceWorkerDescriptor? controller;
OptionalIPCServiceWorkerDescriptor controller;
};
//-----------------------------------------------------------------------------