Bug 482388 - Use default url encoding to create channel when creating child workers or importing scripts in a worker. r=khuey

--HG--
extra : rebase_source : 78b0ddd725205028c6dc4c193cbbce0e0a628d77
This commit is contained in:
Stone Shih 2016-04-28 15:44:08 +08:00
Родитель e0e7ead1f0
Коммит d9f82778f9
4 изменённых файлов: 23 добавлений и 10 удалений

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

@ -111,15 +111,22 @@ ChannelFromScriptURL(nsIPrincipal* principal,
WorkerScriptType aWorkerScriptType,
nsContentPolicyType aContentPolicyType,
nsLoadFlags aLoadFlags,
bool aDefaultURIEncoding,
nsIChannel** aChannel)
{
AssertIsOnMainThread();
nsresult rv;
nsCOMPtr<nsIURI> uri;
if (aDefaultURIEncoding) {
rv = NS_NewURI(getter_AddRefs(uri), aScriptURL, nullptr, baseURI);
} else {
rv = nsContentUtils::NewURIWithDocumentCharset(getter_AddRefs(uri),
aScriptURL, parentDoc,
baseURI);
}
if (NS_FAILED(rv)) {
return NS_ERROR_DOM_SYNTAX_ERR;
}
@ -919,10 +926,14 @@ private:
}
if (!channel) {
// Only top level workers' main script use the document charset for the
// script uri encoding. Otherwise, default encoding (UTF-8) is applied.
bool useDefaultEncoding = !(!parentWorker && IsMainWorkerScript());
rv = ChannelFromScriptURL(principal, baseURI, parentDoc, loadGroup, ios,
secMan, loadInfo.mURL, IsMainWorkerScript(),
mWorkerScriptType,
mWorkerPrivate->ContentPolicyType(), loadFlags,
useDefaultEncoding,
getter_AddRefs(channel));
if (NS_WARN_IF(NS_FAILED(rv))) {
return rv;
@ -1697,6 +1708,8 @@ public:
mScriptURL,
// Nested workers are always dedicated.
nsIContentPolicy::TYPE_INTERNAL_WORKER,
// Nested workers use default uri encoding.
true,
getter_AddRefs(channel));
if (NS_SUCCEEDED(mResult)) {
channel.forget(mChannel);
@ -2012,6 +2025,7 @@ ChannelFromScriptURLMainThread(nsIPrincipal* aPrincipal,
nsILoadGroup* aLoadGroup,
const nsAString& aScriptURL,
nsContentPolicyType aContentPolicyType,
bool aDefaultURIEncoding,
nsIChannel** aChannel)
{
AssertIsOnMainThread();
@ -2024,7 +2038,7 @@ ChannelFromScriptURLMainThread(nsIPrincipal* aPrincipal,
return ChannelFromScriptURL(aPrincipal, aBaseURI, aParentDoc, aLoadGroup,
ios, secMan, aScriptURL, true, WorkerScript,
aContentPolicyType, nsIRequest::LOAD_NORMAL,
aChannel);
aDefaultURIEncoding, aChannel);
}
nsresult

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

@ -39,6 +39,7 @@ ChannelFromScriptURLMainThread(nsIPrincipal* aPrincipal,
nsILoadGroup* aLoadGroup,
const nsAString& aScriptURL,
nsContentPolicyType aContentPolicyType,
bool aDefaultURIEncoding,
nsIChannel** aChannel);
nsresult

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

@ -4426,10 +4426,14 @@ WorkerPrivate::GetLoadInfo(JSContext* aCx, nsPIDOMWindowInner* aWindow,
MOZ_ASSERT(NS_LoadGroupMatchesPrincipal(loadInfo.mLoadGroup,
loadInfo.mPrincipal));
// Top level workers' main script use the document charset for the script
// uri encoding.
bool useDefaultEncoding = false;
rv = ChannelFromScriptURLMainThread(loadInfo.mPrincipal, loadInfo.mBaseURI,
document, loadInfo.mLoadGroup,
aScriptURL,
ContentPolicyType(aWorkerType),
useDefaultEncoding,
getter_AddRefs(loadInfo.mChannel));
NS_ENSURE_SUCCESS(rv, rv);

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

@ -30,12 +30,6 @@
[history.replaceState]
expected: FAIL
[importScripts() in a dedicated worker]
expected: FAIL
[Worker() in a dedicated worker]
expected: FAIL
[SharedWorker() in a dedicated worker]
expected: FAIL