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

Side by Side Diff: content/browser/worker_host/test/worker_browsertest.cc

Issue 9802025: Rewrite HTML5 workers ui_tests to browser_tests. Compared to ui_tests, browser_tests are faster, le… (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: sync to revision with blank line at end of worker-utils.js to see if this patches on bots Created 8 years, 9 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 | Annotate | Revision Log
« no previous file with comments | « content/browser/worker_host/test/OWNERS ('k') | content/test/layout_browsertest.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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "base/bind.h"
5 #include "base/file_path.h" 6 #include "base/file_path.h"
7 #include "base/path_service.h"
8 #include "base/stringprintf.h"
6 #include "base/string_util.h" 9 #include "base/string_util.h"
7 #include "base/test/test_timeouts.h" 10 #include "base/test/test_timeouts.h"
8 #include "base/threading/platform_thread.h" 11 #include "base/utf_string_conversions.h"
9 #include "chrome/app/chrome_command_ids.h" 12 #include "chrome/browser/ui/browser.h"
10 #include "chrome/test/automation/automation_proxy.h"
11 #include "chrome/test/automation/browser_proxy.h"
12 #include "chrome/test/automation/tab_proxy.h"
13 #include "chrome/test/base/layout_test_http_server.h"
14 #include "chrome/test/base/ui_test_utils.h" 13 #include "chrome/test/base/ui_test_utils.h"
15 #include "chrome/test/ui/ui_layout_test.h" 14 #include "content/browser/worker_host/worker_process_host.h"
16 #include "content/browser/worker_host/worker_service_impl.h" 15 #include "content/browser/worker_host/worker_service_impl.h"
17 #include "content/public/common/url_constants.h" 16 #include "content/public/browser/browser_thread.h"
18 #include "net/test/test_server.h" 17 #include "content/public/common/content_paths.h"
19 18 #include "content/test/layout_browsertest.h"
19 #include "googleurl/src/gurl.h"
20
21 using content::BrowserThread;
20 using content::WorkerServiceImpl; 22 using content::WorkerServiceImpl;
21 23
22 namespace { 24 class WorkerLayoutTest : public InProcessBrowserLayoutTest {
23 25 public:
24 const char kTestCompleteCookie[] = "status"; 26 WorkerLayoutTest() : InProcessBrowserLayoutTest(
25 const char kTestCompleteSuccess[] = "OK"; 27 FilePath(), FilePath().AppendASCII("fast").AppendASCII("workers")) {
26 const FilePath::CharType* kTestDir = 28 }
27 FILE_PATH_LITERAL("workers"); 29 virtual void SetUpInProcessBrowserTestFixture() OVERRIDE {
28 const FilePath::CharType* kManySharedWorkersFile = 30 InProcessBrowserLayoutTest::SetUpInProcessBrowserTestFixture();
29 FILE_PATH_LITERAL("many_shared_workers.html"); 31 AddResourceForLayoutTest(
30 const FilePath::CharType* kQuerySharedWorkerShutdownFile = 32 FilePath().AppendASCII("fast").AppendASCII("js"),
31 FILE_PATH_LITERAL("queued_shared_worker_shutdown.html"); 33 FilePath().AppendASCII("resources"));
32 const FilePath::CharType* kShutdownSharedWorkerFile = 34 }
33 FILE_PATH_LITERAL("shutdown_shared_worker.html"); 35 };
34 const FilePath::CharType* kSingleSharedWorkersFile =
35 FILE_PATH_LITERAL("single_shared_worker.html");
36 const FilePath::CharType* kWorkerClose =
37 FILE_PATH_LITERAL("worker_close.html");
38
39 } // anonymous namespace
40
41 class WorkerTest : public UILayoutTest {
42 protected:
43 virtual ~WorkerTest() { }
44
45 void RunTest(const FilePath& test_case, const std::string& query) {
46 scoped_refptr<TabProxy> tab(GetActiveTab());
47 ASSERT_TRUE(tab.get());
48
49 FilePath test_file_path = ui_test_utils::GetTestFilePath(
50 FilePath(kTestDir), test_case);
51 GURL url = ui_test_utils::GetFileUrlWithQuery(test_file_path, query);
52 ASSERT_TRUE(tab->NavigateToURL(url));
53
54 std::string value = WaitUntilCookieNonEmpty(tab.get(), url,
55 kTestCompleteCookie, TestTimeouts::action_max_timeout_ms());
56 ASSERT_STREQ(kTestCompleteSuccess, value.c_str());
57 }
58
59 void RunIncognitoTest(const FilePath& test_case) {
60 scoped_refptr<BrowserProxy> browser(automation()->GetBrowserWindow(0));
61 ASSERT_TRUE(browser.get());
62
63 // Open an Incognito window.
64 ASSERT_TRUE(browser->RunCommand(IDC_NEW_INCOGNITO_WINDOW));
65 scoped_refptr<BrowserProxy> incognito(automation()->GetBrowserWindow(1));
66 ASSERT_TRUE(incognito.get());
67 int window_count;
68 ASSERT_TRUE(automation()->GetBrowserWindowCount(&window_count));
69 ASSERT_EQ(2, window_count);
70
71 scoped_refptr<TabProxy> tab(incognito->GetTab(0));
72 ASSERT_TRUE(tab.get());
73
74 GURL url = ui_test_utils::GetTestUrl(FilePath(kTestDir), test_case);
75 ASSERT_TRUE(tab->NavigateToURL(url));
76
77 std::string value = WaitUntilCookieNonEmpty(tab.get(), url,
78 kTestCompleteCookie, TestTimeouts::action_max_timeout_ms());
79
80 // Close the incognito window
81 ASSERT_TRUE(incognito->RunCommand(IDC_CLOSE_WINDOW));
82 ASSERT_TRUE(automation()->GetBrowserWindowCount(&window_count));
83 ASSERT_EQ(1, window_count);
84
85 ASSERT_STREQ(kTestCompleteSuccess, value.c_str());
86 }
87
88 bool WaitForProcessCountToBeAtLeast(int tabs, int workers) {
89 // The 1 is for the browser process.
90 int number_of_processes = 1 + workers + tabs;
91 #if defined(OS_POSIX) && !defined(OS_MACOSX)
92 // On Unix, we also have a zygote process and a sandbox host process.
93 number_of_processes += 2;
94 #endif
95
96 int cur_process_count;
97 for (int i = 0; i < 100; ++i) {
98 cur_process_count = 0;
99 if (!GetBrowserProcessCount(&cur_process_count))
100 return false;
101 if (cur_process_count >= number_of_processes)
102 return true;
103
104 // Sometimes the worker processes can take a while to shut down on the
105 // bots, so use a longer timeout period to avoid spurious failures.
106 base::PlatformThread::Sleep(TestTimeouts::action_max_timeout() / 100);
107 }
108
109 EXPECT_GE(cur_process_count, number_of_processes);
110 return false;
111 }
112
113 void RunWorkerFastLayoutTest(const std::string& test_case_file_name) {
114 FilePath fast_test_dir;
115 fast_test_dir = fast_test_dir.AppendASCII("fast");
116
117 FilePath worker_test_dir;
118 worker_test_dir = worker_test_dir.AppendASCII("workers");
119 InitializeForLayoutTest(fast_test_dir, worker_test_dir, kNoHttpPort);
120
121 // Worker tests also rely on common files in js/resources.
122 FilePath js_dir = fast_test_dir.AppendASCII("js");
123 FilePath resource_dir;
124 resource_dir = resource_dir.AppendASCII("resources");
125 AddResourceForLayoutTest(js_dir, resource_dir);
126
127 printf("Test: %s\n", test_case_file_name.c_str());
128 RunLayoutTest(test_case_file_name, kNoHttpPort);
129
130 // Navigate to a blank page so that any workers are cleaned up.
131 // This helps leaks trackers do a better job of reporting.
132 scoped_refptr<TabProxy> tab(GetActiveTab());
133 GURL about_url(chrome::kAboutBlankURL);
134 EXPECT_EQ(AUTOMATION_MSG_NAVIGATION_SUCCESS, tab->NavigateToURL(about_url));
135 }
136
137 void RunWorkerStorageLayoutTest(const std::string& test_case_file_name) {
138 FilePath worker_test_dir;
139 worker_test_dir = worker_test_dir.AppendASCII("fast");
140 worker_test_dir = worker_test_dir.AppendASCII("workers");
141
142 FilePath storage_test_dir;
143 storage_test_dir = storage_test_dir.AppendASCII("storage");
144 InitializeForLayoutTest(worker_test_dir, storage_test_dir, kNoHttpPort);
145
146 // Storage worker tests also rely on common files in 'resources'.
147 FilePath resource_dir;
148 resource_dir = resource_dir.AppendASCII("resources");
149 AddResourceForLayoutTest(worker_test_dir.Append(storage_test_dir),
150 resource_dir);
151
152 printf("Test: %s\n", test_case_file_name.c_str());
153 RunLayoutTest(test_case_file_name, kNoHttpPort);
154
155 // Navigate to a blank page so that any workers are cleaned up.
156 // This helps leaks trackers do a better job of reporting.
157 scoped_refptr<TabProxy> tab(GetActiveTab());
158 GURL about_url(chrome::kAboutBlankURL);
159 EXPECT_EQ(AUTOMATION_MSG_NAVIGATION_SUCCESS, tab->NavigateToURL(about_url));
160 }
161
162 bool NavigateAndWaitForAuth(TabProxy* tab, const GURL& url) {
163 // Pass a large number of navigations to tell the tab to block until an auth
164 // dialog pops up.
165 EXPECT_EQ(AUTOMATION_MSG_NAVIGATION_AUTH_NEEDED,
166 tab->NavigateToURLBlockUntilNavigationsComplete(url, 100));
167 return tab->NeedsAuth();
168 }
169 };
170
171
172 TEST_F(WorkerTest, SingleWorker) {
173 RunTest(FilePath(FILE_PATH_LITERAL("single_worker.html")), "");
174 }
175
176 TEST_F(WorkerTest, MultipleWorkers) {
177 RunTest(FilePath(FILE_PATH_LITERAL("multi_worker.html")), "");
178 }
179
180 TEST_F(WorkerTest, SingleSharedWorker) {
181 RunTest(FilePath(FILE_PATH_LITERAL("single_worker.html")), "shared=true");
182 }
183
184 // Flaky on Win XP only. http://crbug.com/96435
185 #if defined(OS_WIN)
186 #define MultipleSharedWorkers DISABLED_MultipleSharedWorkers
187 #endif
188 TEST_F(WorkerTest, MultipleSharedWorkers) {
189 RunTest(FilePath(FILE_PATH_LITERAL("multi_worker.html")), "shared=true");
190 }
191
192 #if defined(OS_LINUX) || defined(OS_CHROMEOS)
193 // http://crbug.com/80446
194 #define DISABLED_TerminateQueuedWorkers DISABLED_TerminateQueuedWorkers
195 #endif
196 TEST_F(WorkerTest, DISABLED_TerminateQueuedWorkers) {
197 ASSERT_TRUE(WaitForProcessCountToBeAtLeast(1, 0));
198 RunTest(FilePath(FILE_PATH_LITERAL("terminate_queued_workers.html")), "");
199 // Make sure all workers exit.
200 ASSERT_TRUE(WaitForProcessCountToBeAtLeast(1, 0));
201 }
202
203 #if defined(OS_LINUX)
204 // http://crbug.com/30021
205 #define IncognitoSharedWorkers DISABLED_IncognitoSharedWorkers
206 #endif
207 // Incognito windows should not share workers with non-incognito windows
208 TEST_F(WorkerTest, IncognitoSharedWorkers) {
209 // Load a non-incognito tab and have it create a shared worker
210 RunTest(FilePath(FILE_PATH_LITERAL("incognito_worker.html")), "");
211 // Incognito worker should not share with non-incognito
212 RunIncognitoTest(FilePath(FILE_PATH_LITERAL("incognito_worker.html")));
213 }
214
215 const FilePath::CharType kDocRoot[] =
216 FILE_PATH_LITERAL("chrome/test/data/workers");
217
218 #if defined(OS_WIN)
219 // http://crbug.com/33344 - NavigateAndWaitForAuth times out on the Windows
220 // build bots.
221 #define WorkerHttpAuth DISABLED_WorkerHttpAuth
222 #endif
223 // Make sure that auth dialog is displayed from worker context.
224 TEST_F(WorkerTest, WorkerHttpAuth) {
225 net::TestServer test_server(net::TestServer::TYPE_HTTP,
226 net::TestServer::kLocalhost,
227 FilePath(kDocRoot));
228 ASSERT_TRUE(test_server.Start());
229
230 scoped_refptr<TabProxy> tab(GetActiveTab());
231 ASSERT_TRUE(tab.get());
232
233 GURL url = test_server.GetURL("files/worker_auth.html");
234 EXPECT_TRUE(NavigateAndWaitForAuth(tab, url));
235 }
236
237 #if defined(OS_WIN)
238 // http://crbug.com/33344 - NavigateAndWaitForAuth times out on the Windows
239 // build bots.
240 #define SharedWorkerHttpAuth DISABLED_SharedWorkerHttpAuth
241 #endif
242 // Make sure that auth dialog is displayed from shared worker context.
243 TEST_F(WorkerTest, DISABLED_SharedWorkerHttpAuth) {
244 net::TestServer test_server(net::TestServer::TYPE_HTTP,
245 net::TestServer::kLocalhost,
246 FilePath(kDocRoot));
247 ASSERT_TRUE(test_server.Start());
248
249 scoped_refptr<TabProxy> tab(GetActiveTab());
250 ASSERT_TRUE(tab.get());
251
252 GURL url = test_server.GetURL("files/shared_worker_auth.html");
253 EXPECT_TRUE(NavigateAndWaitForAuth(tab, url));
254 // TODO(atwilson): Add support to automation framework to test for auth
255 // dialogs displayed by non-navigating tabs.
256 }
257 36
258 // Crashy, http://crbug.com/35965. 37 // Crashy, http://crbug.com/35965.
259 // Flaky, http://crbug.com/36555. 38 // Flaky, http://crbug.com/36555.
260 TEST_F(WorkerTest, DISABLED_WorkerClonePort) { 39 IN_PROC_BROWSER_TEST_F(WorkerLayoutTest, SLOW_WorkerClonePort) {
261 RunWorkerFastLayoutTest("worker-cloneport.html"); 40 RunLayoutTest("worker-cloneport.html");
262 } 41 }
263 42
264 // http://crbug.com/101996 (started flaking with WebKit roll 98537:98582). 43 // http://crbug.com/101996 (started flaking with WebKit roll 98537:98582).
265 TEST_F(WorkerTest, DISABLED_WorkerContextMultiPort) { 44 IN_PROC_BROWSER_TEST_F(WorkerLayoutTest, WorkerContextMultiPort) {
266 RunWorkerFastLayoutTest("worker-context-multi-port.html"); 45 RunLayoutTest("worker-context-multi-port.html");
267 } 46 }
268 47
269 TEST_F(WorkerTest, WorkerMessagePort) { 48 IN_PROC_BROWSER_TEST_F(WorkerLayoutTest, WorkerMessagePort) {
270 RunWorkerFastLayoutTest("worker-messageport.html"); 49 RunLayoutTest("worker-messageport.html");
271 } 50 }
272 51
273 TEST_F(WorkerTest, WorkerMessagePortGC) { 52 IN_PROC_BROWSER_TEST_F(WorkerLayoutTest, WorkerMessagePortGC) {
274 RunWorkerFastLayoutTest("worker-messageport-gc.html"); 53 RunLayoutTest("worker-messageport-gc.html");
275 } 54 }
276 55
277 // http://crbug.com/101996 (started flaking with WebKit roll 98537:98582). 56 // http://crbug.com/101996 (started flaking with WebKit roll 98537:98582).
278 TEST_F(WorkerTest, DISABLED_WorkerMultiPort) { 57 IN_PROC_BROWSER_TEST_F(WorkerLayoutTest, WorkerMultiPort) {
279 RunWorkerFastLayoutTest("worker-multi-port.html"); 58 RunLayoutTest("worker-multi-port.html");
280 } 59 }
281 60
282 // 61 //
283 // SharedWorkerFastLayoutTests 62 // SharedWorkerFastLayoutTests
284 // 63 //
285 TEST_F(WorkerTest, SharedWorkerFastConstructor) { 64 IN_PROC_BROWSER_TEST_F(WorkerLayoutTest, SharedWorkerFastConstructor) {
286 RunWorkerFastLayoutTest("shared-worker-constructor.html"); 65 RunLayoutTest("shared-worker-constructor.html");
287 } 66 }
288 67
289 TEST_F(WorkerTest, SharedWorkerFastContextGC) { 68 IN_PROC_BROWSER_TEST_F(WorkerLayoutTest, SharedWorkerFastContextGC) {
290 RunWorkerFastLayoutTest("shared-worker-context-gc.html"); 69 RunLayoutTest("shared-worker-context-gc.html");
291 } 70 }
292 71
293 TEST_F(WorkerTest, SharedWorkerFastEventListener) { 72 IN_PROC_BROWSER_TEST_F(WorkerLayoutTest, SharedWorkerFastEventListener) {
294 RunWorkerFastLayoutTest("shared-worker-event-listener.html"); 73 RunLayoutTest("shared-worker-event-listener.html");
295 } 74 }
296 75
297 TEST_F(WorkerTest, SharedWorkerFastException) { 76 IN_PROC_BROWSER_TEST_F(WorkerLayoutTest, SharedWorkerFastException) {
298 RunWorkerFastLayoutTest("shared-worker-exception.html"); 77 RunLayoutTest("shared-worker-exception.html");
299 } 78 }
300 79
301 TEST_F(WorkerTest, SharedWorkerFastGC) { 80 IN_PROC_BROWSER_TEST_F(WorkerLayoutTest, SharedWorkerFastGC) {
302 RunWorkerFastLayoutTest("shared-worker-gc.html"); 81 RunLayoutTest("shared-worker-gc.html");
303 } 82 }
304 83
305 TEST_F(WorkerTest, SharedWorkerFastInIframe) { 84 IN_PROC_BROWSER_TEST_F(WorkerLayoutTest, SharedWorkerFastInIframe) {
306 RunWorkerFastLayoutTest("shared-worker-in-iframe.html"); 85 RunLayoutTest("shared-worker-in-iframe.html");
307 } 86 }
308 87
309 TEST_F(WorkerTest, SharedWorkerFastLoadError) { 88 IN_PROC_BROWSER_TEST_F(WorkerLayoutTest, SharedWorkerFastLoadError) {
310 RunWorkerFastLayoutTest("shared-worker-load-error.html"); 89 RunLayoutTest("shared-worker-load-error.html");
311 } 90 }
312 91
313 TEST_F(WorkerTest, SharedWorkerFastLocation) { 92 IN_PROC_BROWSER_TEST_F(WorkerLayoutTest, SharedWorkerFastLocation) {
314 RunWorkerFastLayoutTest("shared-worker-location.html"); 93 RunLayoutTest("shared-worker-location.html");
315 } 94 }
316 95
317 TEST_F(WorkerTest, SharedWorkerFastName) { 96 IN_PROC_BROWSER_TEST_F(WorkerLayoutTest, SharedWorkerFastName) {
318 RunWorkerFastLayoutTest("shared-worker-name.html"); 97 RunLayoutTest("shared-worker-name.html");
319 } 98 }
320 99
321 TEST_F(WorkerTest, SharedWorkerFastNavigator) { 100 IN_PROC_BROWSER_TEST_F(WorkerLayoutTest, SharedWorkerFastNavigator) {
322 RunWorkerFastLayoutTest("shared-worker-navigator.html"); 101 RunLayoutTest("shared-worker-navigator.html");
323 } 102 }
324 103
325 TEST_F(WorkerTest, SharedWorkerFastReplaceGlobalConstructor) { 104 IN_PROC_BROWSER_TEST_F(WorkerLayoutTest,
326 RunWorkerFastLayoutTest("shared-worker-replace-global-constructor.html"); 105 SharedWorkerFastReplaceGlobalConstructor) {
327 } 106 RunLayoutTest("shared-worker-replace-global-constructor.html");
328 107 }
329 TEST_F(WorkerTest, SharedWorkerFastReplaceSelf) { 108
330 RunWorkerFastLayoutTest("shared-worker-replace-self.html"); 109 IN_PROC_BROWSER_TEST_F(WorkerLayoutTest, SharedWorkerFastReplaceSelf) {
331 } 110 RunLayoutTest("shared-worker-replace-self.html");
332 111 }
333 TEST_F(WorkerTest, SharedWorkerFastScriptError) { 112
334 RunWorkerFastLayoutTest("shared-worker-script-error.html"); 113 IN_PROC_BROWSER_TEST_F(WorkerLayoutTest, SharedWorkerFastScriptError) {
335 } 114 RunLayoutTest("shared-worker-script-error.html");
336 115 }
337 TEST_F(WorkerTest, SharedWorkerFastShared) { 116
338 RunWorkerFastLayoutTest("shared-worker-shared.html"); 117 IN_PROC_BROWSER_TEST_F(WorkerLayoutTest, SharedWorkerFastShared) {
339 } 118 RunLayoutTest("shared-worker-shared.html");
340 119 }
341 TEST_F(WorkerTest, SharedWorkerFastSimple) { 120
342 RunWorkerFastLayoutTest("shared-worker-simple.html"); 121 IN_PROC_BROWSER_TEST_F(WorkerLayoutTest, SharedWorkerFastSimple) {
343 } 122 RunLayoutTest("shared-worker-simple.html");
344 123 }
345 // http://crbug.com/16934 124
346 TEST_F(WorkerTest, DISABLED_WorkerHttpLayoutTests) { 125 class MessagePortTest : public InProcessBrowserLayoutTest {
126 public:
127 MessagePortTest() : InProcessBrowserLayoutTest(
128 FilePath(), FilePath().AppendASCII("fast").AppendASCII("events")) {
129 }
130 virtual void SetUpInProcessBrowserTestFixture() OVERRIDE {
131 InProcessBrowserLayoutTest::SetUpInProcessBrowserTestFixture();
132 AddResourceForLayoutTest(
133 FilePath().AppendASCII("fast").AppendASCII("js"),
134 FilePath().AppendASCII("resources"));
135 }
136 };
137
138 // Flaky, http://crbug.com/34996.
139 IN_PROC_BROWSER_TEST_F(MessagePortTest, Tests) {
347 static const char* kLayoutTestFiles[] = { 140 static const char* kLayoutTestFiles[] = {
348 "shared-worker-importScripts.html", 141 "message-channel-gc.html",
349 "shared-worker-redirect.html", 142 "message-channel-gc-2.html",
350 // flakey? BUG 16934 "text-encoding.html", 143 "message-channel-gc-3.html",
144 "message-channel-gc-4.html",
145 "message-port.html",
146 "message-port-clone.html",
147 "message-port-constructor-for-deleted-document.html",
148 "message-port-deleted-document.html",
149 "message-port-deleted-frame.html",
150 "message-port-inactive-document.html",
151 "message-port-multi.html",
152 "message-port-no-wrapper.html",
153 // Only works with run-webkit-tests --leaks.
154 // "message-channel-listener-circular-ownership.html",
155 };
156
157 for (size_t i = 0; i < arraysize(kLayoutTestFiles); ++i)
158 RunLayoutTest(kLayoutTestFiles[i]);
159 }
160
161
162 class WorkerHttpLayoutTest : public InProcessBrowserLayoutTest {
163 public:
164 // The resources for these tests hardcode 8000, so must use that here. If
165 // multiple tests which use it run in parallel, then the test will fail but
166 // it'll run again at the end in serial and pass.
167 WorkerHttpLayoutTest() : InProcessBrowserLayoutTest(
168 FilePath().AppendASCII("http").AppendASCII("tests"),
169 FilePath().AppendASCII("workers"),
170 8000) {
171 }
172 virtual void SetUpInProcessBrowserTestFixture() OVERRIDE {
173 InProcessBrowserLayoutTest::SetUpInProcessBrowserTestFixture();
174 AddResourceForLayoutTest(
175 FilePath().AppendASCII("http").AppendASCII("tests"),
176 FilePath().AppendASCII("resources"));
177 }
178 };
179
180 IN_PROC_BROWSER_TEST_F(WorkerHttpLayoutTest, Tests) {
181 static const char* kLayoutTestFiles[] = {
182 "shared-worker-importScripts.html",
183 "shared-worker-redirect.html",
184 "text-encoding.html",
351 #if defined(OS_WIN) 185 #if defined(OS_WIN)
352 // Fails on the mac (and linux?): 186 // Fails on the mac (and linux?):
353 // http://code.google.com/p/chromium/issues/detail?id=22599 187 // http://code.google.com/p/chromium/issues/detail?id=22599
354 "worker-importScripts.html", 188 "worker-importScripts.html",
355 #endif 189 #endif
356 "worker-redirect.html", 190 "worker-redirect.html",
357 }; 191 };
358 192
359 FilePath http_test_dir;
360 http_test_dir = http_test_dir.AppendASCII("http");
361 http_test_dir = http_test_dir.AppendASCII("tests");
362
363 FilePath worker_test_dir;
364 worker_test_dir = worker_test_dir.AppendASCII("workers");
365 InitializeForLayoutTest(http_test_dir, worker_test_dir, kHttpPort);
366
367 LayoutTestHttpServer http_server(new_http_root_dir_, kHttpPort);
368 ASSERT_TRUE(http_server.Start());
369 for (size_t i = 0; i < arraysize(kLayoutTestFiles); ++i) 193 for (size_t i = 0; i < arraysize(kLayoutTestFiles); ++i)
370 RunLayoutTest(kLayoutTestFiles[i], kHttpPort); 194 RunHttpLayoutTest(kLayoutTestFiles[i]);
371 ASSERT_TRUE(http_server.Stop()); 195 }
372 } 196
373 197 class WorkerXHRHttpLayoutTest : public InProcessBrowserLayoutTest {
374 TEST_F(WorkerTest, WorkerWebSocketLayoutTests) { 198 public:
375 static const char* kLayoutTestFiles[] = { 199 WorkerXHRHttpLayoutTest() : InProcessBrowserLayoutTest(
376 "close-in-onmessage-crash.html", 200 FilePath().AppendASCII("http").AppendASCII("tests"),
377 "close-in-shared-worker.html", 201 FilePath().AppendASCII("xmlhttprequest").AppendASCII("workers"),
378 "close-in-worker.html", 202 -1) {
379 "shared-worker-simple.html", 203 }
380 "worker-handshake-challenge-randomness.html", 204 virtual void SetUpInProcessBrowserTestFixture() OVERRIDE {
381 "worker-simple.html" 205 InProcessBrowserLayoutTest::SetUpInProcessBrowserTestFixture();
382 }; 206 AddResourceForLayoutTest(
383 207 FilePath().AppendASCII("http").AppendASCII("tests"),
384 FilePath websocket_test_dir; 208 FilePath().AppendASCII("workers").AppendASCII("resources"));
385 websocket_test_dir = websocket_test_dir.AppendASCII("http"); 209 }
386 websocket_test_dir = websocket_test_dir.AppendASCII("tests"); 210 };
387 211
388 FilePath worker_test_dir; 212 IN_PROC_BROWSER_TEST_F(WorkerXHRHttpLayoutTest, Tests) {
389 worker_test_dir = worker_test_dir.AppendASCII("websocket");
390 worker_test_dir = worker_test_dir.AppendASCII("tests");
391 worker_test_dir = worker_test_dir.AppendASCII("hybi");
392 worker_test_dir = worker_test_dir.AppendASCII("workers");
393 InitializeForLayoutTest(websocket_test_dir, worker_test_dir, kHttpPort);
394
395 FilePath websocket_root_dir(temp_test_dir_);
396 websocket_root_dir = websocket_root_dir.AppendASCII("LayoutTests");
397 ui_test_utils::TestWebSocketServer websocket_server;
398 ASSERT_TRUE(websocket_server.Start(websocket_root_dir));
399
400 LayoutTestHttpServer http_server(new_http_root_dir_, kHttpPort);
401 ASSERT_TRUE(http_server.Start());
402 for (size_t i = 0; i < arraysize(kLayoutTestFiles); ++i)
403 RunLayoutTest(kLayoutTestFiles[i], kHttpPort);
404 ASSERT_TRUE(http_server.Stop());
405 }
406
407 TEST_F(WorkerTest, DISABLED_WorkerXhrHttpLayoutTests) {
408 static const char* kLayoutTestFiles[] = { 213 static const char* kLayoutTestFiles[] = {
409 "abort-exception-assert.html", 214 "abort-exception-assert.html",
410 #if defined(OS_WIN) 215 #if defined(OS_WIN)
411 // Fails on the mac (and linux?): 216 // Fails on the mac (and linux?):
412 // http://code.google.com/p/chromium/issues/detail?id=22599 217 // http://code.google.com/p/chromium/issues/detail?id=22599
413 "close.html", 218 "close.html",
414 #endif 219 #endif
415 // These tests (and the shared-worker versions below) are disabled due to 220 // These tests (and the shared-worker versions below) are disabled due to
416 // limitations in lighttpd (doesn't handle all of the HTTP methods). 221 // limitations in lighttpd (doesn't handle all of the HTTP methods).
417 // "methods-async.html", 222 // "methods-async.html",
418 // "methods.html", 223 // "methods.html",
419 224
420 "shared-worker-close.html", 225 "shared-worker-close.html",
421 // Disabled due to limitations in lighttpd (does not handle methods other 226 // Disabled due to limitations in lighttpd (does not handle methods other
422 // than GET/PUT/POST). 227 // than GET/PUT/POST).
423 // "shared-worker-methods-async.html", 228 // "shared-worker-methods-async.html",
424 // "shared-worker-methods.html", 229 // "shared-worker-methods.html",
425 "shared-worker-xhr-file-not-found.html", 230 "shared-worker-xhr-file-not-found.html",
426 231
427 "xmlhttprequest-file-not-found.html" 232 "xmlhttprequest-file-not-found.html"
428 }; 233 };
429 234
430 FilePath http_test_dir;
431 http_test_dir = http_test_dir.AppendASCII("http");
432 http_test_dir = http_test_dir.AppendASCII("tests");
433
434 FilePath worker_test_dir;
435 worker_test_dir = worker_test_dir.AppendASCII("xmlhttprequest");
436 worker_test_dir = worker_test_dir.AppendASCII("workers");
437 InitializeForLayoutTest(http_test_dir, worker_test_dir, kHttpPort);
438
439 LayoutTestHttpServer http_server(new_http_root_dir_, kHttpPort);
440 ASSERT_TRUE(http_server.Start());
441 for (size_t i = 0; i < arraysize(kLayoutTestFiles); ++i) 235 for (size_t i = 0; i < arraysize(kLayoutTestFiles); ++i)
442 RunLayoutTest(kLayoutTestFiles[i], kHttpPort); 236 RunHttpLayoutTest(kLayoutTestFiles[i]);
443 ASSERT_TRUE(http_server.Stop()); 237 }
444 } 238
445 239 class WorkerWebSocketHttpLayoutTest : public InProcessBrowserLayoutTest {
446 // Flaky, http://crbug.com/34996. 240 public:
447 TEST_F(WorkerTest, DISABLED_MessagePorts) { 241 WorkerWebSocketHttpLayoutTest() : InProcessBrowserLayoutTest(
242 FilePath(),
243 FilePath().AppendASCII("http").AppendASCII("tests").
244 AppendASCII("websocket").AppendASCII("tests").AppendASCII("hybi").
245 AppendASCII("workers"),
246 -1) {
247 }
248 };
249
250 IN_PROC_BROWSER_TEST_F(WorkerWebSocketHttpLayoutTest, Tests) {
448 static const char* kLayoutTestFiles[] = { 251 static const char* kLayoutTestFiles[] = {
449 "message-channel-gc.html", 252 "close-in-onmessage-crash.html",
450 "message-channel-gc-2.html", 253 "close-in-shared-worker.html",
451 "message-channel-gc-3.html", 254 "close-in-worker.html",
452 "message-channel-gc-4.html", 255 "shared-worker-simple.html",
453 "message-port.html", 256 "worker-handshake-challenge-randomness.html",
454 "message-port-clone.html", 257 "worker-simple.html"
455 "message-port-constructor-for-deleted-document.html",
456 "message-port-deleted-document.html",
457 "message-port-deleted-frame.html",
458 "message-port-inactive-document.html",
459 "message-port-multi.html",
460 "message-port-no-wrapper.html",
461 // Only works with run-webkit-tests --leaks.
462 // "message-channel-listener-circular-ownership.html",
463 }; 258 };
464 259
465 FilePath fast_test_dir; 260 FilePath websocket_test_dir;
466 fast_test_dir = fast_test_dir.AppendASCII("fast"); 261 ASSERT_TRUE(PathService::Get(content::DIR_LAYOUT_TESTS, &websocket_test_dir));
467 262
468 FilePath worker_test_dir; 263 ui_test_utils::TestWebSocketServer websocket_server;
469 worker_test_dir = worker_test_dir.AppendASCII("events"); 264 ASSERT_TRUE(websocket_server.Start(websocket_test_dir));
470 InitializeForLayoutTest(fast_test_dir, worker_test_dir, kNoHttpPort);
471
472 // MessagePort tests also rely on common files in js/resources.
473 FilePath js_dir = fast_test_dir.AppendASCII("js");
474 FilePath resource_dir;
475 resource_dir = resource_dir.AppendASCII("resources");
476 AddResourceForLayoutTest(js_dir, resource_dir);
477 265
478 for (size_t i = 0; i < arraysize(kLayoutTestFiles); ++i) 266 for (size_t i = 0; i < arraysize(kLayoutTestFiles); ++i)
479 RunLayoutTest(kLayoutTestFiles[i], kNoHttpPort); 267 RunHttpLayoutTest(kLayoutTestFiles[i]);
480 } 268 }
481 269
482 TEST_F(WorkerTest, LimitPerPage) { 270 class WorkerTest : public InProcessBrowserTest {
483 int max_workers_per_tab = WorkerServiceImpl::kMaxWorkersPerTabWhenSeparate; 271 public:
484 GURL url = ui_test_utils::GetTestUrl(FilePath(kTestDir), 272 WorkerTest() {}
485 FilePath(kManySharedWorkersFile)); 273
486 url = GURL(url.spec() + StringPrintf("?count=%d", max_workers_per_tab + 1)); 274 GURL GetTestURL(const std::string& test_case, const std::string& query) {
487 275 FilePath test_file_path = ui_test_utils::GetTestFilePath(
488 NavigateToURL(url); 276 FilePath(FILE_PATH_LITERAL("workers")),
489 ASSERT_TRUE(WaitForProcessCountToBeAtLeast(1, max_workers_per_tab)); 277 FilePath().AppendASCII(test_case));
278 return ui_test_utils::GetFileUrlWithQuery(test_file_path, query);
279 }
280
281 void RunTest(Browser* browser,
282 const std::string& test_case,
283 const std::string& query) {
284 GURL url = GetTestURL(test_case, query);
285 const string16 expected_title = ASCIIToUTF16("OK");
286 ui_test_utils::TitleWatcher title_watcher(
287 browser->GetSelectedWebContents(), expected_title);
288 ui_test_utils::NavigateToURL(browser, url);
289 string16 final_title = title_watcher.WaitAndGetTitle();
290 EXPECT_EQ(expected_title, final_title);
291 }
292
293 void RunTest(const std::string& test_case, const std::string& query) {
294 RunTest(browser(), test_case, query);
295 }
296
297 static void CountWorkerProcesses(int *cur_process_count) {
298 *cur_process_count = 0;
299 for (WorkerProcessHostIterator iter; !iter.Done(); ++iter)
300 (*cur_process_count)++;
301 BrowserThread::PostTask(
302 BrowserThread::UI, FROM_HERE, MessageLoop::QuitClosure());
303 }
304
305 bool WaitForWorkerProcessCount(int count) {
306 int cur_process_count;
307 for (int i = 0; i < 100; ++i) {
308 BrowserThread::PostTask(
309 BrowserThread::IO, FROM_HERE,
310 base::Bind(&CountWorkerProcesses, &cur_process_count));
311 ui_test_utils::RunMessageLoop();
312 if (cur_process_count == count)
313 return true;
314
315 // Sometimes the worker processes can take a while to shut down on the
316 // bots, so use a longer timeout period to avoid spurious failures.
317 base::PlatformThread::Sleep(TestTimeouts::action_max_timeout() / 100);
318 }
319
320 EXPECT_EQ(cur_process_count, count);
321 return false;
322 }
323 };
324
325 IN_PROC_BROWSER_TEST_F(WorkerTest, SingleWorker) {
326 RunTest("single_worker.html", "");
327 }
328
329 IN_PROC_BROWSER_TEST_F(WorkerTest, MultipleWorkers) {
330 RunTest("multi_worker.html", "");
331 }
332
333 IN_PROC_BROWSER_TEST_F(WorkerTest, SingleSharedWorker) {
334 RunTest("single_worker.html", "shared=true");
335 }
336
337 // http://crbug.com/96435
338 IN_PROC_BROWSER_TEST_F(WorkerTest, MultipleSharedWorkers) {
339 RunTest("multi_worker.html", "shared=true");
340 }
341
342 // http://crbug.com/80446
343 IN_PROC_BROWSER_TEST_F(WorkerTest, TerminateQueuedWorkers) {
344 ASSERT_TRUE(WaitForWorkerProcessCount(0));
345 RunTest("terminate_queued_workers.html", "");
346 // Make sure all workers exit.
347 ASSERT_TRUE(WaitForWorkerProcessCount(0));
348 }
349
350 // Incognito windows should not share workers with non-incognito windows
351 // http://crbug.com/30021
352 IN_PROC_BROWSER_TEST_F(WorkerTest, IncognitoSharedWorkers) {
353 // Load a non-incognito tab and have it create a shared worker
354 RunTest("incognito_worker.html", "");
355
356 // Incognito worker should not share with non-incognito
357 RunTest(CreateIncognitoBrowser(), "incognito_worker.html", "");
358 }
359
360 // Make sure that auth dialog is displayed from worker context.
361 // http://crbug.com/33344
362 IN_PROC_BROWSER_TEST_F(WorkerTest, WorkerHttpAuth) {
363 ASSERT_TRUE(test_server()->Start());
364 GURL url = test_server()->GetURL("files/workers/worker_auth.html");
365
366 ui_test_utils::NavigateToURLWithDisposition(
367 browser(), url, CURRENT_TAB, ui_test_utils::BROWSER_TEST_WAIT_FOR_AUTH);
368 }
369
370 // Make sure that auth dialog is displayed from shared worker context.
371 // http://crbug.com/33344
372 IN_PROC_BROWSER_TEST_F(WorkerTest, SharedWorkerHttpAuth) {
373 ASSERT_TRUE(test_server()->Start());
374 GURL url = test_server()->GetURL("files/workers/shared_worker_auth.html");
375 ui_test_utils::NavigateToURLWithDisposition(
376 browser(), url, CURRENT_TAB, ui_test_utils::BROWSER_TEST_WAIT_FOR_AUTH);
377 }
378
379 IN_PROC_BROWSER_TEST_F(WorkerTest, LimitPerPage) {
380 int max_workers_per_tab = WorkerServiceImpl::kMaxWorkersPerTabWhenSeparate;
381 std::string query = StringPrintf("?count=%d", max_workers_per_tab + 1);
382
383 GURL url = GetTestURL("many_shared_workers.html", query);
384 ui_test_utils::NavigateToURL(browser(), url);
385 ASSERT_TRUE(WaitForWorkerProcessCount(max_workers_per_tab));
490 } 386 }
491 387
492 // http://crbug.com/36800 388 // http://crbug.com/36800
493 #if defined(OS_WIN) 389 IN_PROC_BROWSER_TEST_F(WorkerTest, LimitTotal) {
494 #define MAYBE_LimitTotal DISABLED_LimitTotal
495 #else
496 #define MAYBE_LimitTotal LimitTotal
497 #endif // defined(OS_WIN)
498 TEST_F(WorkerTest, MAYBE_LimitTotal) {
499 int max_workers_per_tab = WorkerServiceImpl::kMaxWorkersPerTabWhenSeparate; 390 int max_workers_per_tab = WorkerServiceImpl::kMaxWorkersPerTabWhenSeparate;
500 int total_workers = WorkerServiceImpl::kMaxWorkersWhenSeparate; 391 int total_workers = WorkerServiceImpl::kMaxWorkersWhenSeparate;
501 392
393 std::string query = StringPrintf("?count=%d", max_workers_per_tab);
394 GURL url = GetTestURL("many_shared_workers.html", query);
395 ui_test_utils::NavigateToURL(
396 browser(), GURL(url.spec() + StringPrintf("&client_id=0")));
397
502 // Adding 1 so that we cause some workers to be queued. 398 // Adding 1 so that we cause some workers to be queued.
503 int tab_count = (total_workers / max_workers_per_tab) + 1; 399 int tab_count = (total_workers / max_workers_per_tab) + 1;
504 GURL url = ui_test_utils::GetTestUrl(FilePath(kTestDir),
505 FilePath(kManySharedWorkersFile));
506 url = GURL(url.spec() + StringPrintf("?count=%d", max_workers_per_tab));
507
508 scoped_refptr<TabProxy> tab(GetActiveTab());
509 ASSERT_TRUE(tab.get());
510 ASSERT_TRUE(tab->NavigateToURL(
511 GURL(url.spec() + StringPrintf("&client_id=%d", 0))));
512 scoped_refptr<BrowserProxy> window(automation()->GetBrowserWindow(0));
513 ASSERT_TRUE(window.get());
514 for (int i = 1; i < tab_count; ++i) { 400 for (int i = 1; i < tab_count; ++i) {
515 ASSERT_TRUE(window->AppendTab(GURL( 401 ui_test_utils::NavigateToURLWithDisposition(
516 url.spec() + StringPrintf("&client_id=%d", i)))); 402 browser(), GURL(url.spec() + StringPrintf("&client_id=%d", i)),
403 NEW_FOREGROUND_TAB,
404 ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION);
517 } 405 }
518 406
519 // Check that we didn't create more than the max number of workers. 407 // Check that we didn't create more than the max number of workers.
520 ASSERT_TRUE(WaitForProcessCountToBeAtLeast(tab_count, total_workers)); 408 ASSERT_TRUE(WaitForWorkerProcessCount(total_workers));
521 409
522 // Now close a page and check that the queued workers were started. 410 // Now close a page and check that the queued workers were started.
523 const FilePath::CharType* kGoogleDir = FILE_PATH_LITERAL("google"); 411 const FilePath kGoogleDir(FILE_PATH_LITERAL("google"));
524 const FilePath::CharType* kGoogleFile = FILE_PATH_LITERAL("google.html"); 412 const FilePath kGoogleFile(FILE_PATH_LITERAL("google.html"));
525 ASSERT_EQ(AUTOMATION_MSG_NAVIGATION_SUCCESS, 413 url = GURL(ui_test_utils::GetTestUrl(kGoogleDir, kGoogleFile));
526 tab->NavigateToURL(ui_test_utils::GetTestUrl(FilePath(kGoogleDir), 414 ui_test_utils::NavigateToURL(browser(), url);
527 FilePath(kGoogleFile)))); 415
528 416 ASSERT_TRUE(WaitForWorkerProcessCount(total_workers));
529 ASSERT_TRUE(WaitForProcessCountToBeAtLeast(tab_count, total_workers));
530 } 417 }
531 418
532 // Flaky, http://crbug.com/59786. 419 // Flaky, http://crbug.com/59786.
533 TEST_F(WorkerTest, DISABLED_WorkerClose) { 420 IN_PROC_BROWSER_TEST_F(WorkerTest, WorkerClose) {
534 scoped_refptr<TabProxy> tab(GetActiveTab()); 421 RunTest("worker_close.html", "");
535 ASSERT_TRUE(tab.get()); 422 ASSERT_TRUE(WaitForWorkerProcessCount(0));
536 GURL url = ui_test_utils::GetTestUrl(FilePath(kTestDir),
537 FilePath(kWorkerClose));
538 ASSERT_TRUE(tab->NavigateToURL(url));
539 std::string value = WaitUntilCookieNonEmpty(tab.get(), url,
540 kTestCompleteCookie, TestTimeouts::action_max_timeout_ms());
541 ASSERT_STREQ(kTestCompleteSuccess, value.c_str());
542 ASSERT_TRUE(WaitForProcessCountToBeAtLeast(1, 0));
543 } 423 }
544 424
545 // Flaky, http://crbug.com/70861. 425 // Flaky, http://crbug.com/70861.
546 TEST_F(WorkerTest, DISABLED_QueuedSharedWorkerShutdown) { 426 IN_PROC_BROWSER_TEST_F(WorkerTest, QueuedSharedWorkerShutdown) {
547 // Tests to make sure that queued shared workers are started up when 427 // Tests to make sure that queued shared workers are started up when shared
548 // shared workers shut down. 428 // workers shut down.
549 int max_workers_per_tab = WorkerServiceImpl::kMaxWorkersPerTabWhenSeparate; 429 int max_workers_per_tab = WorkerServiceImpl::kMaxWorkersPerTabWhenSeparate;
550 GURL url = ui_test_utils::GetTestUrl(FilePath(kTestDir), 430 std::string query = StringPrintf("?count=%d", max_workers_per_tab);
551 FilePath(kQuerySharedWorkerShutdownFile)); 431 RunTest("queued_shared_worker_shutdown.html", query);
552 url = GURL(url.spec() + StringPrintf("?count=%d", max_workers_per_tab)); 432 ASSERT_TRUE(WaitForWorkerProcessCount(max_workers_per_tab));
553
554 scoped_refptr<TabProxy> tab(GetActiveTab());
555 ASSERT_TRUE(tab.get());
556 ASSERT_TRUE(tab->NavigateToURL(url));
557 std::string value = WaitUntilCookieNonEmpty(tab.get(), url,
558 kTestCompleteCookie, TestTimeouts::action_max_timeout_ms());
559 ASSERT_STREQ(kTestCompleteSuccess, value.c_str());
560 ASSERT_TRUE(WaitForProcessCountToBeAtLeast(1, max_workers_per_tab));
561 } 433 }
562 434
563 // Flaky, http://crbug.com/69881. 435 // Flaky, http://crbug.com/69881.
564 TEST_F(WorkerTest, DISABLED_MultipleTabsQueuedSharedWorker) { 436 IN_PROC_BROWSER_TEST_F(WorkerTest, MultipleTabsQueuedSharedWorker) {
565 // Tests to make sure that only one instance of queued shared workers are 437 // Tests to make sure that only one instance of queued shared workers are
566 // started up even when those instances are on multiple tabs. 438 // started up even when those instances are on multiple tabs.
567 int max_workers_per_tab = WorkerServiceImpl::kMaxWorkersPerTabWhenSeparate; 439 int max_workers_per_tab = WorkerServiceImpl::kMaxWorkersPerTabWhenSeparate;
568 GURL url = ui_test_utils::GetTestUrl(FilePath(kTestDir), 440 std::string query = StringPrintf("?count=%d", max_workers_per_tab + 1);
569 FilePath(kManySharedWorkersFile)); 441 GURL url = GetTestURL("many_shared_workers.html", query);
570 url = GURL(url.spec() + StringPrintf("?count=%d", max_workers_per_tab+1)); 442 ui_test_utils::NavigateToURL(browser(), url);
571 443 ASSERT_TRUE(WaitForWorkerProcessCount(max_workers_per_tab));
572 scoped_refptr<TabProxy> tab(GetActiveTab());
573 ASSERT_TRUE(tab.get());
574 ASSERT_TRUE(tab->NavigateToURL(url));
575 ASSERT_TRUE(WaitForProcessCountToBeAtLeast(1, max_workers_per_tab));
576 444
577 // Create same set of workers in new tab (leaves one worker queued from this 445 // Create same set of workers in new tab (leaves one worker queued from this
578 // tab). 446 // tab).
579 scoped_refptr<BrowserProxy> window(automation()->GetBrowserWindow(0)); 447 url = GetTestURL("many_shared_workers.html", query);
580 ASSERT_TRUE(window.get()); 448 ui_test_utils::NavigateToURLWithDisposition(
581 ASSERT_TRUE(window->AppendTab(url)); 449 browser(), url, NEW_FOREGROUND_TAB,
582 ASSERT_TRUE(WaitForProcessCountToBeAtLeast(2, max_workers_per_tab)); 450 ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION);
451 ASSERT_TRUE(WaitForWorkerProcessCount(max_workers_per_tab));
583 452
584 // Now shutdown one of the shared workers - this will fire both queued 453 // Now shutdown one of the shared workers - this will fire both queued
585 // workers, but only one instance should be started 454 // workers, but only one instance should be started.
586 GURL url2 = ui_test_utils::GetTestUrl(FilePath(kTestDir), 455 url = GetTestURL("shutdown_shared_worker.html", "?id=0");
587 FilePath(kShutdownSharedWorkerFile)); 456 ui_test_utils::NavigateToURLWithDisposition(
588 url2 = GURL(url2.spec() + "?id=0"); 457 browser(), url, NEW_FOREGROUND_TAB,
589 ASSERT_TRUE(window->AppendTab(url2)); 458 ui_test_utils::BROWSER_TEST_WAIT_FOR_TAB);
590 459 ASSERT_TRUE(WaitForWorkerProcessCount(max_workers_per_tab));
591 std::string value = WaitUntilCookieNonEmpty(tab.get(), url,
592 kTestCompleteCookie, TestTimeouts::action_max_timeout_ms());
593 ASSERT_STREQ(kTestCompleteSuccess, value.c_str());
594 ASSERT_TRUE(WaitForProcessCountToBeAtLeast(3, max_workers_per_tab));
595 } 460 }
596 461
597 // Flaky: http://crbug.com/48148 462 // Flaky: http://crbug.com/48148
598 TEST_F(WorkerTest, DISABLED_QueuedSharedWorkerStartedFromOtherTab) { 463 IN_PROC_BROWSER_TEST_F(WorkerTest, QueuedSharedWorkerStartedFromOtherTab) {
599 // Tests to make sure that queued shared workers are started up when 464 // Tests to make sure that queued shared workers are started up when
600 // an instance is launched from another tab. 465 // an instance is launched from another tab.
601 int max_workers_per_tab = WorkerServiceImpl::kMaxWorkersPerTabWhenSeparate; 466 int max_workers_per_tab = WorkerServiceImpl::kMaxWorkersPerTabWhenSeparate;
602 GURL url = ui_test_utils::GetTestUrl(FilePath(kTestDir), 467 std::string query = StringPrintf("?count=%d", max_workers_per_tab + 1);
603 FilePath(kManySharedWorkersFile)); 468 GURL url = GetTestURL("many_shared_workers.html", query);
604 url = GURL(url.spec() + StringPrintf("?count=%d", max_workers_per_tab+1)); 469 ui_test_utils::NavigateToURL(browser(), url);
605 470 ASSERT_TRUE(WaitForWorkerProcessCount(max_workers_per_tab));
606 scoped_refptr<TabProxy> tab(GetActiveTab()); 471
607 ASSERT_TRUE(tab.get());
608 ASSERT_TRUE(tab->NavigateToURL(url));
609 ASSERT_TRUE(WaitForProcessCountToBeAtLeast(1, max_workers_per_tab));
610 // First window has hit its limit. Now launch second window which creates 472 // First window has hit its limit. Now launch second window which creates
611 // the same worker that was queued in the first window, to ensure it gets 473 // the same worker that was queued in the first window, to ensure it gets
612 // connected to the first window too. 474 // connected to the first window too.
613 scoped_refptr<BrowserProxy> window(automation()->GetBrowserWindow(0)); 475 query = StringPrintf("?id=%d", max_workers_per_tab);
614 ASSERT_TRUE(window.get()); 476 url = GetTestURL("single_shared_worker.html", query);
615 GURL url2 = ui_test_utils::GetTestUrl(FilePath(kTestDir), 477 ui_test_utils::NavigateToURLWithDisposition(
616 FilePath(kSingleSharedWorkersFile)); 478 browser(), url, NEW_FOREGROUND_TAB,
617 url2 = GURL(url2.spec() + StringPrintf("?id=%d", max_workers_per_tab)); 479 ui_test_utils::BROWSER_TEST_WAIT_FOR_TAB);
618 ASSERT_TRUE(window->AppendTab(url2)); 480
619 481 ASSERT_TRUE(WaitForWorkerProcessCount(max_workers_per_tab + 1));
620 std::string value = WaitUntilCookieNonEmpty(tab.get(), url, 482 }
621 kTestCompleteCookie, TestTimeouts::action_max_timeout_ms());
622 ASSERT_STREQ(kTestCompleteSuccess, value.c_str());
623 ASSERT_TRUE(WaitForProcessCountToBeAtLeast(2, max_workers_per_tab+1));
624 }
OLDNEW
« no previous file with comments | « content/browser/worker_host/test/OWNERS ('k') | content/test/layout_browsertest.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698