| Index: chrome/worker/worker_uitest.cc
|
| diff --git a/chrome/worker/worker_uitest.cc b/chrome/worker/worker_uitest.cc
|
| index e0742ff7c04ab2f6950f36913803de4810973a18..5c7c865dff8c0110e4debaa9d15edc5635549816 100644
|
| --- a/chrome/worker/worker_uitest.cc
|
| +++ b/chrome/worker/worker_uitest.cc
|
| @@ -469,3 +469,84 @@ TEST_F(WorkerTest, LimitTotal) {
|
| ASSERT_TRUE(WaitForProcessCountToBe(tab_count, total_workers));
|
| #endif
|
| }
|
| +
|
| +TEST_F(WorkerTest, WorkerClose) {
|
| + scoped_refptr<TabProxy> tab(GetActiveTab());
|
| + ASSERT_TRUE(tab.get());
|
| + GURL url = GetTestUrl(L"workers", L"worker_close.html");
|
| + ASSERT_TRUE(tab->NavigateToURL(url));
|
| + std::string value = WaitUntilCookieNonEmpty(tab.get(), url,
|
| + kTestCompleteCookie, kTestIntervalMs, kTestWaitTimeoutMs);
|
| + ASSERT_STREQ(kTestCompleteSuccess, value.c_str());
|
| + ASSERT_TRUE(WaitForProcessCountToBe(1, 0));
|
| +}
|
| +
|
| +TEST_F(WorkerTest, QueuedSharedWorkerShutdown) {
|
| + // Tests to make sure that queued shared workers are started up when
|
| + // shared workers shut down.
|
| + int max_workers_per_tab = WorkerService::kMaxWorkersPerTabWhenSeparate;
|
| + GURL url = GetTestUrl(L"workers", L"queued_shared_worker_shutdown.html");
|
| + url = GURL(url.spec() + StringPrintf("?count=%d", max_workers_per_tab));
|
| +
|
| + scoped_refptr<TabProxy> tab(GetActiveTab());
|
| + ASSERT_TRUE(tab.get());
|
| + ASSERT_TRUE(tab->NavigateToURL(url));
|
| + std::string value = WaitUntilCookieNonEmpty(tab.get(), url,
|
| + kTestCompleteCookie, kTestIntervalMs, kTestWaitTimeoutMs);
|
| + ASSERT_STREQ(kTestCompleteSuccess, value.c_str());
|
| + ASSERT_TRUE(WaitForProcessCountToBe(1, max_workers_per_tab));
|
| +}
|
| +
|
| +TEST_F(WorkerTest, MultipleTabsQueuedSharedWorker) {
|
| + // Tests to make sure that only one instance of queued shared workers are
|
| + // started up even when those instances are on multiple tabs.
|
| + int max_workers_per_tab = WorkerService::kMaxWorkersPerTabWhenSeparate;
|
| + GURL url = GetTestUrl(L"workers", L"many_shared_workers.html");
|
| + url = GURL(url.spec() + StringPrintf("?count=%d", max_workers_per_tab+1));
|
| +
|
| + scoped_refptr<TabProxy> tab(GetActiveTab());
|
| + ASSERT_TRUE(tab.get());
|
| + ASSERT_TRUE(tab->NavigateToURL(url));
|
| + ASSERT_TRUE(WaitForProcessCountToBe(1, max_workers_per_tab));
|
| +
|
| + // Create same set of workers in new tab (leaves one worker queued from this
|
| + // tab).
|
| + scoped_refptr<BrowserProxy> window(automation()->GetBrowserWindow(0));
|
| + ASSERT_TRUE(window->AppendTab(url));
|
| + ASSERT_TRUE(WaitForProcessCountToBe(2, max_workers_per_tab));
|
| +
|
| + // Now shutdown one of the shared workers - this will fire both queued
|
| + // workers, but only one instance should be started
|
| + GURL url2 = GetTestUrl(L"workers", L"shutdown_shared_worker.html?id=0");
|
| + ASSERT_TRUE(window->AppendTab(url2));
|
| +
|
| + std::string value = WaitUntilCookieNonEmpty(tab.get(), url,
|
| + kTestCompleteCookie, kTestIntervalMs, kTestWaitTimeoutMs);
|
| + ASSERT_STREQ(kTestCompleteSuccess, value.c_str());
|
| + ASSERT_TRUE(WaitForProcessCountToBe(3, max_workers_per_tab));
|
| +}
|
| +
|
| +TEST_F(WorkerTest, QueuedSharedWorkerStartedFromOtherTab) {
|
| + // Tests to make sure that queued shared workers are started up when
|
| + // an instance is launched from another tab.
|
| + int max_workers_per_tab = WorkerService::kMaxWorkersPerTabWhenSeparate;
|
| + GURL url = GetTestUrl(L"workers", L"many_shared_workers.html");
|
| + url = GURL(url.spec() + StringPrintf("?count=%d", max_workers_per_tab+1));
|
| +
|
| + scoped_refptr<TabProxy> tab(GetActiveTab());
|
| + ASSERT_TRUE(tab.get());
|
| + ASSERT_TRUE(tab->NavigateToURL(url));
|
| + ASSERT_TRUE(WaitForProcessCountToBe(1, max_workers_per_tab));
|
| + // First window has hit its limit. Now launch second window which creates
|
| + // the same worker that was queued in the first window, to ensure it gets
|
| + // connected to the first window too.
|
| + scoped_refptr<BrowserProxy> window(automation()->GetBrowserWindow(0));
|
| + GURL url2 = GetTestUrl(L"workers", L"single_shared_worker.html");
|
| + url2 = GURL(url2.spec() + StringPrintf("?id=%d", max_workers_per_tab));
|
| + window->AppendTab(url2);
|
| +
|
| + std::string value = WaitUntilCookieNonEmpty(tab.get(), url,
|
| + kTestCompleteCookie, kTestIntervalMs, kTestWaitTimeoutMs);
|
| + ASSERT_STREQ(kTestCompleteSuccess, value.c_str());
|
| + ASSERT_TRUE(WaitForProcessCountToBe(2, max_workers_per_tab+1));
|
| +}
|
|
|