| OLD | NEW |
| 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/bind.h" |
| 6 #include "base/file_path.h" | 6 #include "base/file_path.h" |
| 7 #include "base/logging.h" | 7 #include "base/logging.h" |
| 8 #include "base/path_service.h" | 8 #include "base/path_service.h" |
| 9 #include "base/stringprintf.h" | 9 #include "base/stringprintf.h" |
| 10 #include "base/string_util.h" | 10 #include "base/string_util.h" |
| 11 #include "base/sys_info.h" | 11 #include "base/sys_info.h" |
| 12 #include "base/test/test_timeouts.h" | 12 #include "base/test/test_timeouts.h" |
| 13 #include "base/utf_string_conversions.h" | 13 #include "base/utf_string_conversions.h" |
| 14 #include "chrome/browser/ui/browser.h" | |
| 15 #include "chrome/browser/ui/browser_tabstrip.h" | |
| 16 #include "chrome/test/base/ui_test_utils.h" | |
| 17 #include "content/browser/worker_host/worker_process_host.h" | 14 #include "content/browser/worker_host/worker_process_host.h" |
| 18 #include "content/browser/worker_host/worker_service_impl.h" | 15 #include "content/browser/worker_host/worker_service_impl.h" |
| 19 #include "content/public/browser/browser_thread.h" | 16 #include "content/public/browser/browser_thread.h" |
| 20 #include "content/public/common/content_paths.h" | 17 #include "content/public/common/content_paths.h" |
| 21 #include "content/public/test/browser_test_utils.h" | 18 #include "content/public/test/browser_test_utils.h" |
| 19 #include "content/public/test/test_utils.h" |
| 20 #include "content/shell/shell.h" |
| 21 #include "content/shell/shell_content_browser_client.h" |
| 22 #include "content/shell/shell_resource_dispatcher_host_delegate.h" |
| 23 #include "content/test/content_browser_test_utils.h" |
| 22 #include "content/test/layout_browsertest.h" | 24 #include "content/test/layout_browsertest.h" |
| 23 #include "googleurl/src/gurl.h" | 25 #include "googleurl/src/gurl.h" |
| 24 | 26 |
| 25 using content::BrowserThread; | 27 using content::BrowserThread; |
| 26 using content::WorkerServiceImpl; | 28 using content::WorkerServiceImpl; |
| 27 | 29 |
| 28 class WorkerLayoutTest : public InProcessBrowserLayoutTest { | 30 class WorkerLayoutTest : public InProcessBrowserLayoutTest { |
| 29 public: | 31 public: |
| 30 WorkerLayoutTest() : InProcessBrowserLayoutTest( | 32 WorkerLayoutTest() : InProcessBrowserLayoutTest( |
| 31 FilePath(), FilePath().AppendASCII("fast").AppendASCII("workers")) { | 33 FilePath(), FilePath().AppendASCII("fast").AppendASCII("workers")) { |
| (...skipping 233 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 265 FilePath websocket_test_dir; | 267 FilePath websocket_test_dir; |
| 266 ASSERT_TRUE(PathService::Get(content::DIR_LAYOUT_TESTS, &websocket_test_dir)); | 268 ASSERT_TRUE(PathService::Get(content::DIR_LAYOUT_TESTS, &websocket_test_dir)); |
| 267 | 269 |
| 268 content::TestWebSocketServer websocket_server; | 270 content::TestWebSocketServer websocket_server; |
| 269 ASSERT_TRUE(websocket_server.Start(websocket_test_dir)); | 271 ASSERT_TRUE(websocket_server.Start(websocket_test_dir)); |
| 270 | 272 |
| 271 for (size_t i = 0; i < arraysize(kLayoutTestFiles); ++i) | 273 for (size_t i = 0; i < arraysize(kLayoutTestFiles); ++i) |
| 272 RunHttpLayoutTest(kLayoutTestFiles[i]); | 274 RunHttpLayoutTest(kLayoutTestFiles[i]); |
| 273 } | 275 } |
| 274 | 276 |
| 275 class WorkerTest : public InProcessBrowserTest { | 277 class WorkerTest : public content::ContentBrowserTest { |
| 276 public: | 278 public: |
| 277 WorkerTest() {} | 279 WorkerTest() {} |
| 278 | 280 |
| 279 GURL GetTestURL(const std::string& test_case, const std::string& query) { | 281 GURL GetTestURL(const std::string& test_case, const std::string& query) { |
| 280 FilePath test_file_path = ui_test_utils::GetTestFilePath( | 282 FilePath test_file_path = content::GetTestFilePath( |
| 281 FilePath(FILE_PATH_LITERAL("workers")), | 283 "workers", test_case.c_str()); |
| 282 FilePath().AppendASCII(test_case)); | 284 return content::GetFileUrlWithQuery(test_file_path, query); |
| 283 return ui_test_utils::GetFileUrlWithQuery(test_file_path, query); | |
| 284 } | 285 } |
| 285 | 286 |
| 286 void RunTest(Browser* browser, | 287 void RunTest(content::Shell* window, |
| 287 const std::string& test_case, | 288 const std::string& test_case, |
| 288 const std::string& query) { | 289 const std::string& query) { |
| 289 GURL url = GetTestURL(test_case, query); | 290 GURL url = GetTestURL(test_case, query); |
| 290 const string16 expected_title = ASCIIToUTF16("OK"); | 291 const string16 expected_title = ASCIIToUTF16("OK"); |
| 291 content::TitleWatcher title_watcher( | 292 content::TitleWatcher title_watcher(window->web_contents(), expected_title); |
| 292 chrome::GetActiveWebContents(browser), expected_title); | 293 content::NavigateToURL(window, url); |
| 293 ui_test_utils::NavigateToURL(browser, url); | |
| 294 string16 final_title = title_watcher.WaitAndGetTitle(); | 294 string16 final_title = title_watcher.WaitAndGetTitle(); |
| 295 EXPECT_EQ(expected_title, final_title); | 295 EXPECT_EQ(expected_title, final_title); |
| 296 } | 296 } |
| 297 | 297 |
| 298 void RunTest(const std::string& test_case, const std::string& query) { | 298 void RunTest(const std::string& test_case, const std::string& query) { |
| 299 RunTest(browser(), test_case, query); | 299 RunTest(shell(), test_case, query); |
| 300 } | 300 } |
| 301 | 301 |
| 302 static void CountWorkerProcesses(int *cur_process_count) { | 302 static void CountWorkerProcesses(int *cur_process_count) { |
| 303 *cur_process_count = 0; | 303 *cur_process_count = 0; |
| 304 for (WorkerProcessHostIterator iter; !iter.Done(); ++iter) | 304 for (WorkerProcessHostIterator iter; !iter.Done(); ++iter) |
| 305 (*cur_process_count)++; | 305 (*cur_process_count)++; |
| 306 BrowserThread::PostTask( | 306 BrowserThread::PostTask( |
| 307 BrowserThread::UI, FROM_HERE, MessageLoop::QuitClosure()); | 307 BrowserThread::UI, FROM_HERE, MessageLoop::QuitClosure()); |
| 308 } | 308 } |
| 309 | 309 |
| 310 bool WaitForWorkerProcessCount(int count) { | 310 bool WaitForWorkerProcessCount(int count) { |
| 311 int cur_process_count; | 311 int cur_process_count; |
| 312 for (int i = 0; i < 100; ++i) { | 312 for (int i = 0; i < 100; ++i) { |
| 313 BrowserThread::PostTask( | 313 BrowserThread::PostTask( |
| 314 BrowserThread::IO, FROM_HERE, | 314 BrowserThread::IO, FROM_HERE, |
| 315 base::Bind(&CountWorkerProcesses, &cur_process_count)); | 315 base::Bind(&CountWorkerProcesses, &cur_process_count)); |
| 316 ui_test_utils::RunMessageLoop(); | 316 |
| 317 base::RunLoop run_loop; |
| 318 content::RunThisRunLoop(&run_loop); |
| 317 if (cur_process_count == count) | 319 if (cur_process_count == count) |
| 318 return true; | 320 return true; |
| 319 | 321 |
| 320 // Sometimes the worker processes can take a while to shut down on the | 322 // Sometimes the worker processes can take a while to shut down on the |
| 321 // bots, so use a longer timeout period to avoid spurious failures. | 323 // bots, so use a longer timeout period to avoid spurious failures. |
| 322 base::PlatformThread::Sleep(TestTimeouts::action_max_timeout() / 100); | 324 base::PlatformThread::Sleep(TestTimeouts::action_max_timeout() / 100); |
| 323 } | 325 } |
| 324 | 326 |
| 325 EXPECT_EQ(cur_process_count, count); | 327 EXPECT_EQ(cur_process_count, count); |
| 326 return false; | 328 return false; |
| 327 } | 329 } |
| 330 |
| 331 static void QuitUIMessageLoop(base::Callback<void()> callback) { |
| 332 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, callback); |
| 333 } |
| 334 |
| 335 void NavigateAndWaitForAuth(const GURL& url) { |
| 336 content::ShellContentBrowserClient* browser_client = |
| 337 static_cast<content::ShellContentBrowserClient*>( |
| 338 content::GetContentClient()->browser()); |
| 339 scoped_refptr<content::MessageLoopRunner> runner = |
| 340 new content::MessageLoopRunner(); |
| 341 browser_client->resource_dispatcher_host_delegate()-> |
| 342 set_login_request_callback( |
| 343 base::Bind(&QuitUIMessageLoop, runner->QuitClosure())); |
| 344 shell()->LoadURL(url); |
| 345 runner->Run(); |
| 346 } |
| 328 }; | 347 }; |
| 329 | 348 |
| 330 IN_PROC_BROWSER_TEST_F(WorkerTest, SingleWorker) { | 349 IN_PROC_BROWSER_TEST_F(WorkerTest, SingleWorker) { |
| 331 RunTest("single_worker.html", ""); | 350 RunTest("single_worker.html", ""); |
| 332 } | 351 } |
| 333 | 352 |
| 334 IN_PROC_BROWSER_TEST_F(WorkerTest, MultipleWorkers) { | 353 IN_PROC_BROWSER_TEST_F(WorkerTest, MultipleWorkers) { |
| 335 RunTest("multi_worker.html", ""); | 354 RunTest("multi_worker.html", ""); |
| 336 } | 355 } |
| 337 | 356 |
| 338 IN_PROC_BROWSER_TEST_F(WorkerTest, SingleSharedWorker) { | 357 IN_PROC_BROWSER_TEST_F(WorkerTest, SingleSharedWorker) { |
| 339 RunTest("single_worker.html", "shared=true"); | 358 RunTest("single_worker.html", "shared=true"); |
| 340 } | 359 } |
| 341 | 360 |
| 342 // http://crbug.com/96435 | 361 // http://crbug.com/96435 |
| 343 IN_PROC_BROWSER_TEST_F(WorkerTest, MultipleSharedWorkers) { | 362 IN_PROC_BROWSER_TEST_F(WorkerTest, MultipleSharedWorkers) { |
| 344 RunTest("multi_worker.html", "shared=true"); | 363 RunTest("multi_worker.html", "shared=true"); |
| 345 } | 364 } |
| 346 | 365 |
| 347 // Incognito windows should not share workers with non-incognito windows | 366 // Incognito windows should not share workers with non-incognito windows |
| 348 // http://crbug.com/30021 | 367 // http://crbug.com/30021 |
| 349 IN_PROC_BROWSER_TEST_F(WorkerTest, IncognitoSharedWorkers) { | 368 IN_PROC_BROWSER_TEST_F(WorkerTest, IncognitoSharedWorkers) { |
| 350 // Load a non-incognito tab and have it create a shared worker | 369 // Load a non-incognito tab and have it create a shared worker |
| 351 RunTest("incognito_worker.html", ""); | 370 RunTest("incognito_worker.html", ""); |
| 352 | 371 |
| 353 // Incognito worker should not share with non-incognito | 372 // Incognito worker should not share with non-incognito |
| 354 RunTest(CreateIncognitoBrowser(), "incognito_worker.html", ""); | 373 RunTest(CreateOffTheRecordBrowser(), "incognito_worker.html", ""); |
| 355 } | 374 } |
| 356 | 375 |
| 357 // Make sure that auth dialog is displayed from worker context. | 376 // Make sure that auth dialog is displayed from worker context. |
| 358 // http://crbug.com/33344 | 377 // http://crbug.com/33344 |
| 359 IN_PROC_BROWSER_TEST_F(WorkerTest, WorkerHttpAuth) { | 378 IN_PROC_BROWSER_TEST_F(WorkerTest, WorkerHttpAuth) { |
| 360 ASSERT_TRUE(test_server()->Start()); | 379 ASSERT_TRUE(test_server()->Start()); |
| 361 GURL url = test_server()->GetURL("files/workers/worker_auth.html"); | 380 GURL url = test_server()->GetURL("files/workers/worker_auth.html"); |
| 362 | 381 |
| 363 ui_test_utils::NavigateToURLWithDisposition( | 382 NavigateAndWaitForAuth(url); |
| 364 browser(), url, CURRENT_TAB, ui_test_utils::BROWSER_TEST_WAIT_FOR_AUTH); | |
| 365 } | 383 } |
| 366 | 384 |
| 367 // Make sure that auth dialog is displayed from shared worker context. | 385 // Make sure that auth dialog is displayed from shared worker context. |
| 368 // http://crbug.com/33344 | 386 // http://crbug.com/33344 |
| 369 IN_PROC_BROWSER_TEST_F(WorkerTest, SharedWorkerHttpAuth) { | 387 IN_PROC_BROWSER_TEST_F(WorkerTest, SharedWorkerHttpAuth) { |
| 370 ASSERT_TRUE(test_server()->Start()); | 388 ASSERT_TRUE(test_server()->Start()); |
| 371 GURL url = test_server()->GetURL("files/workers/shared_worker_auth.html"); | 389 GURL url = test_server()->GetURL("files/workers/shared_worker_auth.html"); |
| 372 ui_test_utils::NavigateToURLWithDisposition( | 390 NavigateAndWaitForAuth(url); |
| 373 browser(), url, CURRENT_TAB, ui_test_utils::BROWSER_TEST_WAIT_FOR_AUTH); | |
| 374 } | 391 } |
| 375 | 392 |
| 376 #if defined(OS_LINUX) || defined(OS_CHROMEOS) | 393 #if defined(OS_LINUX) || defined(OS_CHROMEOS) |
| 377 // This test is flaky inside the Linux SUID sandbox. | 394 // This test is flaky inside the Linux SUID sandbox. |
| 378 // http://crbug.com/130116 | 395 // http://crbug.com/130116 |
| 379 IN_PROC_BROWSER_TEST_F(WorkerTest, DISABLED_LimitPerPage) { | 396 IN_PROC_BROWSER_TEST_F(WorkerTest, DISABLED_LimitPerPage) { |
| 380 #else | 397 #else |
| 381 IN_PROC_BROWSER_TEST_F(WorkerTest, LimitPerPage) { | 398 IN_PROC_BROWSER_TEST_F(WorkerTest, LimitPerPage) { |
| 382 #endif | 399 #endif |
| 383 int max_workers_per_tab = WorkerServiceImpl::kMaxWorkersPerTabWhenSeparate; | 400 int max_workers_per_tab = WorkerServiceImpl::kMaxWorkersPerTabWhenSeparate; |
| 384 std::string query = StringPrintf("?count=%d", max_workers_per_tab + 1); | 401 std::string query = StringPrintf("?count=%d", max_workers_per_tab + 1); |
| 385 | 402 |
| 386 GURL url = GetTestURL("many_shared_workers.html", query); | 403 GURL url = GetTestURL("many_shared_workers.html", query); |
| 387 ui_test_utils::NavigateToURL(browser(), url); | 404 content::NavigateToURL(shell(), url); |
| 388 ASSERT_TRUE(WaitForWorkerProcessCount(max_workers_per_tab)); | 405 ASSERT_TRUE(WaitForWorkerProcessCount(max_workers_per_tab)); |
| 389 } | 406 } |
| 390 | 407 |
| 391 #if defined(OS_LINUX) || defined(OS_CHROMEOS) | 408 #if defined(OS_LINUX) || defined(OS_CHROMEOS) |
| 392 // This test is flaky inside the Linux SUID sandbox. | 409 // This test is flaky inside the Linux SUID sandbox. |
| 393 // http://crbug.com/130116 | 410 // http://crbug.com/130116 |
| 394 IN_PROC_BROWSER_TEST_F(WorkerTest, DISABLED_LimitTotal) { | 411 IN_PROC_BROWSER_TEST_F(WorkerTest, DISABLED_LimitTotal) { |
| 395 #else | 412 #else |
| 396 // http://crbug.com/36800 | 413 // http://crbug.com/36800 |
| 397 IN_PROC_BROWSER_TEST_F(WorkerTest, LimitTotal) { | 414 IN_PROC_BROWSER_TEST_F(WorkerTest, LimitTotal) { |
| 398 #endif | 415 #endif |
| 399 if (base::SysInfo::AmountOfPhysicalMemoryMB() < 8192) { | 416 if (base::SysInfo::AmountOfPhysicalMemoryMB() < 8192) { |
| 400 LOG(INFO) << "WorkerTest.LimitTotal not running because it needs 8 GB RAM."; | 417 LOG(INFO) << "WorkerTest.LimitTotal not running because it needs 8 GB RAM."; |
| 401 return; | 418 return; |
| 402 } | 419 } |
| 403 | 420 |
| 404 int max_workers_per_tab = WorkerServiceImpl::kMaxWorkersPerTabWhenSeparate; | 421 int max_workers_per_tab = WorkerServiceImpl::kMaxWorkersPerTabWhenSeparate; |
| 405 int total_workers = WorkerServiceImpl::kMaxWorkersWhenSeparate; | 422 int total_workers = WorkerServiceImpl::kMaxWorkersWhenSeparate; |
| 406 | 423 |
| 407 std::string query = StringPrintf("?count=%d", max_workers_per_tab); | 424 std::string query = StringPrintf("?count=%d", max_workers_per_tab); |
| 408 GURL url = GetTestURL("many_shared_workers.html", query); | 425 GURL url = GetTestURL("many_shared_workers.html", query); |
| 409 ui_test_utils::NavigateToURL( | 426 content::NavigateToURL( |
| 410 browser(), GURL(url.spec() + StringPrintf("&client_id=0"))); | 427 shell(), GURL(url.spec() + StringPrintf("&client_id=0"))); |
| 411 | 428 |
| 412 // Adding 1 so that we cause some workers to be queued. | 429 // Adding 1 so that we cause some workers to be queued. |
| 413 int tab_count = (total_workers / max_workers_per_tab) + 1; | 430 int tab_count = (total_workers / max_workers_per_tab) + 1; |
| 414 for (int i = 1; i < tab_count; ++i) { | 431 for (int i = 1; i < tab_count; ++i) { |
| 415 ui_test_utils::NavigateToURLWithDisposition( | 432 content::NavigateToURL( |
| 416 browser(), GURL(url.spec() + StringPrintf("&client_id=%d", i)), | 433 CreateBrowser(), GURL(url.spec() + StringPrintf("&client_id=%d", i))); |
| 417 NEW_FOREGROUND_TAB, | |
| 418 ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); | |
| 419 } | 434 } |
| 420 | 435 |
| 421 // Check that we didn't create more than the max number of workers. | 436 // Check that we didn't create more than the max number of workers. |
| 422 ASSERT_TRUE(WaitForWorkerProcessCount(total_workers)); | 437 ASSERT_TRUE(WaitForWorkerProcessCount(total_workers)); |
| 423 | 438 |
| 424 // Now close a page and check that the queued workers were started. | 439 // Now close a page and check that the queued workers were started. |
| 425 const FilePath kGoogleDir(FILE_PATH_LITERAL("google")); | 440 url = GURL(content::GetTestUrl("google", "google.html")); |
| 426 const FilePath kGoogleFile(FILE_PATH_LITERAL("google.html")); | 441 content::NavigateToURL(shell(), url); |
| 427 url = GURL(ui_test_utils::GetTestUrl(kGoogleDir, kGoogleFile)); | |
| 428 ui_test_utils::NavigateToURL(browser(), url); | |
| 429 | 442 |
| 430 ASSERT_TRUE(WaitForWorkerProcessCount(total_workers)); | 443 ASSERT_TRUE(WaitForWorkerProcessCount(total_workers)); |
| 431 } | 444 } |
| 432 | 445 |
| 433 // Flaky, http://crbug.com/59786. | 446 // Flaky, http://crbug.com/59786. |
| 434 IN_PROC_BROWSER_TEST_F(WorkerTest, WorkerClose) { | 447 IN_PROC_BROWSER_TEST_F(WorkerTest, WorkerClose) { |
| 435 RunTest("worker_close.html", ""); | 448 RunTest("worker_close.html", ""); |
| 436 ASSERT_TRUE(WaitForWorkerProcessCount(0)); | 449 ASSERT_TRUE(WaitForWorkerProcessCount(0)); |
| 437 } | 450 } |
| 438 | 451 |
| 439 // Flaky, http://crbug.com/70861. | 452 // Flaky, http://crbug.com/70861. |
| 440 IN_PROC_BROWSER_TEST_F(WorkerTest, QueuedSharedWorkerShutdown) { | 453 IN_PROC_BROWSER_TEST_F(WorkerTest, QueuedSharedWorkerShutdown) { |
| 441 // Tests to make sure that queued shared workers are started up when shared | 454 // Tests to make sure that queued shared workers are started up when shared |
| 442 // workers shut down. | 455 // workers shut down. |
| 443 int max_workers_per_tab = WorkerServiceImpl::kMaxWorkersPerTabWhenSeparate; | 456 int max_workers_per_tab = WorkerServiceImpl::kMaxWorkersPerTabWhenSeparate; |
| 444 std::string query = StringPrintf("?count=%d", max_workers_per_tab); | 457 std::string query = StringPrintf("?count=%d", max_workers_per_tab); |
| 445 RunTest("queued_shared_worker_shutdown.html", query); | 458 RunTest("queued_shared_worker_shutdown.html", query); |
| 446 ASSERT_TRUE(WaitForWorkerProcessCount(max_workers_per_tab)); | 459 ASSERT_TRUE(WaitForWorkerProcessCount(max_workers_per_tab)); |
| 447 } | 460 } |
| 448 | 461 |
| 449 // Flaky, http://crbug.com/69881. | 462 // Flaky, http://crbug.com/69881. |
| 450 // Sometimes triggers | 463 // Sometimes triggers |
| 451 // Check failed: message_ports_[message_port_id].queued_messages.empty(). | 464 // Check failed: message_ports_[message_port_id].queued_messages.empty(). |
| 452 IN_PROC_BROWSER_TEST_F(WorkerTest, DISABLED_MultipleTabsQueuedSharedWorker) { | 465 IN_PROC_BROWSER_TEST_F(WorkerTest, DISABLED_MultipleTabsQueuedSharedWorker) { |
| 453 // Tests to make sure that only one instance of queued shared workers are | 466 // Tests to make sure that only one instance of queued shared workers are |
| 454 // started up even when those instances are on multiple tabs. | 467 // started up even when those instances are on multiple tabs. |
| 455 int max_workers_per_tab = WorkerServiceImpl::kMaxWorkersPerTabWhenSeparate; | 468 int max_workers_per_tab = WorkerServiceImpl::kMaxWorkersPerTabWhenSeparate; |
| 456 std::string query = StringPrintf("?count=%d", max_workers_per_tab + 1); | 469 std::string query = StringPrintf("?count=%d", max_workers_per_tab + 1); |
| 457 GURL url = GetTestURL("many_shared_workers.html", query); | 470 GURL url = GetTestURL("many_shared_workers.html", query); |
| 458 ui_test_utils::NavigateToURL(browser(), url); | 471 content::NavigateToURL(shell(), url); |
| 459 ASSERT_TRUE(WaitForWorkerProcessCount(max_workers_per_tab)); | 472 ASSERT_TRUE(WaitForWorkerProcessCount(max_workers_per_tab)); |
| 460 | 473 |
| 461 // Create same set of workers in new tab (leaves one worker queued from this | 474 // Create same set of workers in new tab (leaves one worker queued from this |
| 462 // tab). | 475 // tab). |
| 463 url = GetTestURL("many_shared_workers.html", query); | 476 url = GetTestURL("many_shared_workers.html", query); |
| 464 ui_test_utils::NavigateToURLWithDisposition( | 477 content::NavigateToURL(CreateBrowser(), url); |
| 465 browser(), url, NEW_FOREGROUND_TAB, | |
| 466 ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); | |
| 467 ASSERT_TRUE(WaitForWorkerProcessCount(max_workers_per_tab)); | 478 ASSERT_TRUE(WaitForWorkerProcessCount(max_workers_per_tab)); |
| 468 | 479 |
| 469 // Now shutdown one of the shared workers - this will fire both queued | 480 // Now shutdown one of the shared workers - this will fire both queued |
| 470 // workers, but only one instance should be started. | 481 // workers, but only one instance should be started. |
| 471 url = GetTestURL("shutdown_shared_worker.html", "?id=0"); | 482 url = GetTestURL("shutdown_shared_worker.html", "?id=0"); |
| 472 ui_test_utils::NavigateToURLWithDisposition( | 483 content::NavigateToURL(CreateBrowser(), url); |
| 473 browser(), url, NEW_FOREGROUND_TAB, | |
| 474 ui_test_utils::BROWSER_TEST_WAIT_FOR_TAB); | |
| 475 ASSERT_TRUE(WaitForWorkerProcessCount(max_workers_per_tab)); | 484 ASSERT_TRUE(WaitForWorkerProcessCount(max_workers_per_tab)); |
| 476 } | 485 } |
| 477 | 486 |
| 478 // Flaky: http://crbug.com/48148 | 487 // Flaky: http://crbug.com/48148 |
| 479 IN_PROC_BROWSER_TEST_F(WorkerTest, DISABLED_QueuedSharedWorkerStartedFromOtherTa
b) { | 488 IN_PROC_BROWSER_TEST_F(WorkerTest, DISABLED_QueuedSharedWorkerStartedFromOtherTa
b) { |
| 480 // Tests to make sure that queued shared workers are started up when | 489 // Tests to make sure that queued shared workers are started up when |
| 481 // an instance is launched from another tab. | 490 // an instance is launched from another tab. |
| 482 int max_workers_per_tab = WorkerServiceImpl::kMaxWorkersPerTabWhenSeparate; | 491 int max_workers_per_tab = WorkerServiceImpl::kMaxWorkersPerTabWhenSeparate; |
| 483 std::string query = StringPrintf("?count=%d", max_workers_per_tab + 1); | 492 std::string query = StringPrintf("?count=%d", max_workers_per_tab + 1); |
| 484 GURL url = GetTestURL("many_shared_workers.html", query); | 493 GURL url = GetTestURL("many_shared_workers.html", query); |
| 485 ui_test_utils::NavigateToURL(browser(), url); | 494 content::NavigateToURL(shell(), url); |
| 486 ASSERT_TRUE(WaitForWorkerProcessCount(max_workers_per_tab)); | 495 ASSERT_TRUE(WaitForWorkerProcessCount(max_workers_per_tab)); |
| 487 | 496 |
| 488 // First window has hit its limit. Now launch second window which creates | 497 // First window has hit its limit. Now launch second window which creates |
| 489 // the same worker that was queued in the first window, to ensure it gets | 498 // the same worker that was queued in the first window, to ensure it gets |
| 490 // connected to the first window too. | 499 // connected to the first window too. |
| 491 query = StringPrintf("?id=%d", max_workers_per_tab); | 500 query = StringPrintf("?id=%d", max_workers_per_tab); |
| 492 url = GetTestURL("single_shared_worker.html", query); | 501 url = GetTestURL("single_shared_worker.html", query); |
| 493 ui_test_utils::NavigateToURLWithDisposition( | 502 content::NavigateToURL(CreateBrowser(), url); |
| 494 browser(), url, NEW_FOREGROUND_TAB, | |
| 495 ui_test_utils::BROWSER_TEST_WAIT_FOR_TAB); | |
| 496 | 503 |
| 497 ASSERT_TRUE(WaitForWorkerProcessCount(max_workers_per_tab + 1)); | 504 ASSERT_TRUE(WaitForWorkerProcessCount(max_workers_per_tab + 1)); |
| 498 } | 505 } |
| OLD | NEW |