Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(751)

Unified Diff: content/browser/service_worker/service_worker_browsertest.cc

Issue 2645493002: Increase the lifetime of Navigation Preload related objects. (Closed)
Patch Set: send abort error and fix flaky test and add abort-when-responded layouttest Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/browser/service_worker/service_worker_browsertest.cc
diff --git a/content/browser/service_worker/service_worker_browsertest.cc b/content/browser/service_worker/service_worker_browsertest.cc
index 1c423d0ed0a9c5bc12ee327591fb4176c84ddab5..82e2c997748904c583f8f583253f12c5d589f21c 100644
--- a/content/browser/service_worker/service_worker_browsertest.cc
+++ b/content/browser/service_worker/service_worker_browsertest.cc
@@ -1626,16 +1626,12 @@ const std::string
const std::string
ServiceWorkerNavigationPreloadTest::kPreloadResponseTestScript =
- "var preload_resolve;\n"
- "var preload_promise = new Promise(r => { preload_resolve = r; });\n"
"self.addEventListener('fetch', event => {\n"
- " event.waitUntil(event.preloadResponse.then(\n"
+ " event.respondWith(event.preloadResponse.then(\n"
" r => {\n"
" if (!r) {\n"
- " preload_resolve(\n"
- " {result: 'RESOLVED', \n"
- " info: 'Resolved with ' + r + '.'});\n"
- " return;\n"
+ " return {result: 'RESOLVED', \n"
+ " info: 'Resolved with ' + r + '.'};\n"
" }\n"
" var info = {};\n"
" info.type = r.type;\n"
@@ -1646,30 +1642,17 @@ const std::string
" info.headers = [];\n"
" r.headers.forEach(\n"
" (v, n) => { info.headers.push([n,v]); });\n"
- " preload_resolve({result: 'RESOLVED',\n"
- " info: JSON.stringify(info)}); },\n"
- " e => { preload_resolve({result: 'REJECTED',\n"
- " info: e.toString()}); }));\n"
- " event.respondWith(\n"
- " new Response(\n"
- " '<title>WAITING</title><script>\\n' +\n"
- " 'navigator.serviceWorker.onmessage = e => {\\n' +\n"
- " ' var div = document.createElement(\\'div\\');\\n' +\n"
- " ' div.appendChild(' +\n"
- " ' document.createTextNode(e.data.info));\\n' +\n"
- " ' document.body.appendChild(div);\\n' +\n"
- " ' document.title = e.data.result;\\n' +\n"
- " ' };\\n' +\n"
- " 'navigator.serviceWorker.controller.postMessage(\\n' +\n"
- " ' null);\\n' +\n"
- " '</script>',"
- " {headers: [['content-type', 'text/html']]}));\n"
- " });\n"
- "self.addEventListener('message', event => {\n"
- " event.waitUntil(\n"
- " preload_promise.then(\n"
- " result => event.source.postMessage(result)));\n"
- " });";
+ " return {result: 'RESOLVED',\n"
+ " info: JSON.stringify(info)}; },\n"
+ " e => { return {result: 'REJECTED',\n"
+ " info: e.toString()}; })\n"
+ " .then(data => {\n"
+ " return new Response(\n"
+ " '<title>' + data.result + '</title>' +\n"
+ " '<body>' + data.info + '</body>',\n"
+ " {headers: [['content-type', 'text/html']]});\n"
+ " }));\n"
+ " });\n";
IN_PROC_BROWSER_TEST_F(ServiceWorkerNavigationPreloadTest, NetworkFallback) {
const char kPageUrl[] = "/service_worker/navigation_preload.html";
@@ -1871,66 +1854,6 @@ IN_PROC_BROWSER_TEST_F(ServiceWorkerNavigationPreloadTest, GetResponseText) {
EXPECT_EQ(1, GetRequestCount(kPageUrl));
}
-IN_PROC_BROWSER_TEST_F(ServiceWorkerNavigationPreloadTest,
- AbortPreloadRequest) {
- const char kPageUrl[] = "/service_worker/navigation_preload.html";
- const char kWorkerUrl[] = "/service_worker/navigation_preload.js";
- const char kPage[] = "<title>ERROR</title>Hello world.";
- // In this script, event.preloadResponse is not guarded by event.waitUntil.
- // So the preload request should be canceled, when the fetch event handler
- // has been executed.
- const std::string kScript =
- kEnableNavigationPreloadScript +
- "var preload_resolve;\n"
- "var preload_promise = new Promise(r => { preload_resolve = r; });\n"
- "self.addEventListener('fetch', event => {\n"
- " event.preloadResponse.then(\n"
- " _ => { preload_resolve({result: 'RESOLVED',\n"
- " info: 'Preload resolved.'}); },\n"
- " e => { preload_resolve({result: 'REJECTED',\n"
- " info: e.toString()}); });\n"
- " event.respondWith(\n"
- " new Response(\n"
- " '<title>WAITING</title><script>\\n' +\n"
- " 'navigator.serviceWorker.onmessage = e => {\\n' +\n"
- " ' var div = document.createElement(\\'div\\');\\n' +\n"
- " ' div.appendChild(' +\n"
- " ' document.createTextNode(e.data.info));\\n' +\n"
- " ' document.body.appendChild(div);\\n' +\n"
- " ' document.title = e.data.result;\\n' +\n"
- " ' };\\n' +\n"
- " 'navigator.serviceWorker.controller.postMessage(\\n' +\n"
- " ' null);\\n' +\n"
- " '</script>',"
- " {headers: [['content-type', 'text/html']]}));\n"
- " });\n"
- "self.addEventListener('message', event => {\n"
- " event.waitUntil(\n"
- " preload_promise.then(\n"
- " result => event.source.postMessage(result)));\n"
- " });";
- const GURL page_url = embedded_test_server()->GetURL(kPageUrl);
- const GURL worker_url = embedded_test_server()->GetURL(kWorkerUrl);
- RegisterStaticFile(kPageUrl, kPage, "text/html");
- RegisterStaticFile(kWorkerUrl, kScript, "text/javascript");
-
- RegisterMonitorRequestHandler();
- StartServerAndNavigateToSetup();
- SetupForNavigationPreloadTest(page_url, worker_url);
-
- const base::string16 title = base::ASCIIToUTF16("REJECTED");
- TitleWatcher title_watcher(shell()->web_contents(), title);
- title_watcher.AlsoWaitForTitle(base::ASCIIToUTF16("RESOLVED"));
- title_watcher.AlsoWaitForTitle(base::ASCIIToUTF16("ERROR"));
- NavigateToURL(shell(), page_url);
- EXPECT_EQ(title, title_watcher.WaitAndGetTitle());
-
- EXPECT_EQ(
- "AbortError: Service Worker navigation preload aborted. Need to guard "
- "with respondWith or waitUntil.",
- GetTextContent());
-}
-
IN_PROC_BROWSER_TEST_F(ServiceWorkerNavigationPreloadTest, NetworkError) {
const char kPageUrl[] = "/service_worker/navigation_preload.html";
const char kWorkerUrl[] = "/service_worker/navigation_preload.js";

Powered by Google App Engine
This is Rietveld 408576698