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 |