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 a23481be5409daf8ff2abb0edb940307dd9b4e52..84c68fdd95b3cf924cc46c77719dda6311a5f4b6 100644 |
--- a/content/browser/service_worker/service_worker_browsertest.cc |
+++ b/content/browser/service_worker/service_worker_browsertest.cc |
@@ -45,6 +45,27 @@ void RunOnIOThread(const base::Closure& closure) { |
run_loop.Run(); |
} |
+void ReceiveFetchResult(BrowserThread::ID run_quit_thread, |
+ const base::Closure& quit, |
+ ServiceWorkerStatusCode* out_status, |
+ ServiceWorkerFetchResponse* out_response, |
+ ServiceWorkerStatusCode actual_status, |
+ const ServiceWorkerFetchResponse& actual_response) { |
+ *out_status = actual_status; |
+ *out_response = actual_response; |
+ if (!quit.is_null()) |
+ BrowserThread::PostTask(run_quit_thread, FROM_HERE, quit); |
+} |
+ |
+ServiceWorkerVersion::FetchCallback CreateFetchResponseReceiver( |
+ BrowserThread::ID run_quit_thread, |
+ const base::Closure& quit, |
+ ServiceWorkerStatusCode* out_status, |
+ ServiceWorkerFetchResponse* out_response) { |
+ return base::Bind( |
+ &ReceiveFetchResult, run_quit_thread, quit, out_status, out_response); |
+} |
+ |
} // namespace |
class ServiceWorkerBrowserTest : public ContentBrowserTest { |
@@ -231,12 +252,26 @@ class ServiceWorkerVersionBrowserTest : public ServiceWorkerBrowserTest { |
} |
void InstallOnIOThread(const base::Closure& done, |
- ServiceWorkerStatusCode* result) { |
+ ServiceWorkerStatusCode* result) { |
ASSERT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
version_->DispatchInstallEvent( |
-1, CreateReceiver(BrowserThread::UI, done, result)); |
} |
+ void FetchOnIOThread(const base::Closure& done, |
+ ServiceWorkerStatusCode* result, |
+ ServiceWorkerFetchResponse* message) { |
+ ASSERT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
+ ServiceWorkerFetchRequest request( |
+ embedded_test_server()->GetURL("/service_worker/empty.html"), |
+ "GET", |
+ std::map<std::string, std::string>()); |
+ version_->DispatchFetchEvent( |
+ request, |
+ CreateFetchResponseReceiver(BrowserThread::UI, done, result, message)); |
+ } |
+ |
+ |
void StopOnIOThread(const base::Closure& done, |
ServiceWorkerStatusCode* result) { |
ASSERT_TRUE(version_); |
@@ -325,4 +360,24 @@ IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest, |
InstallTestHelper("/service_worker/worker_install_rejected.js"); |
} |
+IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest, Fetch) { |
+ RunOnIOThread(base::Bind(&self::SetUpRegistrationOnIOThread, this, |
+ "/service_worker/worker.js")); |
+ |
+ ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED; |
+ ServiceWorkerFetchResponse response; |
+ base::RunLoop fetch_run_loop; |
+ BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, |
+ base::Bind(&self::FetchOnIOThread, this, |
+ fetch_run_loop.QuitClosure(), |
+ &status, &response)); |
+ fetch_run_loop.Run(); |
+ ASSERT_EQ(SERVICE_WORKER_OK, status); |
+ ASSERT_EQ(200, response.status_code); |
+ ASSERT_EQ("OK", response.status_text); |
+ ASSERT_EQ("GET", response.method); |
+ std::map<std::string, std::string> expected_headers; |
+ ASSERT_EQ(expected_headers, response.headers); |
+} |
+ |
} // namespace content |