From 65d6aee9e0d586b5a069c6f816e7fe3d18cc381e Mon Sep 17 00:00:00 2001
From: Roy Tam
Date: Tue, 18 Jun 2019 20:09:32 +0800
Subject: [PATCH] import change from rmottola/Arctic-Fox: - Bug 1132141 -
Update storage when ServiceWorker registration fails. (5bf56ab4f) - Bug
1001691 - WorkerPrivate::LoadInfo -> WorkerLoadInfo (bc017200f) - Bug 1001691
- Move WorkerType out of WorkerPrivate.h (02751f7b6) - Bug 1131882 -
Associate ServiceWorkers with underlying ServiceWorkerInfo. (4492ae042) - Bug
1131874 - ServiceWorker persistence activation fixes. (cd4f32309) - Bug
1142015 - Add source for messages dispatched to a Service Worker. (25b685a06)
- Bug 1053275 - Exempt ServiceWorkers from per domain thread limits.
(f67251f0d) - Bug 1139561 - Various small ServiceWorker test fixes.
(dbd0beae4) - Bug 1130688 - Implement additional scope checking in service
worker registration. (cbd8fee66) - Bug 1142841: Convert all
nsRefPtr to nsCOMPtr. r=ehsan (9d4e51880) - Bug
1134462 - Synthesize status and headers from Response returned by
ServiceWorker. (8203ae32b) - Bug 1134462 - allow null body. (1490bb9bd) - Bug
1141332 - Disable content decoding and use decoded length on intercepted
channels. (2eec7968b) - Bug 1134330 - Mark fetch events as reloads
appropriately. (a3025a42a) - Bug 1136757 - Add direct Response overload for
FetchEvent.respondWith(). (a33248935) - Bug 1134462 - Cleanup Promise usage
in fetch test SW. (fbe9f4cd5) - Bug 1134462 followup: Add missing
MOZ_OVERRIDE annotation to SynthesizeStatus impls in SynthesizeStatus.h.
(fb34b64d4) - Bug 1142124 - Never revalidate cache entries for synthesized
responses. (0f4842e41) - Bug 1143155 - Filtered response stores internal
response and allows access to headers. (956c334b1) - Bug 1133861 - Enable the
Fetch API by default. (e05918105) - Bug 1140791 - Run fetch tests on main
thread and workers. (e672969d6) - Bug 1144819 - Change JS_DefineProperty APIs
to treat getter=nullptr and setter=nullptr as indicating class getter/setter
ops only for data properties. (e030ab7d6)
---
docshell/base/nsDocShell.cpp | 3 +-
docshell/shistory/src/nsSHistory.cpp | 2 +-
dom/base/nsDocument.cpp | 4 +-
dom/base/nsFrameLoader.cpp | 2 +-
dom/base/nsFrameMessageManager.cpp | 2 +-
dom/base/nsGlobalWindow.cpp | 2 +-
dom/cache/FetchPut.cpp | 2 +-
dom/cache/TypeUtils.cpp | 55 ++-
dom/cache/test/mochitest/test_cache.html | 3 +-
dom/camera/CameraPreviewMediaStream.cpp | 2 +-
dom/events/MessageEvent.cpp | 13 +-
dom/events/MessageEvent.h | 13 +-
dom/fetch/FetchDriver.cpp | 6 +-
dom/fetch/Headers.cpp | 26 --
dom/fetch/InternalResponse.cpp | 44 +-
dom/fetch/InternalResponse.h | 73 +++-
.../base/nsIServiceWorkerManager.idl | 7 +-
dom/media/MediaRecorder.cpp | 4 +-
dom/media/MediaStreamGraph.cpp | 4 +-
dom/media/MediaStreamGraph.h | 2 +-
dom/media/gmp/GMPService.cpp | 4 +-
dom/media/gtest/TestGMPCrossOrigin.cpp | 10 +-
dom/media/mediasource/MediaSource.cpp | 2 +-
.../agnostic/gmp/MediaDataDecoderProxy.cpp | 8 +-
dom/media/webaudio/AudioNode.cpp | 2 +-
dom/promise/Promise.cpp | 6 +-
.../mochitest/fetch/fetch_test_framework.js | 86 ++++
.../mochitest/fetch/test_fetch_basic.html | 8 +-
.../fetch/test_fetch_basic_http.html | 8 +-
.../fetch/test_fetch_basic_worker.html | 6 +-
.../mochitest/fetch/test_fetch_cors.html | 8 +-
dom/tests/mochitest/fetch/test_headers.html | 10 +-
dom/tests/mochitest/fetch/test_request.html | 22 +
dom/tests/mochitest/fetch/test_response.html | 22 +
.../mochitest/general/test_interfaces.html | 6 +-
dom/webidl/Fetch.webidl | 2 +-
dom/webidl/FetchEvent.webidl | 1 +
dom/webidl/Headers.webidl | 3 +-
dom/webidl/MessageEvent.webidl | 7 +-
dom/webidl/Request.webidl | 3 +-
dom/webidl/Response.webidl | 3 +-
dom/webidl/ServiceWorkerContainer.webidl | 6 +-
dom/workers/RuntimeService.cpp | 86 +---
dom/workers/RuntimeService.h | 31 +-
dom/workers/ServiceWorker.cpp | 33 +-
dom/workers/ServiceWorker.h | 24 +-
dom/workers/ServiceWorkerContainer.cpp | 35 +-
dom/workers/ServiceWorkerContainer.h | 4 +-
dom/workers/ServiceWorkerEvents.cpp | 86 +++-
dom/workers/ServiceWorkerEvents.h | 4 +
dom/workers/ServiceWorkerManager.cpp | 294 ++++++++-----
dom/workers/ServiceWorkerManager.h | 54 ++-
dom/workers/ServiceWorkerRegistration.cpp | 22 -
dom/workers/ServiceWorkerRegistration.h | 3 -
dom/workers/WorkerPrivate.cpp | 409 ++++++++++--------
dom/workers/WorkerPrivate.h | 121 +-----
dom/workers/Workers.h | 89 +++-
dom/workers/test/fetch/test_interfaces.html | 6 +-
dom/workers/test/fetch/test_request.html | 6 +-
dom/workers/test/fetch/test_response.html | 6 +-
.../serviceworkers/fetch/deliver-gzip.sjs | 17 +
.../test/serviceworkers/fetch/fetch_tests.js | 51 +++
.../test/serviceworkers/fetch_event_worker.js | 147 ++++---
dom/workers/test/serviceworkers/mochitest.ini | 4 +
.../test/serviceworkers/scope/scope_worker.js | 2 +
.../serviceworkers/simpleregister/index.html | 9 -
.../source_message_posting_worker.js | 12 +
.../test/serviceworkers/test_controller.html | 1 +
.../test/serviceworkers/test_fetch_event.html | 20 +-
.../serviceworkers/test_install_event.html | 1 +
.../test_installation_simple.html | 1 +
.../test/serviceworkers/test_match_all.html | 1 +
.../test/serviceworkers/test_navigator.html | 1 +
.../serviceworkers/test_post_message.html | 1 +
.../test_post_message_advanced.html | 1 +
.../test_post_message_source.html | 65 +++
.../test/serviceworkers/test_scopes.html | 39 +-
.../test_serviceworker_interfaces.html | 1 -
.../test_serviceworker_interfaces.js | 2 +-
.../test/serviceworkers/test_unregister.html | 33 +-
.../serviceworkers/test_workerUnregister.html | 27 +-
.../serviceworkers/test_workerUpdate.html | 1 +
.../test/serviceworkers/unregister/index.html | 17 +-
.../serviceworkers/unregister/unregister.html | 2 +-
.../serviceworkers/workerUpdate/update.html | 2 +-
dom/workers/test/test_worker_interfaces.js | 6 +-
gfx/gl/AndroidSurfaceTexture.h | 2 +-
js/src/jsapi.cpp | 10 +-
layout/ipc/VsyncParent.cpp | 2 +-
.../src/peerconnection/PeerConnectionCtx.cpp | 2 +-
.../src/peerconnection/PeerConnectionCtx.h | 4 +-
.../peerconnection/PeerConnectionMedia.cpp | 6 +-
.../src/peerconnection/PeerConnectionMedia.h | 4 +-
modules/libpref/init/all.js | 3 -
netwerk/base/NetworkActivityMonitor.cpp | 2 +-
netwerk/base/OfflineObserver.cpp | 4 +-
netwerk/base/Tickler.cpp | 2 +-
netwerk/base/nsAsyncRedirectVerifyHelper.cpp | 2 +-
.../base/nsINetworkInterceptController.idl | 8 +-
netwerk/cache/nsCacheEntryDescriptor.cpp | 2 +-
netwerk/cache/nsDiskCacheDeviceSQL.cpp | 2 +-
netwerk/cache2/CacheIOThread.cpp | 2 +-
netwerk/cache2/CacheIOThread.h | 2 +-
netwerk/protocol/http/HttpChannelChild.cpp | 7 +-
netwerk/protocol/http/HttpChannelChild.h | 3 +-
netwerk/protocol/http/InterceptedChannel.cpp | 62 ++-
netwerk/protocol/http/InterceptedChannel.h | 9 +
.../http/nsHttpActivityDistributor.cpp | 2 +-
netwerk/protocol/http/nsHttpChannel.cpp | 6 +-
netwerk/protocol/http/nsHttpConnectionMgr.cpp | 4 +-
widget/android/AndroidJNIWrapper.cpp | 2 +-
xpcom/base/AvailableMemoryTracker.cpp | 2 +-
xpcom/base/CycleCollectedJSRuntime.cpp | 2 +-
xpcom/base/CycleCollectedJSRuntime.h | 4 +-
xpcom/glue/nsProxyRelease.cpp | 2 +-
xpcom/io/nsInputStreamTee.cpp | 2 +-
xpcom/threads/nsEventQueue.cpp | 2 +-
xpcom/threads/nsThread.cpp | 2 +-
xpcom/threads/nsThreadPool.cpp | 4 +-
119 files changed, 1551 insertions(+), 902 deletions(-)
create mode 100644 dom/tests/mochitest/fetch/fetch_test_framework.js
create mode 100644 dom/tests/mochitest/fetch/test_request.html
create mode 100644 dom/tests/mochitest/fetch/test_response.html
create mode 100644 dom/workers/test/serviceworkers/fetch/deliver-gzip.sjs
create mode 100644 dom/workers/test/serviceworkers/scope/scope_worker.js
create mode 100644 dom/workers/test/serviceworkers/source_message_posting_worker.js
create mode 100644 dom/workers/test/serviceworkers/test_post_message_source.html
diff --git a/docshell/base/nsDocShell.cpp b/docshell/base/nsDocShell.cpp
index bcb1023264..d80afaef7c 100644
--- a/docshell/base/nsDocShell.cpp
+++ b/docshell/base/nsDocShell.cpp
@@ -14210,7 +14210,8 @@ nsDocShell::ChannelIntercepted(nsIInterceptedChannel* aChannel)
}
}
- return swm->DispatchFetchEvent(doc, aChannel);
+ bool isReload = mLoadType & LOAD_CMD_RELOAD;
+ return swm->DispatchFetchEvent(doc, aChannel, isReload);
}
NS_IMETHODIMP
diff --git a/docshell/shistory/src/nsSHistory.cpp b/docshell/shistory/src/nsSHistory.cpp
index 817ea2c139..a6314df746 100644
--- a/docshell/shistory/src/nsSHistory.cpp
+++ b/docshell/shistory/src/nsSHistory.cpp
@@ -1406,7 +1406,7 @@ nsSHistory::RemoveEntries(nsTArray& aIDs, int32_t aStartIndex)
--index;
}
if (didRemove && mRootDocShell) {
- nsRefPtr ev =
+ nsCOMPtr ev =
NS_NewRunnableMethod(static_cast(mRootDocShell),
&nsDocShell::FireDummyOnLocationChange);
NS_DispatchToCurrentThread(ev);
diff --git a/dom/base/nsDocument.cpp b/dom/base/nsDocument.cpp
index 7192fa35e0..038eb26241 100644
--- a/dom/base/nsDocument.cpp
+++ b/dom/base/nsDocument.cpp
@@ -4403,7 +4403,7 @@ nsDocument::SetStyleSheetApplicableState(nsIStyleSheet* aSheet,
}
if (!mSSApplicableStateNotificationPending) {
- nsRefPtr notification = NS_NewRunnableMethod(this,
+ nsCOMPtr notification = NS_NewRunnableMethod(this,
&nsDocument::NotifyStyleSheetApplicableStateChanged);
mSSApplicableStateNotificationPending =
NS_SUCCEEDED(NS_DispatchToCurrentThread(notification));
@@ -5206,7 +5206,7 @@ nsDocument::UnblockDOMContentLoaded()
MOZ_ASSERT(mReadyState == READYSTATE_INTERACTIVE);
if (!mSynchronousDOMContentLoaded) {
- nsRefPtr ev =
+ nsCOMPtr ev =
NS_NewRunnableMethod(this, &nsDocument::DispatchContentLoadedEvents);
NS_DispatchToCurrentThread(ev);
} else {
diff --git a/dom/base/nsFrameLoader.cpp b/dom/base/nsFrameLoader.cpp
index 986d9f7859..2dd2e9f720 100644
--- a/dom/base/nsFrameLoader.cpp
+++ b/dom/base/nsFrameLoader.cpp
@@ -2360,7 +2360,7 @@ nsFrameLoader::DoSendAsyncMessage(JSContext* aCx,
}
if (mChildMessageManager) {
- nsRefPtr ev = new nsAsyncMessageToChild(aCx, this, aMessage,
+ nsCOMPtr ev = new nsAsyncMessageToChild(aCx, this, aMessage,
aData, aCpows,
aPrincipal);
NS_DispatchToCurrentThread(ev);
diff --git a/dom/base/nsFrameMessageManager.cpp b/dom/base/nsFrameMessageManager.cpp
index aa23f85bb7..29a777c5f6 100644
--- a/dom/base/nsFrameMessageManager.cpp
+++ b/dom/base/nsFrameMessageManager.cpp
@@ -1742,7 +1742,7 @@ public:
JS::Handle aCpows,
nsIPrincipal* aPrincipal) override
{
- nsRefPtr ev =
+ nsCOMPtr ev =
new nsAsyncMessageToSameProcessChild(aCx, aMessage, aData, aCpows,
aPrincipal);
NS_DispatchToCurrentThread(ev);
diff --git a/dom/base/nsGlobalWindow.cpp b/dom/base/nsGlobalWindow.cpp
index 351c923680..5ed5f49db0 100644
--- a/dom/base/nsGlobalWindow.cpp
+++ b/dom/base/nsGlobalWindow.cpp
@@ -9046,7 +9046,7 @@ private:
void
nsGlobalWindow::NotifyWindowIDDestroyed(const char* aTopic)
{
- nsRefPtr runnable = new WindowDestroyedEvent(this, mWindowID, aTopic);
+ nsCOMPtr runnable = new WindowDestroyedEvent(this, mWindowID, aTopic);
nsresult rv = NS_DispatchToCurrentThread(runnable);
if (NS_SUCCEEDED(rv)) {
mNotifiedIDDestroyed = true;
diff --git a/dom/cache/FetchPut.cpp b/dom/cache/FetchPut.cpp
index aea24423ae..b72463f52c 100644
--- a/dom/cache/FetchPut.cpp
+++ b/dom/cache/FetchPut.cpp
@@ -162,7 +162,7 @@ FetchPut::DispatchToMainThread()
{
MOZ_ASSERT(!mRunnable);
- nsRefPtr runnable = new Runnable(this);
+ nsCOMPtr runnable = new Runnable(this);
nsresult rv = NS_DispatchToMainThread(runnable, nsIThread::DISPATCH_NORMAL);
if (NS_WARN_IF(NS_FAILED(rv))) {
diff --git a/dom/cache/TypeUtils.cpp b/dom/cache/TypeUtils.cpp
index b643d69f60..e702836a74 100644
--- a/dom/cache/TypeUtils.cpp
+++ b/dom/cache/TypeUtils.cpp
@@ -229,7 +229,7 @@ TypeUtils::ToPCacheResponseWithoutBody(PCacheResponse& aOut,
aOut.status() = aIn.GetStatus();
aOut.statusText() = aIn.GetStatusText();
- nsRefPtr headers = aIn.Headers();
+ nsRefPtr headers = aIn.UnfilteredHeaders();
MOZ_ASSERT(headers);
headers->GetPHeaders(aOut.headers());
aOut.headersGuard() = headers->Guard();
@@ -279,37 +279,14 @@ TypeUtils::ToPCacheQueryParams(PCacheQueryParams& aOut,
already_AddRefed
TypeUtils::ToResponse(const PCacheResponse& aIn)
{
- nsRefPtr ir;
- switch (aIn.type())
- {
- case ResponseType::Error:
- ir = InternalResponse::NetworkError();
- break;
- case ResponseType::Opaque:
- ir = InternalResponse::OpaqueResponse();
- break;
- case ResponseType::Default:
- ir = new InternalResponse(aIn.status(), aIn.statusText());
- break;
- case ResponseType::Basic:
- {
- nsRefPtr inner = new InternalResponse(aIn.status(),
- aIn.statusText());
- ir = InternalResponse::BasicResponse(inner);
- break;
- }
- case ResponseType::Cors:
- {
- nsRefPtr inner = new InternalResponse(aIn.status(),
- aIn.statusText());
- ir = InternalResponse::CORSResponse(inner);
- break;
- }
- default:
- MOZ_CRASH("Unexpected ResponseType!");
+ if (aIn.type() == ResponseType::Error) {
+ nsRefPtr error = InternalResponse::NetworkError();
+ nsRefPtr r = new Response(GetGlobalObject(), error);
+ return r.forget();
}
- MOZ_ASSERT(ir);
+ nsRefPtr ir = new InternalResponse(aIn.status(),
+ aIn.statusText());
ir->SetUrl(NS_ConvertUTF16toUTF8(aIn.url()));
nsRefPtr internalHeaders =
@@ -325,6 +302,24 @@ TypeUtils::ToResponse(const PCacheResponse& aIn)
nsCOMPtr stream = ReadStream::Create(aIn.body());
ir->SetBody(stream);
+ switch (aIn.type())
+ {
+ case ResponseType::Default:
+ break;
+ case ResponseType::Opaque:
+ ir = ir->OpaqueResponse();
+ break;
+ case ResponseType::Basic:
+ ir = ir->BasicResponse();
+ break;
+ case ResponseType::Cors:
+ ir = ir->CORSResponse();
+ break;
+ default:
+ MOZ_CRASH("Unexpected ResponseType!");
+ }
+ MOZ_ASSERT(ir);
+
nsRefPtr ref = new Response(GetGlobalObject(), ir);
return ref.forget();
}
diff --git a/dom/cache/test/mochitest/test_cache.html b/dom/cache/test/mochitest/test_cache.html
index ff7bad44b6..fae5ac90d5 100644
--- a/dom/cache/test/mochitest/test_cache.html
+++ b/dom/cache/test/mochitest/test_cache.html
@@ -13,8 +13,7 @@
diff --git a/dom/tests/mochitest/fetch/test_fetch_basic_http.html b/dom/tests/mochitest/fetch/test_fetch_basic_http.html
index b4e75836da..1601d9407f 100644
--- a/dom/tests/mochitest/fetch/test_fetch_basic_http.html
+++ b/dom/tests/mochitest/fetch/test_fetch_basic_http.html
@@ -42,12 +42,8 @@ function testOnWorker(done) {
// Driver
//
-SpecialPowers.pushPrefEnv({"set": [
- ["dom.fetch.enabled", true]
-]}, function() {
- testOnWorker(function() {
- SimpleTest.finish();
- });
+testOnWorker(function() {
+ SimpleTest.finish();
});
diff --git a/dom/tests/mochitest/fetch/test_fetch_basic_worker.html b/dom/tests/mochitest/fetch/test_fetch_basic_worker.html
index 54f15e5ce9..a373528f0a 100644
--- a/dom/tests/mochitest/fetch/test_fetch_basic_worker.html
+++ b/dom/tests/mochitest/fetch/test_fetch_basic_worker.html
@@ -36,11 +36,7 @@
SimpleTest.waitForExplicitFinish();
- SpecialPowers.pushPrefEnv({"set": [
- ["dom.fetch.enabled", true]
- ]}, function() {
- runTest();
- });
+ runTest();
+
+
+
+
+
+
diff --git a/dom/tests/mochitest/fetch/test_fetch_cors.html b/dom/tests/mochitest/fetch/test_fetch_cors.html
index 30b73081ce..222132bc4d 100644
--- a/dom/tests/mochitest/fetch/test_fetch_cors.html
+++ b/dom/tests/mochitest/fetch/test_fetch_cors.html
@@ -42,12 +42,8 @@ function testOnWorker(done) {
// Driver
//
-SpecialPowers.pushPrefEnv({"set": [
- ["dom.fetch.enabled", true]
-]}, function() {
- testOnWorker(function() {
- SimpleTest.finish();
- });
+testOnWorker(function() {
+ SimpleTest.finish();
});
diff --git a/dom/tests/mochitest/fetch/test_headers.html b/dom/tests/mochitest/fetch/test_headers.html
index 103c88e629..4e461f6949 100644
--- a/dom/tests/mochitest/fetch/test_headers.html
+++ b/dom/tests/mochitest/fetch/test_headers.html
@@ -53,13 +53,9 @@ function testOnMainThread(done) {
// Driver
//
-SpecialPowers.pushPrefEnv({"set": [
- ["dom.fetch.enabled", true]
-]}, function() {
- testOnMainThread(function() {
- testOnWorker(function() {
- SimpleTest.finish();
- });
+testOnMainThread(function() {
+ testOnWorker(function() {
+ SimpleTest.finish();
});
});
diff --git a/dom/tests/mochitest/fetch/test_request.html b/dom/tests/mochitest/fetch/test_request.html
new file mode 100644
index 0000000000..6222205455
--- /dev/null
+++ b/dom/tests/mochitest/fetch/test_request.html
@@ -0,0 +1,22 @@
+
+
+
+