зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1804093 - Part 5: Eliminate WorkerPrincipal and WorkletPrincipals, r=asuth
Differential Revision: https://phabricator.services.mozilla.com/D163856
This commit is contained in:
Родитель
6bde10f55f
Коммит
8351f7cc2d
|
@ -13,10 +13,6 @@
|
||||||
#include "mozilla/BasePrincipal.h"
|
#include "mozilla/BasePrincipal.h"
|
||||||
#include "mozilla/StaticPtr.h"
|
#include "mozilla/StaticPtr.h"
|
||||||
#include "mozilla/dom/StructuredCloneTags.h"
|
#include "mozilla/dom/StructuredCloneTags.h"
|
||||||
// for mozilla::dom::workerinternals::kJSPrincipalsDebugToken
|
|
||||||
#include "mozilla/dom/workerinternals/JSSettings.h"
|
|
||||||
// for mozilla::dom::worklet::kJSPrincipalsDebugToken
|
|
||||||
#include "mozilla/dom/WorkletPrincipals.h"
|
|
||||||
#include "mozilla/ipc/BackgroundUtils.h"
|
#include "mozilla/ipc/BackgroundUtils.h"
|
||||||
#include "mozilla/ipc/PBackgroundSharedTypes.h"
|
#include "mozilla/ipc/PBackgroundSharedTypes.h"
|
||||||
|
|
||||||
|
@ -85,10 +81,6 @@ JS_PUBLIC_API void JSPrincipals::dump() {
|
||||||
nsresult rv = static_cast<nsJSPrincipals*>(this)->GetScriptLocation(str);
|
nsresult rv = static_cast<nsJSPrincipals*>(this)->GetScriptLocation(str);
|
||||||
fprintf(stderr, "nsIPrincipal (%p) = %s\n", static_cast<void*>(this),
|
fprintf(stderr, "nsIPrincipal (%p) = %s\n", static_cast<void*>(this),
|
||||||
NS_SUCCEEDED(rv) ? str.get() : "(unknown)");
|
NS_SUCCEEDED(rv) ? str.get() : "(unknown)");
|
||||||
} else if (debugToken == dom::workerinternals::kJSPrincipalsDebugToken) {
|
|
||||||
fprintf(stderr, "Web Worker principal singleton (%p)\n", this);
|
|
||||||
} else if (debugToken == dom::WorkletPrincipals::kJSPrincipalsDebugToken) {
|
|
||||||
fprintf(stderr, "Web Worklet principal (%p)\n", this);
|
|
||||||
} else {
|
} else {
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"!!! JSPrincipals (%p) is not nsJSPrincipals instance - bad token: "
|
"!!! JSPrincipals (%p) is not nsJSPrincipals instance - bad token: "
|
||||||
|
@ -109,10 +101,9 @@ bool nsJSPrincipals::ReadPrincipals(JSContext* aCx,
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(tag == SCTAG_DOM_NULL_PRINCIPAL || tag == SCTAG_DOM_SYSTEM_PRINCIPAL ||
|
if (tag != SCTAG_DOM_NULL_PRINCIPAL && tag != SCTAG_DOM_SYSTEM_PRINCIPAL &&
|
||||||
tag == SCTAG_DOM_CONTENT_PRINCIPAL ||
|
tag != SCTAG_DOM_CONTENT_PRINCIPAL &&
|
||||||
tag == SCTAG_DOM_EXPANDED_PRINCIPAL ||
|
tag != SCTAG_DOM_EXPANDED_PRINCIPAL) {
|
||||||
tag == SCTAG_DOM_WORKER_PRINCIPAL)) {
|
|
||||||
xpc::Throw(aCx, NS_ERROR_DOM_DATA_CLONE_ERR);
|
xpc::Throw(aCx, NS_ERROR_DOM_DATA_CLONE_ERR);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -276,19 +267,6 @@ bool nsJSPrincipals::ReadPrincipalInfo(JSStructuredCloneReader* aReader,
|
||||||
return ::ReadPrincipalInfo(aReader, tag, aInfo);
|
return ::ReadPrincipalInfo(aReader, tag, aInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
static StaticRefPtr<nsIPrincipal> sActiveWorkerPrincipal;
|
|
||||||
|
|
||||||
nsJSPrincipals::AutoSetActiveWorkerPrincipal::AutoSetActiveWorkerPrincipal(
|
|
||||||
nsIPrincipal* aPrincipal) {
|
|
||||||
MOZ_ASSERT(NS_IsMainThread());
|
|
||||||
MOZ_RELEASE_ASSERT(!sActiveWorkerPrincipal);
|
|
||||||
sActiveWorkerPrincipal = aPrincipal;
|
|
||||||
}
|
|
||||||
|
|
||||||
nsJSPrincipals::AutoSetActiveWorkerPrincipal::~AutoSetActiveWorkerPrincipal() {
|
|
||||||
sActiveWorkerPrincipal = nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* static */
|
/* static */
|
||||||
bool nsJSPrincipals::ReadKnownPrincipalType(JSContext* aCx,
|
bool nsJSPrincipals::ReadKnownPrincipalType(JSContext* aCx,
|
||||||
JSStructuredCloneReader* aReader,
|
JSStructuredCloneReader* aReader,
|
||||||
|
@ -297,20 +275,7 @@ bool nsJSPrincipals::ReadKnownPrincipalType(JSContext* aCx,
|
||||||
MOZ_ASSERT(aTag == SCTAG_DOM_NULL_PRINCIPAL ||
|
MOZ_ASSERT(aTag == SCTAG_DOM_NULL_PRINCIPAL ||
|
||||||
aTag == SCTAG_DOM_SYSTEM_PRINCIPAL ||
|
aTag == SCTAG_DOM_SYSTEM_PRINCIPAL ||
|
||||||
aTag == SCTAG_DOM_CONTENT_PRINCIPAL ||
|
aTag == SCTAG_DOM_CONTENT_PRINCIPAL ||
|
||||||
aTag == SCTAG_DOM_EXPANDED_PRINCIPAL ||
|
aTag == SCTAG_DOM_EXPANDED_PRINCIPAL);
|
||||||
aTag == SCTAG_DOM_WORKER_PRINCIPAL);
|
|
||||||
|
|
||||||
if (aTag == SCTAG_DOM_WORKER_PRINCIPAL) {
|
|
||||||
// When reading principals which were written on a worker thread, we need to
|
|
||||||
// know the principal of the worker which did the write.
|
|
||||||
if (!sActiveWorkerPrincipal) {
|
|
||||||
xpc::Throw(aCx, NS_ERROR_DOM_DATA_CLONE_ERR);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
RefPtr<nsJSPrincipals> retval = get(sActiveWorkerPrincipal);
|
|
||||||
retval.forget(aOutPrincipals);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
PrincipalInfo info;
|
PrincipalInfo info;
|
||||||
if (!::ReadPrincipalInfo(aReader, aTag, info)) {
|
if (!::ReadPrincipalInfo(aReader, aTag, info)) {
|
||||||
|
|
|
@ -42,17 +42,6 @@ class nsJSPrincipals : public nsIPrincipal, public JSPrincipals {
|
||||||
static bool WritePrincipalInfo(JSStructuredCloneWriter* aWriter,
|
static bool WritePrincipalInfo(JSStructuredCloneWriter* aWriter,
|
||||||
const mozilla::ipc::PrincipalInfo& aInfo);
|
const mozilla::ipc::PrincipalInfo& aInfo);
|
||||||
|
|
||||||
// This class is used on the main thread to specify which principal to use
|
|
||||||
// when reading principals data that was set on a DOM worker thread.
|
|
||||||
// DOM workers do not use principals from Gecko's point of view, and any
|
|
||||||
// JSPrincipals used internally will be a shared singleton object. When that
|
|
||||||
// singleton is written out and later read on the main thread, we substitute
|
|
||||||
// the principal specified with this class.
|
|
||||||
struct MOZ_RAII AutoSetActiveWorkerPrincipal {
|
|
||||||
explicit AutoSetActiveWorkerPrincipal(nsIPrincipal* aPrincipal);
|
|
||||||
~AutoSetActiveWorkerPrincipal();
|
|
||||||
};
|
|
||||||
|
|
||||||
bool write(JSContext* aCx, JSStructuredCloneWriter* aWriter) final;
|
bool write(JSContext* aCx, JSStructuredCloneWriter* aWriter) final;
|
||||||
|
|
||||||
bool isSystemOrAddonPrincipal() final;
|
bool isSystemOrAddonPrincipal() final;
|
||||||
|
|
|
@ -78,15 +78,7 @@ JSObject* SerializedStackHolder::ReadStack(JSContext* aCx) {
|
||||||
|
|
||||||
JS::Rooted<JS::Value> stackValue(aCx);
|
JS::Rooted<JS::Value> stackValue(aCx);
|
||||||
|
|
||||||
{
|
mHolder.Read(xpc::CurrentNativeGlobal(aCx), aCx, &stackValue, IgnoreErrors());
|
||||||
Maybe<nsJSPrincipals::AutoSetActiveWorkerPrincipal> set;
|
|
||||||
if (mWorkerRef) {
|
|
||||||
set.emplace(mWorkerRef->Private()->GetPrincipal());
|
|
||||||
}
|
|
||||||
|
|
||||||
mHolder.Read(xpc::CurrentNativeGlobal(aCx), aCx, &stackValue,
|
|
||||||
IgnoreErrors());
|
|
||||||
}
|
|
||||||
|
|
||||||
return stackValue.isObject() ? &stackValue.toObject() : nullptr;
|
return stackValue.isObject() ? &stackValue.toObject() : nullptr;
|
||||||
}
|
}
|
||||||
|
|
|
@ -130,11 +130,6 @@ enum StructuredCloneTags : uint32_t {
|
||||||
// StructuredCloneHolder::{Read,Write}FullySerializableObjects. In theory they
|
// StructuredCloneHolder::{Read,Write}FullySerializableObjects. In theory they
|
||||||
// can be 'less' stable.
|
// can be 'less' stable.
|
||||||
|
|
||||||
// Principal written out by worker threads when serializing objects. When
|
|
||||||
// reading on the main thread this principal will be converted to a normal
|
|
||||||
// principal object using nsJSPrincipals::AutoSetActiveWorkerPrincipal.
|
|
||||||
SCTAG_DOM_WORKER_PRINCIPAL,
|
|
||||||
|
|
||||||
SCTAG_DOM_IMAGEBITMAP,
|
SCTAG_DOM_IMAGEBITMAP,
|
||||||
SCTAG_DOM_MAP_MESSAGEPORT,
|
SCTAG_DOM_MAP_MESSAGEPORT,
|
||||||
SCTAG_DOM_FORMDATA,
|
SCTAG_DOM_FORMDATA,
|
||||||
|
|
|
@ -12,12 +12,12 @@
|
||||||
#include "jsapi.h"
|
#include "jsapi.h"
|
||||||
#include "js/ForOfIterator.h"
|
#include "js/ForOfIterator.h"
|
||||||
#include "js/PropertyAndElement.h" // JS_GetProperty
|
#include "js/PropertyAndElement.h" // JS_GetProperty
|
||||||
|
#include "mozilla/BasePrincipal.h"
|
||||||
#include "mozilla/dom/AudioWorkletGlobalScopeBinding.h"
|
#include "mozilla/dom/AudioWorkletGlobalScopeBinding.h"
|
||||||
#include "mozilla/dom/AudioWorkletProcessor.h"
|
#include "mozilla/dom/AudioWorkletProcessor.h"
|
||||||
#include "mozilla/dom/BindingCallContext.h"
|
#include "mozilla/dom/BindingCallContext.h"
|
||||||
#include "mozilla/dom/MessagePort.h"
|
#include "mozilla/dom/MessagePort.h"
|
||||||
#include "mozilla/dom/StructuredCloneHolder.h"
|
#include "mozilla/dom/StructuredCloneHolder.h"
|
||||||
#include "mozilla/dom/WorkletPrincipals.h"
|
|
||||||
#include "mozilla/dom/AudioParamDescriptorBinding.h"
|
#include "mozilla/dom/AudioParamDescriptorBinding.h"
|
||||||
#include "nsPrintfCString.h"
|
#include "nsPrintfCString.h"
|
||||||
#include "nsTHashSet.h"
|
#include "nsTHashSet.h"
|
||||||
|
@ -59,9 +59,9 @@ bool AudioWorkletGlobalScope::WrapGlobalObject(
|
||||||
options.creationOptions().setDefineSharedArrayBufferConstructor(
|
options.creationOptions().setDefineSharedArrayBufferConstructor(
|
||||||
IsSharedMemoryAllowed());
|
IsSharedMemoryAllowed());
|
||||||
|
|
||||||
JS::AutoHoldPrincipals principals(aCx, new WorkletPrincipals(mImpl));
|
|
||||||
return AudioWorkletGlobalScope_Binding::Wrap(
|
return AudioWorkletGlobalScope_Binding::Wrap(
|
||||||
aCx, this, this, options, principals.get(), true, aReflector);
|
aCx, this, this, options, BasePrincipal::Cast(mImpl->Principal()), true,
|
||||||
|
aReflector);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AudioWorkletGlobalScope::RegisterProcessor(
|
void AudioWorkletGlobalScope::RegisterProcessor(
|
||||||
|
|
|
@ -1,36 +0,0 @@
|
||||||
/* -*- 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 "Principal.h"
|
|
||||||
|
|
||||||
#include "JSSettings.h"
|
|
||||||
#include "jsapi.h"
|
|
||||||
#include "mozilla/Assertions.h"
|
|
||||||
#include "mozilla/dom/StructuredCloneTags.h"
|
|
||||||
#include "mozilla/dom/workerinternals/JSSettings.h"
|
|
||||||
|
|
||||||
namespace mozilla::dom {
|
|
||||||
|
|
||||||
WorkerPrincipal::WorkerPrincipal(bool aIsSystemOrAddonPrincipal)
|
|
||||||
: JSPrincipals(), mIsSystemOrAddonPrincipal(aIsSystemOrAddonPrincipal) {
|
|
||||||
setDebugToken(workerinternals::kJSPrincipalsDebugToken);
|
|
||||||
}
|
|
||||||
|
|
||||||
WorkerPrincipal::~WorkerPrincipal() = default;
|
|
||||||
|
|
||||||
bool WorkerPrincipal::write(JSContext* aCx, JSStructuredCloneWriter* aWriter) {
|
|
||||||
return JS_WriteUint32Pair(aWriter, SCTAG_DOM_WORKER_PRINCIPAL, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool WorkerPrincipal::isSystemOrAddonPrincipal() {
|
|
||||||
return mIsSystemOrAddonPrincipal;
|
|
||||||
}
|
|
||||||
|
|
||||||
void WorkerPrincipal::Destroy(JSPrincipals* aPrincipals) {
|
|
||||||
delete static_cast<WorkerPrincipal*>(aPrincipals);
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace mozilla::dom
|
|
|
@ -1,34 +0,0 @@
|
||||||
/* -*- 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/. */
|
|
||||||
|
|
||||||
#ifndef mozilla_dom_workers_principal_h__
|
|
||||||
#define mozilla_dom_workers_principal_h__
|
|
||||||
|
|
||||||
#include "js/Principals.h"
|
|
||||||
|
|
||||||
namespace mozilla::dom {
|
|
||||||
|
|
||||||
struct MOZ_HEAP_CLASS WorkerPrincipal final : public JSPrincipals {
|
|
||||||
explicit WorkerPrincipal(bool aIsSystemOrAddonPrincipal);
|
|
||||||
|
|
||||||
bool write(JSContext* aCx, JSStructuredCloneWriter* aWriter) override;
|
|
||||||
|
|
||||||
// We don't distinguish between System or Addon because the only use
|
|
||||||
// case for this right now doesn't need to. When you need to distinguish
|
|
||||||
// add a second bool.
|
|
||||||
bool isSystemOrAddonPrincipal() override;
|
|
||||||
|
|
||||||
// Callback for JS_InitDestroyPrincipalsCallback()
|
|
||||||
static void Destroy(JSPrincipals* aPrincipals);
|
|
||||||
|
|
||||||
private:
|
|
||||||
~WorkerPrincipal();
|
|
||||||
bool mIsSystemOrAddonPrincipal;
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace mozilla::dom
|
|
||||||
|
|
||||||
#endif /* mozilla_dom_workers_principal_h__ */
|
|
|
@ -71,7 +71,6 @@
|
||||||
# include "nsMacUtilsImpl.h"
|
# include "nsMacUtilsImpl.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "Principal.h"
|
|
||||||
#include "WorkerDebuggerManager.h"
|
#include "WorkerDebuggerManager.h"
|
||||||
#include "WorkerError.h"
|
#include "WorkerError.h"
|
||||||
#include "WorkerLoadInfo.h"
|
#include "WorkerLoadInfo.h"
|
||||||
|
@ -876,7 +875,7 @@ class WorkerJSContext final : public mozilla::CycleCollectedJSContext {
|
||||||
JSContext* cx = Context();
|
JSContext* cx = Context();
|
||||||
|
|
||||||
js::SetPreserveWrapperCallbacks(cx, PreserveWrapper, HasReleasedWrapper);
|
js::SetPreserveWrapperCallbacks(cx, PreserveWrapper, HasReleasedWrapper);
|
||||||
JS_InitDestroyPrincipalsCallback(cx, WorkerPrincipal::Destroy);
|
JS_InitDestroyPrincipalsCallback(cx, nsJSPrincipals::Destroy);
|
||||||
JS_SetWrapObjectCallbacks(cx, &WrapObjectCallbacks);
|
JS_SetWrapObjectCallbacks(cx, &WrapObjectCallbacks);
|
||||||
if (mWorkerPrivate->IsDedicatedWorker()) {
|
if (mWorkerPrivate->IsDedicatedWorker()) {
|
||||||
JS_SetFutexCanWait(cx);
|
JS_SetFutexCanWait(cx);
|
||||||
|
|
|
@ -71,7 +71,6 @@
|
||||||
#include "mozilla/ResultExtensions.h"
|
#include "mozilla/ResultExtensions.h"
|
||||||
#include "mozilla/StaticPrefs_browser.h"
|
#include "mozilla/StaticPrefs_browser.h"
|
||||||
#include "mozilla/UniquePtr.h"
|
#include "mozilla/UniquePtr.h"
|
||||||
#include "Principal.h"
|
|
||||||
#include "WorkerRunnable.h"
|
#include "WorkerRunnable.h"
|
||||||
#include "WorkerScope.h"
|
#include "WorkerScope.h"
|
||||||
|
|
||||||
|
|
|
@ -12,7 +12,6 @@
|
||||||
#include "Crypto.h"
|
#include "Crypto.h"
|
||||||
#include "GeckoProfiler.h"
|
#include "GeckoProfiler.h"
|
||||||
#include "MainThreadUtils.h"
|
#include "MainThreadUtils.h"
|
||||||
#include "Principal.h"
|
|
||||||
#include "ScriptLoader.h"
|
#include "ScriptLoader.h"
|
||||||
#include "js/CompilationAndEvaluation.h"
|
#include "js/CompilationAndEvaluation.h"
|
||||||
#include "js/CompileOptions.h"
|
#include "js/CompileOptions.h"
|
||||||
|
@ -916,9 +915,7 @@ bool DedicatedWorkerGlobalScope::WrapGlobalObject(
|
||||||
|
|
||||||
return DedicatedWorkerGlobalScope_Binding::Wrap(
|
return DedicatedWorkerGlobalScope_Binding::Wrap(
|
||||||
aCx, this, this, options,
|
aCx, this, this, options,
|
||||||
new WorkerPrincipal(usesSystemPrincipal ||
|
nsJSPrincipals::get(mWorkerPrivate->GetPrincipal()), true, aReflector);
|
||||||
mWorkerPrivate->UsesAddonOrExpandedAddonPrincipal()),
|
|
||||||
true, aReflector);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void DedicatedWorkerGlobalScope::PostMessage(
|
void DedicatedWorkerGlobalScope::PostMessage(
|
||||||
|
@ -1080,9 +1077,7 @@ bool SharedWorkerGlobalScope::WrapGlobalObject(
|
||||||
|
|
||||||
return SharedWorkerGlobalScope_Binding::Wrap(
|
return SharedWorkerGlobalScope_Binding::Wrap(
|
||||||
aCx, this, this, options,
|
aCx, this, this, options,
|
||||||
new WorkerPrincipal(mWorkerPrivate->UsesSystemPrincipal() ||
|
nsJSPrincipals::get(mWorkerPrivate->GetPrincipal()), true, aReflector);
|
||||||
mWorkerPrivate->UsesAddonOrExpandedAddonPrincipal()),
|
|
||||||
true, aReflector);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void SharedWorkerGlobalScope::Close() {
|
void SharedWorkerGlobalScope::Close() {
|
||||||
|
@ -1125,9 +1120,7 @@ bool ServiceWorkerGlobalScope::WrapGlobalObject(
|
||||||
|
|
||||||
return ServiceWorkerGlobalScope_Binding::Wrap(
|
return ServiceWorkerGlobalScope_Binding::Wrap(
|
||||||
aCx, this, this, options,
|
aCx, this, this, options,
|
||||||
new WorkerPrincipal(mWorkerPrivate->UsesSystemPrincipal() ||
|
nsJSPrincipals::get(mWorkerPrivate->GetPrincipal()), true, aReflector);
|
||||||
mWorkerPrivate->UsesAddonOrExpandedAddonPrincipal()),
|
|
||||||
true, aReflector);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
already_AddRefed<Clients> ServiceWorkerGlobalScope::GetClients() {
|
already_AddRefed<Clients> ServiceWorkerGlobalScope::GetClients() {
|
||||||
|
@ -1252,9 +1245,7 @@ bool WorkerDebuggerGlobalScope::WrapGlobalObject(
|
||||||
|
|
||||||
return WorkerDebuggerGlobalScope_Binding::Wrap(
|
return WorkerDebuggerGlobalScope_Binding::Wrap(
|
||||||
aCx, this, this, options,
|
aCx, this, this, options,
|
||||||
new WorkerPrincipal(mWorkerPrivate->UsesSystemPrincipal() ||
|
nsJSPrincipals::get(mWorkerPrivate->GetPrincipal()), true, aReflector);
|
||||||
mWorkerPrivate->UsesAddonOrExpandedAddonPrincipal()),
|
|
||||||
true, aReflector);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void WorkerDebuggerGlobalScope::GetGlobal(JSContext* aCx,
|
void WorkerDebuggerGlobalScope::GetGlobal(JSContext* aCx,
|
||||||
|
|
|
@ -50,7 +50,6 @@ UNIFIED_SOURCES += [
|
||||||
"ChromeWorkerScope.cpp",
|
"ChromeWorkerScope.cpp",
|
||||||
"JSExecutionManager.cpp",
|
"JSExecutionManager.cpp",
|
||||||
"MessageEventRunnable.cpp",
|
"MessageEventRunnable.cpp",
|
||||||
"Principal.cpp",
|
|
||||||
"RegisterBindings.cpp",
|
"RegisterBindings.cpp",
|
||||||
"RuntimeService.cpp",
|
"RuntimeService.cpp",
|
||||||
"ScriptLoader.cpp",
|
"ScriptLoader.cpp",
|
||||||
|
|
|
@ -1,39 +0,0 @@
|
||||||
/* -*- 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 "WorkletPrincipals.h"
|
|
||||||
|
|
||||||
#include "mozilla/dom/WorkletImpl.h"
|
|
||||||
#include "nsJSPrincipals.h"
|
|
||||||
|
|
||||||
namespace mozilla::dom {
|
|
||||||
|
|
||||||
WorkletPrincipals::WorkletPrincipals(WorkletImpl* aWorkletImpl)
|
|
||||||
: JSPrincipals(), mWorkletImpl(aWorkletImpl) {
|
|
||||||
setDebugToken(kJSPrincipalsDebugToken);
|
|
||||||
}
|
|
||||||
|
|
||||||
WorkletPrincipals::~WorkletPrincipals() = default;
|
|
||||||
|
|
||||||
bool WorkletPrincipals::write(JSContext* aCx,
|
|
||||||
JSStructuredCloneWriter* aWriter) {
|
|
||||||
// This is a serialization of the NullPrincipal corresponding to the worklet
|
|
||||||
// environment settings object for the WorkletGlobalScope.
|
|
||||||
// https://drafts.css-houdini.org/worklets/#set-up-a-worklet-environment-settings-object
|
|
||||||
return nsJSPrincipals::WritePrincipalInfo(aWriter,
|
|
||||||
mWorkletImpl->PrincipalInfo());
|
|
||||||
}
|
|
||||||
|
|
||||||
bool WorkletPrincipals::isSystemOrAddonPrincipal() {
|
|
||||||
// Per Bug 1578623 rev a83797ed249c - Worklets are always NullPrincipal
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void WorkletPrincipals::Destroy(JSPrincipals* aPrincipals) {
|
|
||||||
delete static_cast<WorkletPrincipals*>(aPrincipals);
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace mozilla::dom
|
|
|
@ -1,40 +0,0 @@
|
||||||
/* -*- 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/. */
|
|
||||||
|
|
||||||
#ifndef DOM_WORKLET_WORKLETPRINCIPALS_H_
|
|
||||||
#define DOM_WORKLET_WORKLETPRINCIPALS_H_
|
|
||||||
|
|
||||||
#include "js/Principals.h"
|
|
||||||
#include "mozilla/RefPtr.h"
|
|
||||||
|
|
||||||
namespace mozilla {
|
|
||||||
|
|
||||||
class WorkletImpl;
|
|
||||||
|
|
||||||
namespace dom {
|
|
||||||
|
|
||||||
struct MOZ_HEAP_CLASS WorkletPrincipals final : public JSPrincipals {
|
|
||||||
// A new WorkletPrincipals has refcount zero.
|
|
||||||
explicit WorkletPrincipals(WorkletImpl* aWorkletImpl);
|
|
||||||
|
|
||||||
bool write(JSContext* aCx, JSStructuredCloneWriter* aWriter) override;
|
|
||||||
|
|
||||||
bool isSystemOrAddonPrincipal() override;
|
|
||||||
|
|
||||||
// Callback for JS_InitDestroyPrincipalsCallback()
|
|
||||||
static void Destroy(JSPrincipals* aPrincipals);
|
|
||||||
|
|
||||||
static const uint32_t kJSPrincipalsDebugToken = 0x7e2df9f4;
|
|
||||||
|
|
||||||
private:
|
|
||||||
~WorkletPrincipals();
|
|
||||||
RefPtr<WorkletImpl> mWorkletImpl;
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace dom
|
|
||||||
} // namespace mozilla
|
|
||||||
|
|
||||||
#endif // DOM_WORKLET_WORKLETPRINCIPALS_H_
|
|
|
@ -9,9 +9,9 @@
|
||||||
#include "nsContentUtils.h"
|
#include "nsContentUtils.h"
|
||||||
#include "nsCycleCollector.h"
|
#include "nsCycleCollector.h"
|
||||||
#include "nsJSEnvironment.h"
|
#include "nsJSEnvironment.h"
|
||||||
|
#include "nsJSPrincipals.h"
|
||||||
#include "mozilla/dom/AtomList.h"
|
#include "mozilla/dom/AtomList.h"
|
||||||
#include "mozilla/dom/WorkletGlobalScope.h"
|
#include "mozilla/dom/WorkletGlobalScope.h"
|
||||||
#include "mozilla/dom/WorkletPrincipals.h"
|
|
||||||
#include "mozilla/ipc/BackgroundChild.h"
|
#include "mozilla/ipc/BackgroundChild.h"
|
||||||
#include "mozilla/Attributes.h"
|
#include "mozilla/Attributes.h"
|
||||||
#include "mozilla/CycleCollectedJSRuntime.h"
|
#include "mozilla/CycleCollectedJSRuntime.h"
|
||||||
|
@ -136,7 +136,7 @@ class WorkletJSContext final : public CycleCollectedJSContext {
|
||||||
JSContext* cx = Context();
|
JSContext* cx = Context();
|
||||||
|
|
||||||
js::SetPreserveWrapperCallbacks(cx, PreserveWrapper, HasReleasedWrapper);
|
js::SetPreserveWrapperCallbacks(cx, PreserveWrapper, HasReleasedWrapper);
|
||||||
JS_InitDestroyPrincipalsCallback(cx, WorkletPrincipals::Destroy);
|
JS_InitDestroyPrincipalsCallback(cx, nsJSPrincipals::Destroy);
|
||||||
JS_SetWrapObjectCallbacks(cx, &WrapObjectCallbacks);
|
JS_SetWrapObjectCallbacks(cx, &WrapObjectCallbacks);
|
||||||
JS_SetFutexCanWait(cx);
|
JS_SetFutexCanWait(cx);
|
||||||
|
|
||||||
|
|
|
@ -11,7 +11,6 @@ EXPORTS.mozilla.dom += [
|
||||||
"Worklet.h",
|
"Worklet.h",
|
||||||
"WorkletGlobalScope.h",
|
"WorkletGlobalScope.h",
|
||||||
"WorkletImpl.h",
|
"WorkletImpl.h",
|
||||||
"WorkletPrincipals.h",
|
|
||||||
"WorkletThread.h",
|
"WorkletThread.h",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -19,7 +18,6 @@ UNIFIED_SOURCES += [
|
||||||
"Worklet.cpp",
|
"Worklet.cpp",
|
||||||
"WorkletGlobalScope.cpp",
|
"WorkletGlobalScope.cpp",
|
||||||
"WorkletImpl.cpp",
|
"WorkletImpl.cpp",
|
||||||
"WorkletPrincipals.cpp",
|
|
||||||
"WorkletThread.cpp",
|
"WorkletThread.cpp",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,6 @@
|
||||||
|
|
||||||
#include "PaintWorkletGlobalScope.h"
|
#include "PaintWorkletGlobalScope.h"
|
||||||
|
|
||||||
#include "mozilla/dom/WorkletPrincipals.h"
|
|
||||||
#include "mozilla/dom/PaintWorkletGlobalScopeBinding.h"
|
#include "mozilla/dom/PaintWorkletGlobalScopeBinding.h"
|
||||||
#include "mozilla/dom/FunctionBinding.h"
|
#include "mozilla/dom/FunctionBinding.h"
|
||||||
#include "PaintWorkletImpl.h"
|
#include "PaintWorkletImpl.h"
|
||||||
|
@ -34,9 +33,9 @@ bool PaintWorkletGlobalScope::WrapGlobalObject(
|
||||||
options.creationOptions().setDefineSharedArrayBufferConstructor(
|
options.creationOptions().setDefineSharedArrayBufferConstructor(
|
||||||
IsSharedMemoryAllowed());
|
IsSharedMemoryAllowed());
|
||||||
|
|
||||||
JS::AutoHoldPrincipals principals(aCx, new WorkletPrincipals(mImpl));
|
|
||||||
return PaintWorkletGlobalScope_Binding::Wrap(
|
return PaintWorkletGlobalScope_Binding::Wrap(
|
||||||
aCx, this, this, options, principals.get(), true, aReflector);
|
aCx, this, this, options, nsJSPrincipals::get(mImpl->Principal()), true,
|
||||||
|
aReflector);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PaintWorkletGlobalScope::RegisterPaint(const nsAString& aType,
|
void PaintWorkletGlobalScope::RegisterPaint(const nsAString& aType,
|
||||||
|
|
|
@ -7,7 +7,6 @@
|
||||||
#include "ExtensionPort.h"
|
#include "ExtensionPort.h"
|
||||||
|
|
||||||
#include "mozilla/dom/FunctionBinding.h"
|
#include "mozilla/dom/FunctionBinding.h"
|
||||||
#include "nsJSPrincipals.h" // nsJSPrincipals::AutoSetActiveWorkerPrincipal
|
|
||||||
#include "nsThreadManager.h" // NS_IsMainThread
|
#include "nsThreadManager.h" // NS_IsMainThread
|
||||||
|
|
||||||
namespace mozilla {
|
namespace mozilla {
|
||||||
|
@ -652,18 +651,7 @@ void ExtensionListenerCallPromiseResultHandler::WorkerRunCallback(
|
||||||
JS::Rooted<JS::Value> jsvalue(cx);
|
JS::Rooted<JS::Value> jsvalue(cx);
|
||||||
IgnoredErrorResult rv;
|
IgnoredErrorResult rv;
|
||||||
|
|
||||||
{
|
resHolder->Read(global, cx, &jsvalue, rv);
|
||||||
// Set the active worker principal while reading the result,
|
|
||||||
// needed to be sure to be able to successfully deserialize the
|
|
||||||
// SavedFrame part of a ClonedErrorHolder (in case that was the
|
|
||||||
// result stored in the StructuredCloneHolder).
|
|
||||||
Maybe<nsJSPrincipals::AutoSetActiveWorkerPrincipal> set;
|
|
||||||
if (workerRef) {
|
|
||||||
set.emplace(workerRef->Private()->GetPrincipal());
|
|
||||||
}
|
|
||||||
|
|
||||||
resHolder->Read(global, cx, &jsvalue, rv);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (NS_WARN_IF(rv.Failed())) {
|
if (NS_WARN_IF(rv.Failed())) {
|
||||||
promiseResult->MaybeReject(rv.StealNSResult());
|
promiseResult->MaybeReject(rv.StealNSResult());
|
||||||
|
|
Загрузка…
Ссылка в новой задаче