| 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 |