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 9b2189a3f1a410b590a172164d0d355073abbfa1..bf62e063391cbf2b957c0636fe12fa46b4155883 100644 |
--- a/content/browser/service_worker/service_worker_browsertest.cc |
+++ b/content/browser/service_worker/service_worker_browsertest.cc |
@@ -50,6 +50,7 @@ |
#include "content/public/browser/navigation_entry.h" |
#include "content/public/browser/render_process_host.h" |
#include "content/public/browser/render_view_host.h" |
+#include "content/public/browser/resource_dispatcher_host.h" |
#include "content/public/browser/ssl_status.h" |
#include "content/public/browser/storage_partition.h" |
#include "content/public/browser/web_contents.h" |
@@ -1467,6 +1468,16 @@ class ServiceWorkerNavigationPreloadTest : public ServiceWorkerBrowserTest { |
return request.headers.find(kNavigationPreloadHeaderName)->second; |
} |
+ static void CancellingInterceptorCallback( |
+ const std::string& header, |
+ const std::string& value, |
+ int child_process_id, |
+ content::ResourceContext* resource_context, |
+ OnHeaderProcessedCallback callback) { |
+ DCHECK_EQ(kNavigationPreloadHeaderName, header); |
+ callback.Run(false, 0); |
+ } |
+ |
void SetupForNavigationPreloadTest(const GURL& scope, |
const GURL& worker_url) { |
scoped_refptr<WorkerActivatedObserver> observer = |
@@ -1935,6 +1946,33 @@ IN_PROC_BROWSER_TEST_P(ServiceWorkerNavigationPreloadTest, NetworkError) { |
} |
IN_PROC_BROWSER_TEST_P(ServiceWorkerNavigationPreloadTest, |
+ CanceledByInterceptor) { |
+ content::ResourceDispatcherHost::Get()->RegisterInterceptor( |
+ kNavigationPreloadHeaderName, "", |
+ base::Bind(&CancellingInterceptorCallback)); |
+ |
+ const char kPageUrl[] = "/service_worker/navigation_preload.html"; |
+ const char kWorkerUrl[] = "/service_worker/navigation_preload.js"; |
+ const GURL page_url = embedded_test_server()->GetURL(kPageUrl); |
+ const GURL worker_url = embedded_test_server()->GetURL(kWorkerUrl); |
+ RegisterStaticFile( |
+ kWorkerUrl, kEnableNavigationPreloadScript + kPreloadResponseTestScript, |
+ "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")); |
+ NavigateToURL(shell(), page_url); |
+ EXPECT_EQ(title, title_watcher.WaitAndGetTitle()); |
+ EXPECT_EQ("NetworkError: Service Worker navigation preload network error.", |
+ GetTextContent()); |
+} |
+ |
+IN_PROC_BROWSER_TEST_P(ServiceWorkerNavigationPreloadTest, |
PreloadHeadersSimple) { |
const char kPageUrl[] = "/service_worker/navigation_preload.html"; |
const char kWorkerUrl[] = "/service_worker/navigation_preload.js"; |