Chromium Code Reviews| Index: content/browser/service_worker/service_worker_browsertest.cc |
| diff --git a/content/browser/service_worker/service_worker_browsertest.cc b/content/browser/service_worker/service_worker_browsertest.cc |
| index 4d73b52bba36bcc6c5170679cf6898a6c2cf6e56..84b3a87a1ad4b97f8c26943710f9971bcd8af67f 100644 |
| --- a/content/browser/service_worker/service_worker_browsertest.cc |
| +++ b/content/browser/service_worker/service_worker_browsertest.cc |
| @@ -383,14 +383,15 @@ class ConsoleListener : public EmbeddedWorkerInstance::Listener { |
| const base::string16& message, |
| int line_number, |
| const GURL& source_url) override { |
| - messages_.push_back(message); |
| - if (!quit_.is_null() && messages_.size() == expected_message_count_) { |
| - BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, quit_); |
| - quit_.Reset(); |
| - } |
| + DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| + BrowserThread::PostTask( |
| + BrowserThread::UI, FROM_HERE, |
| + base::Bind(&ConsoleListener::OnReportCOnsoleMessageOnUI, |
| + base::Unretained(this), message)); |
| } |
| void WaitForConsoleMessages(size_t expected_message_count) { |
| + DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| if (messages_.size() >= expected_message_count) |
| return; |
| @@ -406,6 +407,16 @@ class ConsoleListener : public EmbeddedWorkerInstance::Listener { |
| const std::vector<base::string16>& messages() const { return messages_; } |
| private: |
| + void OnReportCOnsoleMessageOnUI(const base::string16& message) { |
|
nhiroki
2016/08/03 00:00:58
s/COnsole/Console/
shimazu
2016/08/03 00:15:58
Done.
|
| + DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| + messages_.push_back(message); |
| + if (!quit_.is_null() && messages_.size() == expected_message_count_) { |
| + BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, quit_); |
|
nhiroki
2016/08/03 00:00:58
This PostTask wouldn't be necessary because we're
shimazu
2016/08/03 00:15:58
Done, and also removed unnecessary check (messages
|
| + quit_.Reset(); |
| + } |
| + } |
| + |
| + // These parameters must be accessed on the UI thread. |
| std::vector<base::string16> messages_; |
| size_t expected_message_count_; |
| base::Closure quit_; |
| @@ -930,21 +941,15 @@ IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest, |
| SERVICE_WORKER_ERROR_EVENT_WAITUNTIL_REJECTED); |
| } |
| -// Has errors under TSan. See https://crbug.com/631323. |
| -#if defined(THREAD_SANITIZER) |
| -#define MAYBE_InstallWithWaitUntil_RejectConsoleMessage \ |
| - DISABLED_InstallWithWaitUntil_RejectConsoleMessage |
| -#else |
| -#define MAYBE_InstallWithWaitUntil_RejectConsoleMessage \ |
| - InstallWithWaitUntil_RejectConsoleMessage |
| -#endif |
| IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest, |
| - MAYBE_InstallWithWaitUntil_RejectConsoleMessage) { |
| + InstallWithWaitUntil_RejectConsoleMessage) { |
| RunOnIOThread(base::Bind(&self::SetUpRegistrationOnIOThread, this, |
| "/service_worker/worker_install_rejected.js")); |
| ConsoleListener console_listener; |
| - version_->embedded_worker()->AddListener(&console_listener); |
| + RunOnIOThread(base::Bind(&EmbeddedWorkerInstance::AddListener, |
| + base::Unretained(version_->embedded_worker()), |
| + &console_listener)); |
| // Dispatch install on a worker. |
| ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED; |
| @@ -960,7 +965,9 @@ IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest, |
| console_listener.WaitForConsoleMessages(1); |
| ASSERT_NE(base::string16::npos, |
| console_listener.messages()[0].find(expected)); |
| - version_->embedded_worker()->RemoveListener(&console_listener); |
| + RunOnIOThread(base::Bind(&EmbeddedWorkerInstance::RemoveListener, |
| + base::Unretained(version_->embedded_worker()), |
| + &console_listener)); |
| } |
| class WaitForLoaded : public EmbeddedWorkerInstance::Listener { |
| @@ -968,6 +975,7 @@ class WaitForLoaded : public EmbeddedWorkerInstance::Listener { |
| explicit WaitForLoaded(const base::Closure& quit) : quit_(quit) {} |
| void OnThreadStarted() override { |
| + DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, quit_); |
| } |
| bool OnMessageReceived(const IPC::Message& message) override { return false; } |
| @@ -976,14 +984,7 @@ class WaitForLoaded : public EmbeddedWorkerInstance::Listener { |
| base::Closure quit_; |
| }; |
| -// Has errors under TSan. See https://crbug.com/631323. |
| -#if defined(THREAD_SANITIZER) |
| -#define MAYBE_TimeoutStartingWorker DISABLED_TimeoutStartingWorker |
| -#else |
| -#define MAYBE_TimeoutStartingWorker TimeoutStartingWorker |
| -#endif |
| -IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest, |
| - MAYBE_TimeoutStartingWorker) { |
| +IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest, TimeoutStartingWorker) { |
| RunOnIOThread(base::Bind(&self::SetUpRegistrationOnIOThread, this, |
| "/service_worker/while_true_worker.js")); |
| @@ -992,12 +993,16 @@ IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest, |
| base::RunLoop start_run_loop; |
| base::RunLoop load_run_loop; |
| WaitForLoaded wait_for_load(load_run_loop.QuitClosure()); |
| - version_->embedded_worker()->AddListener(&wait_for_load); |
| + RunOnIOThread(base::Bind(&EmbeddedWorkerInstance::AddListener, |
| + base::Unretained(version_->embedded_worker()), |
| + &wait_for_load)); |
| BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, |
| base::Bind(&self::StartOnIOThread, this, |
| start_run_loop.QuitClosure(), &status)); |
| load_run_loop.Run(); |
| - version_->embedded_worker()->RemoveListener(&wait_for_load); |
| + RunOnIOThread(base::Bind(&EmbeddedWorkerInstance::RemoveListener, |
| + base::Unretained(version_->embedded_worker()), |
| + &wait_for_load)); |
| // The script has loaded but start has not completed yet. |
| ASSERT_EQ(SERVICE_WORKER_ERROR_FAILED, status); |
| @@ -1094,15 +1099,8 @@ IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest, |
| EXPECT_EQ("cache_name", response2.cache_storage_cache_name); |
| } |
| -// Has errors under TSan. See https://crbug.com/631323. |
| -#if defined(THREAD_SANITIZER) |
| -#define MAYBE_FetchEvent_respondWithRejection \ |
| - DISABLED_FetchEvent_respondWithRejection |
| -#else |
| -#define MAYBE_FetchEvent_respondWithRejection FetchEvent_respondWithRejection |
| -#endif |
| IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest, |
| - MAYBE_FetchEvent_respondWithRejection) { |
| + FetchEvent_respondWithRejection) { |
| ServiceWorkerFetchEventResult result; |
| ServiceWorkerResponse response; |
| std::unique_ptr<storage::BlobDataHandle> blob_data_handle; |
| @@ -1111,7 +1109,9 @@ IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest, |
| "/service_worker/fetch_event_rejected.js")); |
| ConsoleListener console_listener; |
| - version_->embedded_worker()->AddListener(&console_listener); |
| + RunOnIOThread(base::Bind(&EmbeddedWorkerInstance::AddListener, |
| + base::Unretained(version_->embedded_worker()), |
| + &console_listener)); |
| FetchOnRegisteredWorker(&result, &response, &blob_data_handle); |
| const base::string16 expected1 = base::ASCIIToUTF16( |
| @@ -1122,7 +1122,9 @@ IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest, |
| ASSERT_NE(base::string16::npos, |
| console_listener.messages()[0].find(expected1)); |
| ASSERT_EQ(0u, console_listener.messages()[1].find(expected2)); |
| - version_->embedded_worker()->RemoveListener(&console_listener); |
| + RunOnIOThread(base::Bind(&EmbeddedWorkerInstance::RemoveListener, |
| + base::Unretained(version_->embedded_worker()), |
| + &console_listener)); |
| ASSERT_EQ(SERVICE_WORKER_FETCH_EVENT_RESULT_RESPONSE, result); |
| EXPECT_EQ(0, response.status_code); |