Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(82)

Unified Diff: content/browser/service_worker/service_worker_browsertest.cc

Issue 178343011: Support dispatching ServiceWorker FetchEvent and receiving response (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: plubming Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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..de4e854eaee37253f924fe344fd7d8321df53e6a 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,31 @@ void RunOnIOThread(const base::Closure& closure) {
run_loop.Run();
}
+struct FetchResult {
+ ServiceWorkerStatusCode status;
+ ServiceWorkerFetchEventResult result;
+ ServiceWorkerResponse response;
kinuko 2014/03/04 06:39:17 nit: 2 space indent
falken 2014/03/05 03:35:41 Done. I also ran git-cl format and it made several
+};
+
void ReceiveFetchResult(BrowserThread::ID run_quit_thread,
const base::Closure& quit,
- ServiceWorkerStatusCode* out_status,
- ServiceWorkerFetchResponse* out_response,
+ FetchResult* out_result,
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) {
+ FetchResult* result) {
return base::Bind(
- &ReceiveFetchResult, run_quit_thread, quit, out_status, out_response);
+ &ReceiveFetchResult, run_quit_thread, quit, result);
}
} // namespace
@@ -232,6 +240,25 @@ 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(
@@ -259,8 +286,7 @@ class ServiceWorkerVersionBrowserTest : public ServiceWorkerBrowserTest {
}
void FetchOnIOThread(const base::Closure& done,
- ServiceWorkerStatusCode* result,
- ServiceWorkerFetchResponse* message) {
+ FetchResult* result) {
ASSERT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::IO));
ServiceWorkerFetchRequest request(
embedded_test_server()->GetURL("/service_worker/empty.html"),
@@ -268,10 +294,9 @@ class ServiceWorkerVersionBrowserTest : public ServiceWorkerBrowserTest {
std::map<std::string, std::string>());
version_->DispatchFetchEvent(
request,
- CreateFetchResponseReceiver(BrowserThread::UI, done, result, message));
+ CreateResponseReceiver(BrowserThread::UI, done, result));
}
-
void StopOnIOThread(const base::Closure& done,
ServiceWorkerStatusCode* result) {
ASSERT_TRUE(version_);
@@ -360,19 +385,12 @@ 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(RESPONSE, result);
ASSERT_EQ(200, response.status_code);
ASSERT_EQ("OK", response.status_text);
ASSERT_EQ("GET", response.method);
@@ -380,4 +398,22 @@ 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(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(FALLBACK, result);
+}
+
} // namespace content

Powered by Google App Engine
This is Rietveld 408576698