Bug 1988412 - Update the RemoteWorkerData on main thread. a=RyanVM
Original Revision: https://phabricator.services.mozilla.com/D266815 Differential Revision: https://phabricator.services.mozilla.com/D270489
This commit is contained in:
committed by
rvandermeulen@mozilla.com
parent
8cc419a251
commit
6fd1decc16
@@ -6,6 +6,7 @@
|
||||
|
||||
#include "SharedWorkerService.h"
|
||||
#include "mozilla/dom/MessagePort.h"
|
||||
#include "mozilla/dom/RemoteWorkerManager.h" // RemoteWorkerManager::GetRemoteType
|
||||
#include "mozilla/dom/RemoteWorkerTypes.h"
|
||||
#include "mozilla/dom/SharedWorkerManager.h"
|
||||
#include "mozilla/ipc/BackgroundParent.h"
|
||||
@@ -171,8 +172,29 @@ void SharedWorkerService::GetOrCreateWorkerManagerOnMainThread(
|
||||
MOZ_ASSERT(aBackgroundEventTarget);
|
||||
MOZ_ASSERT(aActor);
|
||||
|
||||
RemoteWorkerData copyData = aData;
|
||||
auto principalOrErr = PrincipalInfoToPrincipal(copyData.principalInfo());
|
||||
if (NS_WARN_IF(principalOrErr.isErr())) {
|
||||
ErrorPropagationOnMainThread(aBackgroundEventTarget, aActor,
|
||||
principalOrErr.unwrapErr());
|
||||
return;
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIPrincipal> principal = principalOrErr.unwrap();
|
||||
auto remoteType = RemoteWorkerManager::GetRemoteType(
|
||||
principal, WorkerKind::WorkerKindShared);
|
||||
if (NS_WARN_IF(remoteType.isErr())) {
|
||||
ErrorPropagationOnMainThread(aBackgroundEventTarget, aActor,
|
||||
remoteType.unwrapErr());
|
||||
return;
|
||||
}
|
||||
|
||||
if (!remoteType.unwrap().Equals(copyData.remoteType())) {
|
||||
copyData.remoteType() = remoteType.unwrap();
|
||||
}
|
||||
|
||||
auto partitionedPrincipalOrErr =
|
||||
PrincipalInfoToPrincipal(aData.partitionedPrincipalInfo());
|
||||
PrincipalInfoToPrincipal(copyData.partitionedPrincipalInfo());
|
||||
if (NS_WARN_IF(partitionedPrincipalOrErr.isErr())) {
|
||||
ErrorPropagationOnMainThread(aBackgroundEventTarget, aActor,
|
||||
partitionedPrincipalOrErr.unwrapErr());
|
||||
@@ -180,7 +202,7 @@ void SharedWorkerService::GetOrCreateWorkerManagerOnMainThread(
|
||||
}
|
||||
|
||||
auto loadingPrincipalOrErr =
|
||||
PrincipalInfoToPrincipal(aData.loadingPrincipalInfo());
|
||||
PrincipalInfoToPrincipal(copyData.loadingPrincipalInfo());
|
||||
if (NS_WARN_IF(loadingPrincipalOrErr.isErr())) {
|
||||
ErrorPropagationOnMainThread(aBackgroundEventTarget, aActor,
|
||||
loadingPrincipalOrErr.unwrapErr());
|
||||
@@ -194,18 +216,18 @@ void SharedWorkerService::GetOrCreateWorkerManagerOnMainThread(
|
||||
partitionedPrincipalOrErr.unwrap();
|
||||
|
||||
nsCOMPtr<nsIPrincipal> effectiveStoragePrincipal = partitionedPrincipal;
|
||||
if (aData.useRegularPrincipal()) {
|
||||
if (copyData.useRegularPrincipal()) {
|
||||
effectiveStoragePrincipal = loadingPrincipal;
|
||||
}
|
||||
|
||||
// Let's see if there is already a SharedWorker to share.
|
||||
nsCOMPtr<nsIURI> resolvedScriptURL =
|
||||
DeserializeURI(aData.resolvedScriptURL());
|
||||
DeserializeURI(copyData.resolvedScriptURL());
|
||||
for (SharedWorkerManager* workerManager : mWorkerManagers) {
|
||||
bool matchNameButNotOptions = false;
|
||||
|
||||
managerHolder = workerManager->MatchOnMainThread(
|
||||
this, aData, resolvedScriptURL, loadingPrincipal,
|
||||
this, copyData, resolvedScriptURL, loadingPrincipal,
|
||||
BasePrincipal::Cast(effectiveStoragePrincipal)->OriginAttributesRef(),
|
||||
&matchNameButNotOptions);
|
||||
if (managerHolder) {
|
||||
@@ -222,14 +244,14 @@ void SharedWorkerService::GetOrCreateWorkerManagerOnMainThread(
|
||||
// Let's create a new one.
|
||||
if (!managerHolder) {
|
||||
managerHolder = SharedWorkerManager::Create(
|
||||
this, aBackgroundEventTarget, aData, loadingPrincipal,
|
||||
this, aBackgroundEventTarget, copyData, loadingPrincipal,
|
||||
BasePrincipal::Cast(effectiveStoragePrincipal)->OriginAttributesRef());
|
||||
|
||||
mWorkerManagers.AppendElement(managerHolder->Manager());
|
||||
} else {
|
||||
// We are attaching the actor to an existing one.
|
||||
if (managerHolder->Manager()->IsSecureContext() !=
|
||||
aData.isSecureContext()) {
|
||||
copyData.isSecureContext()) {
|
||||
ErrorPropagationOnMainThread(aBackgroundEventTarget, aActor,
|
||||
NS_ERROR_DOM_SECURITY_ERR);
|
||||
return;
|
||||
@@ -240,7 +262,7 @@ void SharedWorkerService::GetOrCreateWorkerManagerOnMainThread(
|
||||
new SharedWorkerManagerWrapper(managerHolder.forget());
|
||||
|
||||
RefPtr<WorkerManagerCreatedRunnable> r = new WorkerManagerCreatedRunnable(
|
||||
wrapper.forget(), aActor, aData, aWindowID, aPortIdentifier);
|
||||
wrapper.forget(), aActor, copyData, aWindowID, aPortIdentifier);
|
||||
aBackgroundEventTarget->Dispatch(r.forget(), NS_DISPATCH_NORMAL);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user