Chromium Code Reviews| 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 |