OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include <stddef.h> | 5 #include <stddef.h> |
6 #include <stdint.h> | 6 #include <stdint.h> |
7 | 7 |
8 #include <map> | 8 #include <map> |
9 #include <memory> | 9 #include <memory> |
10 #include <utility> | 10 #include <utility> |
(...skipping 1853 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1864 TitleWatcher title_watcher(shell()->web_contents(), title); | 1864 TitleWatcher title_watcher(shell()->web_contents(), title); |
1865 NavigateToURL(shell(), page_url); | 1865 NavigateToURL(shell(), page_url); |
1866 EXPECT_EQ(title, title_watcher.WaitAndGetTitle()); | 1866 EXPECT_EQ(title, title_watcher.WaitAndGetTitle()); |
1867 EXPECT_EQ("Hello world.", GetTextContent()); | 1867 EXPECT_EQ("Hello world.", GetTextContent()); |
1868 | 1868 |
1869 // The page request must be sent only once, since the worker responded with | 1869 // The page request must be sent only once, since the worker responded with |
1870 // "Hello world". | 1870 // "Hello world". |
1871 EXPECT_EQ(1, GetRequestCount(kPageUrl)); | 1871 EXPECT_EQ(1, GetRequestCount(kPageUrl)); |
1872 } | 1872 } |
1873 | 1873 |
1874 IN_PROC_BROWSER_TEST_F(ServiceWorkerNavigationPreloadTest, | |
1875 AbortPreloadRequest) { | |
1876 const char kPageUrl[] = "/service_worker/navigation_preload.html"; | |
1877 const char kWorkerUrl[] = "/service_worker/navigation_preload.js"; | |
1878 const char kPage[] = "<title>ERROR</title>Hello world."; | |
1879 // In this script, event.preloadResponse is not guarded by event.waitUntil. | |
1880 // So the preload request should be canceled, when the fetch event handler | |
1881 // has been executed. | |
1882 const std::string kScript = | |
1883 kEnableNavigationPreloadScript + | |
1884 "var preload_resolve;\n" | |
1885 "var preload_promise = new Promise(r => { preload_resolve = r; });\n" | |
1886 "self.addEventListener('fetch', event => {\n" | |
1887 " event.preloadResponse.then(\n" | |
1888 " _ => { preload_resolve({result: 'RESOLVED',\n" | |
1889 " info: 'Preload resolved.'}); },\n" | |
1890 " e => { preload_resolve({result: 'REJECTED',\n" | |
1891 " info: e.toString()}); });\n" | |
1892 " event.respondWith(\n" | |
1893 " new Response(\n" | |
1894 " '<title>WAITING</title><script>\\n' +\n" | |
1895 " 'navigator.serviceWorker.onmessage = e => {\\n' +\n" | |
1896 " ' var div = document.createElement(\\'div\\');\\n' +\n" | |
1897 " ' div.appendChild(' +\n" | |
1898 " ' document.createTextNode(e.data.info));\\n' +\n" | |
1899 " ' document.body.appendChild(div);\\n' +\n" | |
1900 " ' document.title = e.data.result;\\n' +\n" | |
1901 " ' };\\n' +\n" | |
1902 " 'navigator.serviceWorker.controller.postMessage(\\n' +\n" | |
1903 " ' null);\\n' +\n" | |
1904 " '</script>'," | |
1905 " {headers: [['content-type', 'text/html']]}));\n" | |
1906 " });\n" | |
1907 "self.addEventListener('message', event => {\n" | |
1908 " event.waitUntil(\n" | |
1909 " preload_promise.then(\n" | |
1910 " result => event.source.postMessage(result)));\n" | |
1911 " });"; | |
1912 const GURL page_url = embedded_test_server()->GetURL(kPageUrl); | |
1913 const GURL worker_url = embedded_test_server()->GetURL(kWorkerUrl); | |
1914 RegisterStaticFile(kPageUrl, kPage, "text/html"); | |
1915 RegisterStaticFile(kWorkerUrl, kScript, "text/javascript"); | |
1916 | |
1917 RegisterMonitorRequestHandler(); | |
1918 StartServerAndNavigateToSetup(); | |
1919 SetupForNavigationPreloadTest(page_url, worker_url); | |
1920 | |
1921 const base::string16 title = base::ASCIIToUTF16("REJECTED"); | |
1922 TitleWatcher title_watcher(shell()->web_contents(), title); | |
1923 title_watcher.AlsoWaitForTitle(base::ASCIIToUTF16("RESOLVED")); | |
1924 title_watcher.AlsoWaitForTitle(base::ASCIIToUTF16("ERROR")); | |
1925 NavigateToURL(shell(), page_url); | |
1926 EXPECT_EQ(title, title_watcher.WaitAndGetTitle()); | |
1927 | |
1928 EXPECT_EQ( | |
1929 "AbortError: Service Worker navigation preload aborted. Need to guard " | |
1930 "with respondWith or waitUntil.", | |
1931 GetTextContent()); | |
1932 } | |
1933 | |
1934 IN_PROC_BROWSER_TEST_F(ServiceWorkerNavigationPreloadTest, NetworkError) { | 1874 IN_PROC_BROWSER_TEST_F(ServiceWorkerNavigationPreloadTest, NetworkError) { |
1935 const char kPageUrl[] = "/service_worker/navigation_preload.html"; | 1875 const char kPageUrl[] = "/service_worker/navigation_preload.html"; |
1936 const char kWorkerUrl[] = "/service_worker/navigation_preload.js"; | 1876 const char kWorkerUrl[] = "/service_worker/navigation_preload.js"; |
1937 const GURL page_url = embedded_test_server()->GetURL(kPageUrl); | 1877 const GURL page_url = embedded_test_server()->GetURL(kPageUrl); |
1938 const GURL worker_url = embedded_test_server()->GetURL(kWorkerUrl); | 1878 const GURL worker_url = embedded_test_server()->GetURL(kWorkerUrl); |
1939 RegisterStaticFile( | 1879 RegisterStaticFile( |
1940 kWorkerUrl, kEnableNavigationPreloadScript + kPreloadResponseTestScript, | 1880 kWorkerUrl, kEnableNavigationPreloadScript + kPreloadResponseTestScript, |
1941 "text/javascript"); | 1881 "text/javascript"); |
1942 | 1882 |
1943 RegisterMonitorRequestHandler(); | 1883 RegisterMonitorRequestHandler(); |
(...skipping 1052 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2996 // effect in CanSuspendRenderer(). | 2936 // effect in CanSuspendRenderer(). |
2997 shell()->web_contents()->WasHidden(); | 2937 shell()->web_contents()->WasHidden(); |
2998 EXPECT_TRUE(rph->IsProcessBackgrounded()); | 2938 EXPECT_TRUE(rph->IsProcessBackgrounded()); |
2999 | 2939 |
3000 // The process which has service worker thread shouldn't be suspended. | 2940 // The process which has service worker thread shouldn't be suspended. |
3001 EXPECT_FALSE(memory_coordinator->CanSuspendRenderer(render_process_id)); | 2941 EXPECT_FALSE(memory_coordinator->CanSuspendRenderer(render_process_id)); |
3002 } | 2942 } |
3003 #endif | 2943 #endif |
3004 | 2944 |
3005 } // namespace content | 2945 } // namespace content |
OLD | NEW |