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

Side by Side Diff: content/browser/service_worker/service_worker_browsertest.cc

Issue 2645493002: Increase the lifetime of Navigation Preload related objects. (Closed)
Patch Set: fix broken-chunked-encoding-worker.js 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 unified diff | Download patch
« no previous file with comments | « no previous file | content/browser/service_worker/service_worker_fetch_dispatcher.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
OLDNEW
« no previous file with comments | « no previous file | content/browser/service_worker/service_worker_fetch_dispatcher.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698