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 8e77613a746ceb688951c5040f9857d598a08f89..efaa1fca5621b17dd345dbd84aff2d474e4b7d88 100644 |
--- a/content/browser/service_worker/service_worker_browsertest.cc |
+++ b/content/browser/service_worker/service_worker_browsertest.cc |
@@ -275,7 +275,7 @@ void CountScriptResources( |
class ServiceWorkerBrowserTest : public ContentBrowserTest { |
protected: |
- typedef ServiceWorkerBrowserTest self; |
+ using self = ServiceWorkerBrowserTest; |
void SetUpCommandLine(base::CommandLine* command_line) override { |
command_line->AppendSwitch( |
@@ -321,7 +321,7 @@ class ServiceWorkerBrowserTest : public ContentBrowserTest { |
class EmbeddedWorkerBrowserTest : public ServiceWorkerBrowserTest, |
public EmbeddedWorkerInstance::Listener { |
public: |
- typedef EmbeddedWorkerBrowserTest self; |
+ using self = EmbeddedWorkerBrowserTest; |
EmbeddedWorkerBrowserTest() |
: last_worker_status_(EmbeddedWorkerInstance::STOPPED), |
@@ -341,7 +341,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( |
@@ -429,7 +428,7 @@ class EmbeddedWorkerBrowserTest : public ServiceWorkerBrowserTest, |
class ServiceWorkerVersionBrowserTest : public ServiceWorkerBrowserTest { |
public: |
- typedef ServiceWorkerVersionBrowserTest self; |
+ using self = ServiceWorkerVersionBrowserTest; |
~ServiceWorkerVersionBrowserTest() override {} |
@@ -534,6 +533,30 @@ class ServiceWorkerVersionBrowserTest : public ServiceWorkerBrowserTest { |
version_->OnPingTimeout(); |
} |
+ 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)); |
@@ -665,14 +688,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) { |
@@ -984,7 +1000,7 @@ IN_PROC_BROWSER_TEST_F(ServiceWorkerBrowserTest, ImportsBustMemcache) { |
class ServiceWorkerBlackBoxBrowserTest : public ServiceWorkerBrowserTest { |
public: |
- typedef ServiceWorkerBlackBoxBrowserTest self; |
+ using self = ServiceWorkerBlackBoxBrowserTest; |
void FindRegistrationOnIO(const GURL& document_url, |
ServiceWorkerStatusCode* status, |
@@ -1130,4 +1146,62 @@ IN_PROC_BROWSER_TEST_F(ServiceWorkerBrowserTest, CrossSiteTransfer) { |
EXPECT_EQ(kOKTitle2, title_watcher2.WaitAndGetTitle()); |
} |
+class ServiceWorkerVersionBrowserV8CacheTest |
+ : public ServiceWorkerVersionBrowserTest, |
+ public ServiceWorkerVersion::Listener { |
+ public: |
+ using self = ServiceWorkerVersionBrowserV8CacheTest; |
+ ~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. This run loop should finish when |
+ // OnCachedMetadataUpdated() is called. |
+ cached_metadata_run_loop.Run(); |
+ |
+ // 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 |