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 443c87d0bcd6448cf994357501e15194f8986065..5fee812dadf3a831f9b7c24859e13a401e22d59d 100644 |
| --- a/content/browser/service_worker/service_worker_browsertest.cc |
| +++ b/content/browser/service_worker/service_worker_browsertest.cc |
| @@ -335,7 +335,6 @@ class EmbeddedWorkerBrowserTest : public ServiceWorkerBrowserTest, |
| EXPECT_EQ(EmbeddedWorkerInstance::STOPPED, worker_->status()); |
| worker_->AddListener(this); |
| - |
| const int64 service_worker_version_id = 33L; |
| const GURL pattern = embedded_test_server()->GetURL("/"); |
| const GURL script_url = embedded_test_server()->GetURL( |
| @@ -522,6 +521,30 @@ class ServiceWorkerVersionBrowserTest : public ServiceWorkerBrowserTest { |
| AssociateRendererProcessToPattern(pattern); |
| } |
| + void StartWorker(ServiceWorkerStatusCode expected_status) { |
| + ASSERT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| + ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED; |
| + base::RunLoop start_run_loop; |
| + BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, |
| + base::Bind(&self::StartOnIOThread, this, |
| + start_run_loop.QuitClosure(), |
| + &status)); |
| + start_run_loop.Run(); |
| + ASSERT_EQ(expected_status, status); |
| + } |
| + |
| + void StopWorker(ServiceWorkerStatusCode expected_status) { |
| + ASSERT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| + ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED; |
| + base::RunLoop stop_run_loop; |
| + BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, |
| + base::Bind(&self::StopOnIOThread, this, |
| + stop_run_loop.QuitClosure(), |
| + &status)); |
| + stop_run_loop.Run(); |
| + ASSERT_EQ(expected_status, status); |
| + } |
| + |
| void StartOnIOThread(const base::Closure& done, |
| ServiceWorkerStatusCode* result) { |
| ASSERT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| @@ -653,14 +676,7 @@ IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest, StartNotFound) { |
| "/service_worker/nonexistent.js")); |
| // Start a worker for nonexistent URL. |
| - ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED; |
| - base::RunLoop start_run_loop; |
| - BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, |
| - base::Bind(&self::StartOnIOThread, this, |
| - start_run_loop.QuitClosure(), |
| - &status)); |
| - start_run_loop.Run(); |
| - ASSERT_EQ(SERVICE_WORKER_ERROR_START_WORKER_FAILED, status); |
| + StartWorker(SERVICE_WORKER_ERROR_START_WORKER_FAILED); |
| } |
| IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest, Install) { |
| @@ -1046,4 +1062,59 @@ IN_PROC_BROWSER_TEST_F(ServiceWorkerBrowserTest, CrossSiteTransfer) { |
| EXPECT_EQ(kOKTitle2, title_watcher2.WaitAndGetTitle()); |
| } |
| +class ServiceWorkerVersionBrowserV8CacheTest |
| + : public ServiceWorkerVersionBrowserTest, |
| + public ServiceWorkerVersion::Listener { |
| + public: |
| + typedef ServiceWorkerVersionBrowserV8CacheTest self; |
|
kinuko
2015/02/24 05:21:39
nit: typedef -> using in new code?
horo
2015/02/24 06:15:52
Done.
|
| + ~ServiceWorkerVersionBrowserV8CacheTest() override { |
| + if (version_) |
| + version_->RemoveListener(this); |
| + } |
| + void SetUpCommandLine(base::CommandLine* command_line) override { |
| + ServiceWorkerBrowserTest::SetUpCommandLine(command_line); |
| + command_line->AppendSwitchASCII(switches::kV8CacheOptions, "code"); |
| + } |
| + void SetUpRegistrationAndListenerOnIOThread(const std::string& worker_url) { |
| + SetUpRegistrationOnIOThread(worker_url); |
| + version_->AddListener(this); |
| + } |
| + |
| + protected: |
| + // ServiceWorkerVersion::Listener overrides |
| + void OnCachedMetadataUpdated(ServiceWorkerVersion* version) override { |
| + BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, |
| + cache_updated_closure_); |
| + } |
| + |
| + base::Closure cache_updated_closure_; |
| +}; |
| + |
| +IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserV8CacheTest, Restart) { |
| + RunOnIOThread(base::Bind(&self::SetUpRegistrationAndListenerOnIOThread, this, |
| + "/service_worker/worker.js")); |
| + |
| + base::RunLoop cached_metadata_run_loop; |
| + cache_updated_closure_ = cached_metadata_run_loop.QuitClosure(); |
| + |
| + // Start a worker. |
| + StartWorker(SERVICE_WORKER_OK); |
| + // Wait for the matadata is stored. |
| + cached_metadata_run_loop.Run(); |
|
kinuko
2015/02/24 05:21:39
nit: please insert an empty line here, and add a c
horo
2015/02/24 06:15:53
Done.
|
| + // Activate the worker. |
| + ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED; |
| + base::RunLoop acrivate_run_loop; |
| + BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, |
| + base::Bind(&self::ActivateOnIOThread, this, |
| + acrivate_run_loop.QuitClosure(), &status)); |
| + acrivate_run_loop.Run(); |
| + ASSERT_EQ(SERVICE_WORKER_OK, status); |
| + // Stop the worker. |
| + StopWorker(SERVICE_WORKER_OK); |
| + // Restart the worker. |
| + StartWorker(SERVICE_WORKER_OK); |
| + // Stop the worker. |
| + StopWorker(SERVICE_WORKER_OK); |
| +} |
| + |
| } // namespace content |