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

Unified Diff: chrome/browser/prerender/prerender_nostate_prefetch_browsertest.cc

Issue 2575523002: Prerender: Confirm ServiceWorkers are invoked for NoState Prefetch (Closed)
Patch Set: comments 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: chrome/browser/prerender/prerender_nostate_prefetch_browsertest.cc
diff --git a/chrome/browser/prerender/prerender_nostate_prefetch_browsertest.cc b/chrome/browser/prerender/prerender_nostate_prefetch_browsertest.cc
index a14ad92b52bd494d7856eab917ba6c61e43d3f8b..18b9bbe91d4ef1813ac582c57aadbd14669ea028 100644
--- a/chrome/browser/prerender/prerender_nostate_prefetch_browsertest.cc
+++ b/chrome/browser/prerender/prerender_nostate_prefetch_browsertest.cc
@@ -5,6 +5,7 @@
#include "base/command_line.h"
#include "base/strings/string16.h"
#include "base/strings/string_split.h"
+#include "base/strings/utf_string_conversions.h"
#include "base/task_scheduler/post_task.h"
#include "chrome/browser/history/history_service_factory.h"
#include "chrome/browser/history/history_test_utils.h"
@@ -20,6 +21,8 @@
#include "chrome/common/chrome_switches.h"
#include "chrome/grit/generated_resources.h"
#include "chrome/test/base/ui_test_utils.h"
+#include "content/public/browser/service_worker_context.h"
+#include "content/public/browser/storage_partition.h"
#include "content/public/common/url_constants.h"
#include "content/public/test/browser_test_utils.h"
#include "net/base/escape.h"
@@ -33,6 +36,15 @@ using prerender::test_utils::DestructionWaiter;
using prerender::test_utils::RequestCounter;
using prerender::test_utils::TestPrerender;
+namespace {
+
+void ClosureOnUiThread(const base::Closure& callback) {
+ content::BrowserThread::PostTask(content::BrowserThread::UI, FROM_HERE,
+ callback);
+}
+
+} // namespace
+
namespace prerender {
// These URLs used for test resources must be relative with the exception of
@@ -49,6 +61,7 @@ const char kPrefetchResponseHeaderCSP[] =
"prerender/prefetch_response_csp.html";
const char kPrefetchScript[] = "prerender/prefetch.js";
const char kPrefetchScript2[] = "prerender/prefetch2.js";
+const char kServiceWorkerLoader[] = "prerender/service_worker.html";
const char kPrefetchSubresourceRedirectPage[] =
"prerender/prefetch_subresource_redirect.html";
@@ -536,4 +549,36 @@ IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, IssuesIdlePriorityRequests) {
script_counter.WaitForCount(1);
}
+// Checks that a registered ServiceWorker (SW) without a renderer intercepts a
falken 2017/01/06 16:17:55 nit: Does "without a renderer" mean the same thing
mattcary 2017/01/09 14:45:42 Done.
+// prefetch request.
+IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, ServiceWorkerIntercept) {
+ // Register and launch a SW.
+ base::string16 expected_title = base::ASCIIToUTF16("SW READY");
+ content::TitleWatcher title_watcher(GetActiveWebContents(), expected_title);
+ ui_test_utils::NavigateToURL(
+ current_browser(),
+ src_server()->GetURL(MakeAbsolute(kServiceWorkerLoader)));
+ EXPECT_EQ(expected_title, title_watcher.WaitAndGetTitle());
+
+ // Stop the SW renderer process.
falken 2017/01/06 16:17:55 Ditto, I think rather than "stop the renderer proc
+ base::RunLoop run_loop;
+ content::StoragePartition* storage_partation =
falken 2017/01/06 16:17:55 nit: typo for "partition"
mattcary 2017/01/09 14:45:42 Done.
+ content::BrowserContext::GetStoragePartitionForSite(
+ GetActiveWebContents()->GetBrowserContext(),
+ src_server()->GetURL(MakeAbsolute(kPrefetchPng)));
+ storage_partation->GetServiceWorkerContext()
+ ->StopAllServiceWorkersForOriginWithCallback(
+ src_server()->GetURL("/"),
+ base::Bind(&ClosureOnUiThread, run_loop.QuitClosure()));
+ run_loop.Run();
+
+ // The SW intercepts kPrefetchPage and replaces it with a body that contains
+ // an <img> tage for kPrefetchPng. This verifies that the SW ran correctly by
+ // observing the fetch of the image.
+ RequestCounter image_counter;
+ CountRequestFor(kPrefetchPng, &image_counter);
+ PrefetchFromFile(kPrefetchPage, FINAL_STATUS_NOSTATE_PREFETCH_FINISHED);
+ image_counter.WaitForCount(1);
+}
+
} // namespace prerender
« no previous file with comments | « no previous file | chrome/test/data/prerender/service_worker.html » ('j') | chrome/test/data/prerender/service_worker.js » ('J')

Powered by Google App Engine
This is Rietveld 408576698