Bug 863246 - Use system principal to load debugger scripts r=billm,bkelly
MozReview-Commit-ID: DPvbR1As2UV
--- a/dom/workers/ScriptLoader.cpp
+++ b/dom/workers/ScriptLoader.cpp
@@ -889,20 +889,29 @@ private:
return NS_OK;
}
nsresult
LoadScript(uint32_t aIndex)
{
AssertIsOnMainThread();
MOZ_ASSERT(aIndex < mLoadInfos.Length());
+ MOZ_ASSERT_IF(IsMainWorkerScript(), mWorkerScriptType != DebuggerScript);
WorkerPrivate* parentWorker = mWorkerPrivate->GetParent();
- nsIPrincipal* principal = mWorkerPrivate->GetPrincipal();
+ // For JavaScript debugging, the devtools server must run on the same
+ // thread as the debuggee, indicating the worker uses content principal.
+ // However, in Bug 863246, web content will no longer be able to load
+ // resource:// URIs by default, so we need system principal to load
+ // debugger scripts.
+ nsIPrincipal* principal = (mWorkerScriptType == DebuggerScript) ?
+ nsContentUtils::GetSystemPrincipal() :
+ mWorkerPrivate->GetPrincipal();
+
nsCOMPtr<nsILoadGroup> loadGroup = mWorkerPrivate->GetLoadGroup();
MOZ_DIAGNOSTIC_ASSERT(principal);
NS_ENSURE_TRUE(NS_LoadGroupMatchesPrincipal(loadGroup, principal),
NS_ERROR_FAILURE);
// Figure out our base URI.
nsCOMPtr<nsIURI> baseURI = GetBaseURI(mIsMainScript, mWorkerPrivate);