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 84c68fdd95b3cf924cc46c77719dda6311a5f4b6..b2611f2e619a1915f4bb41c40308c944867409f4 100644 |
| --- a/content/browser/service_worker/service_worker_browsertest.cc |
| +++ b/content/browser/service_worker/service_worker_browsertest.cc |
| @@ -14,6 +14,8 @@ |
| #include "content/browser/service_worker/service_worker_test_utils.h" |
| #include "content/browser/service_worker/service_worker_version.h" |
| #include "content/common/service_worker/service_worker_messages.h" |
| +#include "content/common/service_worker/service_worker_status_code.h" |
| +#include "content/common/service_worker/service_worker_types.h" |
| #include "content/public/browser/browser_context.h" |
| #include "content/public/browser/browser_thread.h" |
| #include "content/public/browser/render_process_host.h" |
| @@ -45,25 +47,30 @@ void RunOnIOThread(const base::Closure& closure) { |
| run_loop.Run(); |
| } |
| +struct FetchResult { |
|
Charlie Reis
2014/03/05 21:00:34
Style: structs should go above functions.
falken
2014/03/06 15:58:54
Done.
|
| + ServiceWorkerStatusCode status; |
| + ServiceWorkerFetchEventResult result; |
| + ServiceWorkerResponse response; |
| +}; |
| + |
| void ReceiveFetchResult(BrowserThread::ID run_quit_thread, |
| const base::Closure& quit, |
| - ServiceWorkerStatusCode* out_status, |
| - ServiceWorkerFetchResponse* out_response, |
| + FetchResult* out_result, |
|
Charlie Reis
2014/03/05 21:00:34
Style: output parameters should come after input p
falken
2014/03/06 15:58:54
I think I need this ordering so Bind can be used i
Charlie Reis
2014/03/06 18:59:05
Ah, ok. Maybe call that out in a comment?
falken
2014/03/07 01:56:51
Done.
|
| ServiceWorkerStatusCode actual_status, |
| - const ServiceWorkerFetchResponse& actual_response) { |
| - *out_status = actual_status; |
| - *out_response = actual_response; |
| + ServiceWorkerFetchEventResult actual_result, |
| + const ServiceWorkerResponse& actual_response) { |
| + out_result->status = actual_status; |
| + out_result->result = actual_result; |
| + out_result->response = actual_response; |
| if (!quit.is_null()) |
| - BrowserThread::PostTask(run_quit_thread, FROM_HERE, quit); |
| + BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, quit); |
| } |
| -ServiceWorkerVersion::FetchCallback CreateFetchResponseReceiver( |
| +ServiceWorkerVersion::FetchCallback CreateResponseReceiver( |
| 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); |
| + FetchResult* result) { |
| + return base::Bind(&ReceiveFetchResult, run_quit_thread, quit, result); |
| } |
| } // namespace |
| @@ -232,6 +239,27 @@ class ServiceWorkerVersionBrowserTest : public ServiceWorkerBrowserTest { |
| ASSERT_EQ(SERVICE_WORKER_OK, status); |
| } |
| + void FetchTestHelper(const std::string& worker_url, |
| + ServiceWorkerFetchEventResult* result, |
| + ServiceWorkerResponse* response) { |
| + RunOnIOThread( |
| + base::Bind(&self::SetUpRegistrationOnIOThread, this, worker_url)); |
| + |
| + FetchResult fetch_result; |
| + fetch_result.status = SERVICE_WORKER_ERROR_FAILED; |
| + base::RunLoop fetch_run_loop; |
| + BrowserThread::PostTask(BrowserThread::IO, |
| + FROM_HERE, |
| + base::Bind(&self::FetchOnIOThread, |
| + this, |
| + fetch_run_loop.QuitClosure(), |
| + &fetch_result)); |
| + fetch_run_loop.Run(); |
| + ASSERT_EQ(SERVICE_WORKER_OK, fetch_result.status); |
| + *result = fetch_result.result; |
| + *response = fetch_result.response; |
| + } |
| + |
| void SetUpRegistrationOnIOThread(const std::string& worker_url) { |
| const int64 version_id = 1L; |
| registration_ = new ServiceWorkerRegistration( |
| @@ -258,20 +286,16 @@ class ServiceWorkerVersionBrowserTest : public ServiceWorkerBrowserTest { |
| -1, CreateReceiver(BrowserThread::UI, done, result)); |
| } |
| - void FetchOnIOThread(const base::Closure& done, |
| - ServiceWorkerStatusCode* result, |
| - ServiceWorkerFetchResponse* message) { |
| + void FetchOnIOThread(const base::Closure& done, FetchResult* result) { |
| 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)); |
| + request, CreateResponseReceiver(BrowserThread::UI, done, result)); |
| } |
| - |
| void StopOnIOThread(const base::Closure& done, |
| ServiceWorkerStatusCode* result) { |
| ASSERT_TRUE(version_); |
| @@ -360,19 +384,11 @@ 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); |
| +IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest, FetchEvent_Response) { |
| + ServiceWorkerFetchEventResult result; |
| + ServiceWorkerResponse response; |
| + FetchTestHelper("/service_worker/fetch_event.js", &result, &response); |
| + ASSERT_EQ(SERVICE_WORKER_FETCH_RESULT_RESPONSE, result); |
| ASSERT_EQ(200, response.status_code); |
| ASSERT_EQ("OK", response.status_text); |
| ASSERT_EQ("GET", response.method); |
| @@ -380,4 +396,20 @@ IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest, Fetch) { |
| ASSERT_EQ(expected_headers, response.headers); |
| } |
| +IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest, |
| + FetchEvent_FallbackToNative) { |
| + ServiceWorkerFetchEventResult result; |
| + ServiceWorkerResponse response; |
| + FetchTestHelper( |
| + "/service_worker/fetch_event_fallback.js", &result, &response); |
| + ASSERT_EQ(SERVICE_WORKER_FETCH_RESULT_FALLBACK, result); |
| +} |
| + |
| +IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest, FetchEvent_Rejected) { |
| + ServiceWorkerFetchEventResult result; |
| + ServiceWorkerResponse response; |
| + FetchTestHelper("/service_worker/fetch_event_error.js", &result, &response); |
| + ASSERT_EQ(SERVICE_WORKER_FETCH_RESULT_FALLBACK, result); |
| +} |
| + |
| } // namespace content |