зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1784476 - Move ClientInfo to WorkerLoadContext; r=asuth
Previously, we had the client info for main scripts on the ScriptLoadInfo, and in the ScriptLoader for non-main scripts (ImportScripts case). This was a bit confusing, so I moved it all to the ScriptLoader as in the importScripts case, it is always recreated with each new load. However, for modules this is not true. In order to make it persistant for main scripts and modules, as well as ensure that it has the correct data, it should always live on the WorkerLoadContext. Differential Revision: https://phabricator.services.mozilla.com/D147317
This commit is contained in:
Родитель
24c8e12590
Коммит
e48cee9f1d
|
@ -452,13 +452,15 @@ WorkerScriptLoader::WorkerScriptLoader(
|
||||||
|
|
||||||
nsIGlobalObject* global = GetGlobal();
|
nsIGlobalObject* global = GetGlobal();
|
||||||
|
|
||||||
mClientInfo = global->GetClientInfo();
|
Maybe<ClientInfo> clientInfo = global->GetClientInfo();
|
||||||
mController = global->GetController();
|
mController = global->GetController();
|
||||||
|
|
||||||
for (const nsString& aScriptURL : aScriptURLs) {
|
for (const nsString& aScriptURL : aScriptURLs) {
|
||||||
WorkerLoadContext::Kind kind =
|
WorkerLoadContext::Kind kind =
|
||||||
WorkerLoadContext::GetKind(aIsMainScript, IsDebuggerScript());
|
WorkerLoadContext::GetKind(aIsMainScript, IsDebuggerScript());
|
||||||
RefPtr<WorkerLoadContext> loadContext = new WorkerLoadContext(kind);
|
|
||||||
|
RefPtr<WorkerLoadContext> loadContext =
|
||||||
|
new WorkerLoadContext(kind, clientInfo);
|
||||||
|
|
||||||
// Create ScriptLoadRequests for this WorkerScriptLoader
|
// Create ScriptLoadRequests for this WorkerScriptLoader
|
||||||
ReferrerPolicy aReferrerPolicy = mWorkerRef->Private()->GetReferrerPolicy();
|
ReferrerPolicy aReferrerPolicy = mWorkerRef->Private()->GetReferrerPolicy();
|
||||||
|
@ -782,9 +784,10 @@ nsresult WorkerScriptLoader::LoadScript(ScriptLoadRequest* aRequest) {
|
||||||
|
|
||||||
rv = ChannelFromScriptURL(
|
rv = ChannelFromScriptURL(
|
||||||
principal, parentDoc, mWorkerRef->Private(), loadGroup, ios, secMan,
|
principal, parentDoc, mWorkerRef->Private(), loadGroup, ios, secMan,
|
||||||
aRequest->mURI, mClientInfo, mController, loadContext->IsTopLevel(),
|
aRequest->mURI, loadContext->mClientInfo, mController,
|
||||||
mWorkerScriptType, mWorkerRef->Private()->ContentPolicyType(),
|
loadContext->IsTopLevel(), mWorkerScriptType,
|
||||||
loadFlags, mWorkerRef->Private()->CookieJarSettings(), referrerInfo,
|
mWorkerRef->Private()->ContentPolicyType(), loadFlags,
|
||||||
|
mWorkerRef->Private()->CookieJarSettings(), referrerInfo,
|
||||||
getter_AddRefs(channel));
|
getter_AddRefs(channel));
|
||||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||||
return rv;
|
return rv;
|
||||||
|
@ -816,7 +819,7 @@ nsresult WorkerScriptLoader::LoadScript(ScriptLoadRequest* aRequest) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (loadContext->IsTopLevel()) {
|
if (loadContext->IsTopLevel()) {
|
||||||
MOZ_DIAGNOSTIC_ASSERT(mClientInfo.isSome());
|
MOZ_DIAGNOSTIC_ASSERT(loadContext->mClientInfo.isSome());
|
||||||
|
|
||||||
// In order to get the correct foreign partitioned prinicpal, we need to
|
// In order to get the correct foreign partitioned prinicpal, we need to
|
||||||
// set the `IsThirdPartyContextToTopWindow` to the channel's loadInfo.
|
// set the `IsThirdPartyContextToTopWindow` to the channel's loadInfo.
|
||||||
|
@ -826,7 +829,9 @@ nsresult WorkerScriptLoader::LoadScript(ScriptLoadRequest* aRequest) {
|
||||||
loadInfo->SetIsThirdPartyContextToTopWindow(
|
loadInfo->SetIsThirdPartyContextToTopWindow(
|
||||||
mWorkerRef->Private()->IsThirdPartyContextToTopWindow());
|
mWorkerRef->Private()->IsThirdPartyContextToTopWindow());
|
||||||
|
|
||||||
rv = AddClientChannelHelper(channel, std::move(mClientInfo),
|
Maybe<ClientInfo> clientInfo;
|
||||||
|
clientInfo.emplace(loadContext->mClientInfo.ref());
|
||||||
|
rv = AddClientChannelHelper(channel, std::move(clientInfo),
|
||||||
Maybe<ClientInfo>(),
|
Maybe<ClientInfo>(),
|
||||||
mWorkerRef->Private()->HybridEventTarget());
|
mWorkerRef->Private()->HybridEventTarget());
|
||||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||||
|
|
|
@ -134,7 +134,6 @@ class WorkerScriptLoader final : public nsINamed {
|
||||||
nsCOMPtr<nsIEventTarget> mSyncLoopTarget;
|
nsCOMPtr<nsIEventTarget> mSyncLoopTarget;
|
||||||
JS::loader::ScriptLoadRequestList mLoadingRequests;
|
JS::loader::ScriptLoadRequestList mLoadingRequests;
|
||||||
JS::loader::ScriptLoadRequestList mLoadedRequests;
|
JS::loader::ScriptLoadRequestList mLoadedRequests;
|
||||||
Maybe<ClientInfo> mClientInfo;
|
|
||||||
Maybe<ServiceWorkerDescriptor> mController;
|
Maybe<ServiceWorkerDescriptor> mController;
|
||||||
WorkerScriptType mWorkerScriptType;
|
WorkerScriptType mWorkerScriptType;
|
||||||
Maybe<nsresult> mCancelMainThread;
|
Maybe<nsresult> mCancelMainThread;
|
||||||
|
|
|
@ -10,9 +10,11 @@
|
||||||
namespace mozilla {
|
namespace mozilla {
|
||||||
namespace dom {
|
namespace dom {
|
||||||
|
|
||||||
WorkerLoadContext::WorkerLoadContext(WorkerLoadContext::Kind aKind)
|
WorkerLoadContext::WorkerLoadContext(Kind aKind,
|
||||||
|
const Maybe<ClientInfo>& aClientInfo)
|
||||||
: JS::loader::LoadContextBase(JS::loader::ContextKind::Worker),
|
: JS::loader::LoadContextBase(JS::loader::ContextKind::Worker),
|
||||||
mKind(aKind){};
|
mKind(aKind),
|
||||||
|
mClientInfo(aClientInfo){};
|
||||||
|
|
||||||
void WorkerLoadContext::SetCacheCreator(
|
void WorkerLoadContext::SetCacheCreator(
|
||||||
RefPtr<workerinternals::loader::CacheCreator> aCacheCreator) {
|
RefPtr<workerinternals::loader::CacheCreator> aCacheCreator) {
|
||||||
|
|
|
@ -78,7 +78,7 @@ class WorkerLoadContext : public JS::loader::LoadContextBase {
|
||||||
DebuggerScript
|
DebuggerScript
|
||||||
};
|
};
|
||||||
|
|
||||||
explicit WorkerLoadContext(WorkerLoadContext::Kind aKind);
|
explicit WorkerLoadContext(Kind aKind, const Maybe<ClientInfo>& aClientInfo);
|
||||||
|
|
||||||
~WorkerLoadContext() = default;
|
~WorkerLoadContext() = default;
|
||||||
|
|
||||||
|
@ -102,6 +102,7 @@ class WorkerLoadContext : public JS::loader::LoadContextBase {
|
||||||
nsresult mLoadResult = NS_ERROR_NOT_INITIALIZED;
|
nsresult mLoadResult = NS_ERROR_NOT_INITIALIZED;
|
||||||
bool mLoadingFinished = false;
|
bool mLoadingFinished = false;
|
||||||
Kind mKind;
|
Kind mKind;
|
||||||
|
Maybe<ClientInfo> mClientInfo;
|
||||||
|
|
||||||
/* These fields are only used by service workers */
|
/* These fields are only used by service workers */
|
||||||
/* TODO: Split out a ServiceWorkerLoadContext */
|
/* TODO: Split out a ServiceWorkerLoadContext */
|
||||||
|
|
Загрузка…
Ссылка в новой задаче