mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-10-09 00:37:32 +09:00
Issue #2402 - Require ServiceWorkerGlobalScope.importScripts() to only accept JavaScript MIME types. https://bugzilla.mozilla.org/show_bug.cgi?id=1354577 Require ServiceWorkerContainer.register() to only accept JavaScript MIME types.
This commit is contained in:
parent
5202c08cfb
commit
b7abd4a127
3 changed files with 33 additions and 5 deletions
|
|
@ -224,7 +224,7 @@ ServiceWorkerScopePathMismatch=Failed to register a ServiceWorker: The path of t
|
||||||
# LOCALIZATION NOTE: Do not translate "ServiceWorker". %1$S is a URL representing the scope of the ServiceWorker, %2$S is a stringified numeric HTTP status code like "404" and %3$S is a URL.
|
# LOCALIZATION NOTE: Do not translate "ServiceWorker". %1$S is a URL representing the scope of the ServiceWorker, %2$S is a stringified numeric HTTP status code like "404" and %3$S is a URL.
|
||||||
ServiceWorkerRegisterNetworkError=Failed to register/update a ServiceWorker for scope ‘%1$S’: Load failed with status %2$S for script ‘%3$S’.
|
ServiceWorkerRegisterNetworkError=Failed to register/update a ServiceWorker for scope ‘%1$S’: Load failed with status %2$S for script ‘%3$S’.
|
||||||
# LOCALIZATION NOTE: Do not translate "ServiceWorker". %1$S is a URL representing the scope of the ServiceWorker, %2$S is a MIME Media Type like "text/plain" and %3$S is a URL.
|
# LOCALIZATION NOTE: Do not translate "ServiceWorker". %1$S is a URL representing the scope of the ServiceWorker, %2$S is a MIME Media Type like "text/plain" and %3$S is a URL.
|
||||||
ServiceWorkerRegisterMimeTypeError=Failed to register/update a ServiceWorker for scope ‘%1$S’: Bad Content-Type of ‘%2$S’ received for script ‘%3$S’. Must be ‘text/javascript’, ‘application/x-javascript’, or ‘application/javascript’.
|
ServiceWorkerRegisterMimeTypeError2=Failed to register/update a ServiceWorker for scope ‘%1$S’: Bad Content-Type of ‘%2$S’ received for script ‘%3$S’. Must be ‘text/javascript’, ‘application/x-javascript’, or ‘application/javascript’.
|
||||||
# LOCALIZATION NOTE: Do not translate "ServiceWorker". %1$S is a URL representing the scope of the ServiceWorker.
|
# LOCALIZATION NOTE: Do not translate "ServiceWorker". %1$S is a URL representing the scope of the ServiceWorker.
|
||||||
ServiceWorkerGraceTimeoutTermination=Terminating ServiceWorker for scope ‘%1$S’ with pending waitUntil/respondWith promises because of grace timeout.
|
ServiceWorkerGraceTimeoutTermination=Terminating ServiceWorker for scope ‘%1$S’ with pending waitUntil/respondWith promises because of grace timeout.
|
||||||
ExecCommandCutCopyDeniedNotInputDriven=document.execCommand(‘cut’/‘copy’) was denied because it was not called from inside a short running user-generated event handler.
|
ExecCommandCutCopyDeniedNotInputDriven=document.execCommand(‘cut’/‘copy’) was denied because it was not called from inside a short running user-generated event handler.
|
||||||
|
|
|
||||||
|
|
@ -59,6 +59,7 @@
|
||||||
#include "mozilla/dom/ScriptLoader.h"
|
#include "mozilla/dom/ScriptLoader.h"
|
||||||
#include "mozilla/dom/ScriptSettings.h"
|
#include "mozilla/dom/ScriptSettings.h"
|
||||||
#include "mozilla/dom/SRILogHelper.h"
|
#include "mozilla/dom/SRILogHelper.h"
|
||||||
|
#include "mozilla/dom/workers/ServiceWorkerManager.h"
|
||||||
#include "mozilla/UniquePtr.h"
|
#include "mozilla/UniquePtr.h"
|
||||||
#include "Principal.h"
|
#include "Principal.h"
|
||||||
#include "WorkerHolder.h"
|
#include "WorkerHolder.h"
|
||||||
|
|
@ -663,6 +664,34 @@ private:
|
||||||
ScriptLoadInfo& loadInfo = mLoadInfos[aIndex];
|
ScriptLoadInfo& loadInfo = mLoadInfos[aIndex];
|
||||||
|
|
||||||
nsCOMPtr<nsIChannel> channel = do_QueryInterface(aRequest);
|
nsCOMPtr<nsIChannel> channel = do_QueryInterface(aRequest);
|
||||||
|
|
||||||
|
// Checking the MIME type is only required for ServiceWorkers'
|
||||||
|
// importScripts, per step 10 of https://w3c.github.io/ServiceWorker/#importscripts
|
||||||
|
//
|
||||||
|
// "Extract a MIME type from the response’s header list. If this MIME type
|
||||||
|
// (ignoring parameters) is not a JavaScript MIME type, return a network error."
|
||||||
|
if (mWorkerPrivate->IsServiceWorker()) {
|
||||||
|
nsAutoCString mimeType;
|
||||||
|
channel->GetContentType(mimeType);
|
||||||
|
|
||||||
|
if (!nsContentUtils::IsJavascriptMIMEType(NS_ConvertUTF8toUTF16(mimeType))) {
|
||||||
|
const nsCString& scope =
|
||||||
|
mWorkerPrivate->ServiceWorkerScope();
|
||||||
|
|
||||||
|
ServiceWorkerManager::LocalizeAndReportToAllClients(
|
||||||
|
scope, "ServiceWorkerRegisterMimeTypeError2",
|
||||||
|
nsTArray<nsString> {
|
||||||
|
NS_ConvertUTF8toUTF16(scope),
|
||||||
|
NS_ConvertUTF8toUTF16(mimeType),
|
||||||
|
loadInfo.mURL
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
channel->Cancel(NS_ERROR_DOM_NETWORK_ERR);
|
||||||
|
return NS_ERROR_DOM_NETWORK_ERR;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
MOZ_ASSERT(channel == loadInfo.mChannel);
|
MOZ_ASSERT(channel == loadInfo.mChannel);
|
||||||
|
|
||||||
// We synthesize the result code, but its never exposed to content.
|
// We synthesize the result code, but its never exposed to content.
|
||||||
|
|
|
||||||
|
|
@ -801,12 +801,11 @@ CompareNetwork::OnStreamComplete(nsIStreamLoader* aLoader, nsISupports* aContext
|
||||||
return rv;
|
return rv;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!mimeType.LowerCaseEqualsLiteral("text/javascript") &&
|
if (mimeType.IsEmpty() ||
|
||||||
!mimeType.LowerCaseEqualsLiteral("application/x-javascript") &&
|
!nsContentUtils::IsJavascriptMIMEType(NS_ConvertUTF8toUTF16(mimeType))) {
|
||||||
!mimeType.LowerCaseEqualsLiteral("application/javascript")) {
|
|
||||||
RefPtr<ServiceWorkerRegistrationInfo> registration = mManager->GetRegistration();
|
RefPtr<ServiceWorkerRegistrationInfo> registration = mManager->GetRegistration();
|
||||||
ServiceWorkerManager::LocalizeAndReportToAllClients(
|
ServiceWorkerManager::LocalizeAndReportToAllClients(
|
||||||
registration->mScope, "ServiceWorkerRegisterMimeTypeError",
|
registration->mScope, "ServiceWorkerRegisterMimeTypeError2",
|
||||||
nsTArray<nsString> { NS_ConvertUTF8toUTF16(registration->mScope),
|
nsTArray<nsString> { NS_ConvertUTF8toUTF16(registration->mScope),
|
||||||
NS_ConvertUTF8toUTF16(mimeType), mManager->URL() });
|
NS_ConvertUTF8toUTF16(mimeType), mManager->URL() });
|
||||||
mManager->NetworkFinished(NS_ERROR_DOM_SECURITY_ERR);
|
mManager->NetworkFinished(NS_ERROR_DOM_SECURITY_ERR);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue