Commit 979a56dc authored by kinuko@chromium.org's avatar kinuko@chromium.org

ServiceWorker: support Response.{status,statusText,headers} [chromium] (1/3)

Multi-sided patch:
1/3: chromium-side, THIS PATCH
2/3: blink-side, https://codereview.chromium.org/287363004/
3/3: chromium-side, cleanup & re-enable test (n/a yet)

BUG=376733
TEST=LayoutTests is to be added, content_browsertests is to be re-enabled
TBR=tsepez@chromium.org

Review URL: https://codereview.chromium.org/299003002

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@272865 0039d316-1c4b-4281-b951-d872f2087c98
parent 9341d8c8
...@@ -463,15 +463,19 @@ IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest, ...@@ -463,15 +463,19 @@ IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest,
SERVICE_WORKER_ERROR_INSTALL_WORKER_FAILED); SERVICE_WORKER_ERROR_INSTALL_WORKER_FAILED);
} }
IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest, FetchEvent_Response) { // TODO(kinuko): Re-enable this test once blink-side patch is rolled for
// http://crbug.com/376733
IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest,
DISABLED_FetchEvent_Response) {
ServiceWorkerFetchEventResult result; ServiceWorkerFetchEventResult result;
ServiceWorkerResponse response; ServiceWorkerResponse response;
FetchTestHelper("/service_worker/fetch_event.js", &result, &response); FetchTestHelper("/service_worker/fetch_event.js", &result, &response);
ASSERT_EQ(SERVICE_WORKER_FETCH_EVENT_RESULT_RESPONSE, result); ASSERT_EQ(SERVICE_WORKER_FETCH_EVENT_RESULT_RESPONSE, result);
EXPECT_EQ(200, response.status_code); EXPECT_EQ(301, response.status_code);
EXPECT_EQ("OK", response.status_text); EXPECT_EQ("Moved Permanently", response.status_text);
EXPECT_EQ("GET", response.method);
std::map<std::string, std::string> expected_headers; std::map<std::string, std::string> expected_headers;
expected_headers["Content-Language"] = "fi";
expected_headers["Content-Type"] = "text/html; charset=UTF-8";
EXPECT_EQ(expected_headers, response.headers); EXPECT_EQ(expected_headers, response.headers);
} }
...@@ -509,7 +513,10 @@ IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest, ...@@ -509,7 +513,10 @@ IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest,
ASSERT_EQ(SERVICE_WORKER_ERROR_ABORT, status); ASSERT_EQ(SERVICE_WORKER_ERROR_ABORT, status);
} }
IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest, SyncEventHandled) { // TODO(kinuko): Re-enable this test once blink-side patch is rolled for
// http://crbug.com/376733
IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest,
DISABLED_SyncEventHandled) {
CommandLine* command_line = CommandLine::ForCurrentProcess(); CommandLine* command_line = CommandLine::ForCurrentProcess();
command_line->AppendSwitch(switches::kEnableServiceWorkerSync); command_line->AppendSwitch(switches::kEnableServiceWorkerSync);
......
...@@ -39,7 +39,6 @@ IPC_ENUM_TRAITS_MAX_VALUE(content::ServiceWorkerFetchEventResult, ...@@ -39,7 +39,6 @@ IPC_ENUM_TRAITS_MAX_VALUE(content::ServiceWorkerFetchEventResult,
IPC_STRUCT_TRAITS_BEGIN(content::ServiceWorkerResponse) IPC_STRUCT_TRAITS_BEGIN(content::ServiceWorkerResponse)
IPC_STRUCT_TRAITS_MEMBER(status_code) IPC_STRUCT_TRAITS_MEMBER(status_code)
IPC_STRUCT_TRAITS_MEMBER(status_text) IPC_STRUCT_TRAITS_MEMBER(status_text)
IPC_STRUCT_TRAITS_MEMBER(method)
IPC_STRUCT_TRAITS_MEMBER(headers) IPC_STRUCT_TRAITS_MEMBER(headers)
IPC_STRUCT_TRAITS_END() IPC_STRUCT_TRAITS_END()
......
...@@ -28,7 +28,14 @@ ServiceWorkerResponse::ServiceWorkerResponse( ...@@ -28,7 +28,14 @@ ServiceWorkerResponse::ServiceWorkerResponse(
const std::map<std::string, std::string>& headers) const std::map<std::string, std::string>& headers)
: status_code(status_code), : status_code(status_code),
status_text(status_text), status_text(status_text),
method(method), headers(headers) {}
ServiceWorkerResponse::ServiceWorkerResponse(
int status_code,
const std::string& status_text,
const std::map<std::string, std::string>& headers)
: status_code(status_code),
status_text(status_text),
headers(headers) {} headers(headers) {}
ServiceWorkerResponse::~ServiceWorkerResponse() {} ServiceWorkerResponse::~ServiceWorkerResponse() {}
......
...@@ -59,15 +59,18 @@ enum ServiceWorkerFetchEventResult { ...@@ -59,15 +59,18 @@ enum ServiceWorkerFetchEventResult {
// Represents a response to a fetch. // Represents a response to a fetch.
struct CONTENT_EXPORT ServiceWorkerResponse { struct CONTENT_EXPORT ServiceWorkerResponse {
ServiceWorkerResponse(); ServiceWorkerResponse();
// TODO(kinuko): Deprecate this once blink side patch is rolled.
ServiceWorkerResponse(int status_code, ServiceWorkerResponse(int status_code,
const std::string& status_text, const std::string& status_text,
const std::string& method, const std::string& method,
const std::map<std::string, std::string>& headers); const std::map<std::string, std::string>& headers);
ServiceWorkerResponse(int status_code,
const std::string& status_text,
const std::map<std::string, std::string>& headers);
~ServiceWorkerResponse(); ~ServiceWorkerResponse();
int status_code; int status_code;
std::string status_text; std::string status_text;
std::string method;
std::map<std::string, std::string> headers; std::map<std::string, std::string> headers;
}; };
......
...@@ -7,6 +7,8 @@ ...@@ -7,6 +7,8 @@
#include "base/lazy_instance.h" #include "base/lazy_instance.h"
#include "base/message_loop/message_loop_proxy.h" #include "base/message_loop/message_loop_proxy.h"
#include "base/pickle.h" #include "base/pickle.h"
#include "base/strings/string16.h"
#include "base/strings/utf_string_conversions.h"
#include "base/threading/thread_local.h" #include "base/threading/thread_local.h"
#include "content/child/request_extra_data.h" #include "content/child/request_extra_data.h"
#include "content/child/service_worker/service_worker_network_provider.h" #include "content/child/service_worker/service_worker_network_provider.h"
...@@ -245,10 +247,25 @@ void EmbeddedWorkerContextClient::didHandleFetchEvent( ...@@ -245,10 +247,25 @@ void EmbeddedWorkerContextClient::didHandleFetchEvent(
int request_id, int request_id,
const blink::WebServiceWorkerResponse& web_response) { const blink::WebServiceWorkerResponse& web_response) {
DCHECK(script_context_); DCHECK(script_context_);
#ifdef NEW_SERVICE_WORKER_RESPONSE_INTERFACE
std::map<std::string, std::string> headers;
const blink::WebVector<blink::WebString>& header_keys =
web_response.getHeaderKeys();
for (size_t i = 0; i < header_keys.size(); ++i) {
const base::string16& key = header_keys[i];
headers[base::UTF16ToUTF8(key)] =
base::UTF16ToUTF8(web_response.getHeader(key));
}
ServiceWorkerResponse response(web_response.status(),
web_response.statusText().utf8(),
headers);
#else
// TODO(kinuko): Cleanup this once blink side patch is rolled.
ServiceWorkerResponse response(web_response.statusCode(), ServiceWorkerResponse response(web_response.statusCode(),
web_response.statusText().utf8(), web_response.statusText().utf8(),
web_response.method().utf8(), web_response.method().utf8(),
std::map<std::string, std::string>()); std::map<std::string, std::string>());
#endif
script_context_->DidHandleFetchEvent( script_context_->DidHandleFetchEvent(
request_id, SERVICE_WORKER_FETCH_EVENT_RESULT_RESPONSE, response); request_id, SERVICE_WORKER_FETCH_EVENT_RESULT_RESPONSE, response);
} }
......
...@@ -3,14 +3,13 @@ ...@@ -3,14 +3,13 @@
// found in the LICENSE file. // found in the LICENSE file.
this.onfetch = function(event) { this.onfetch = function(event) {
response = new Response({ var headers = new HeaderMap;
statusCode: 200, headers.set('Content-Language', 'fi');
statusText: 'OK', headers.set('Content-Type', 'text/html; charset=UTF-8');
method: 'GET', var response = new Response({
headers: { status: 301,
'Content-Language': 'fi', statusText: 'Moved Permanently',
'Content-Type': 'text/html; charset=UTF-8' headers: headers
}
}); });
event.respondWith(new Promise(function(r) { event.respondWith(new Promise(function(r) {
......
...@@ -6,13 +6,8 @@ var code = 404; ...@@ -6,13 +6,8 @@ var code = 404;
this.onfetch = function(event) { this.onfetch = function(event) {
response = new Response({ response = new Response({
statusCode: code, status: code,
statusText: 'OK', statusText: 'OK'
method: 'GET',
headers: {
'Content-Language': 'fi',
'Content-Type': 'text/html; charset=UTF-8'
}
}); });
event.respondWith(new Promise(function(r) { event.respondWith(new Promise(function(r) {
...@@ -22,4 +17,4 @@ this.onfetch = function(event) { ...@@ -22,4 +17,4 @@ this.onfetch = function(event) {
this.onsync = function(event) { this.onsync = function(event) {
code = 200; code = 200;
}; };
\ No newline at end of file
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment