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,
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;
ServiceWorkerResponse response;
FetchTestHelper("/service_worker/fetch_event.js", &result, &response);
ASSERT_EQ(SERVICE_WORKER_FETCH_EVENT_RESULT_RESPONSE, result);
EXPECT_EQ(200, response.status_code);
EXPECT_EQ("OK", response.status_text);
EXPECT_EQ("GET", response.method);
EXPECT_EQ(301, response.status_code);
EXPECT_EQ("Moved Permanently", response.status_text);
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);
}
......@@ -509,7 +513,10 @@ IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest,
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();
command_line->AppendSwitch(switches::kEnableServiceWorkerSync);
......
......@@ -39,7 +39,6 @@ IPC_ENUM_TRAITS_MAX_VALUE(content::ServiceWorkerFetchEventResult,
IPC_STRUCT_TRAITS_BEGIN(content::ServiceWorkerResponse)
IPC_STRUCT_TRAITS_MEMBER(status_code)
IPC_STRUCT_TRAITS_MEMBER(status_text)
IPC_STRUCT_TRAITS_MEMBER(method)
IPC_STRUCT_TRAITS_MEMBER(headers)
IPC_STRUCT_TRAITS_END()
......
......@@ -28,7 +28,14 @@ ServiceWorkerResponse::ServiceWorkerResponse(
const std::map<std::string, std::string>& headers)
: status_code(status_code),
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) {}
ServiceWorkerResponse::~ServiceWorkerResponse() {}
......
......@@ -59,15 +59,18 @@ enum ServiceWorkerFetchEventResult {
// Represents a response to a fetch.
struct CONTENT_EXPORT ServiceWorkerResponse {
ServiceWorkerResponse();
// TODO(kinuko): Deprecate this once blink side patch is rolled.
ServiceWorkerResponse(int status_code,
const std::string& status_text,
const std::string& method,
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();
int status_code;
std::string status_text;
std::string method;
std::map<std::string, std::string> headers;
};
......
......@@ -7,6 +7,8 @@
#include "base/lazy_instance.h"
#include "base/message_loop/message_loop_proxy.h"
#include "base/pickle.h"
#include "base/strings/string16.h"
#include "base/strings/utf_string_conversions.h"
#include "base/threading/thread_local.h"
#include "content/child/request_extra_data.h"
#include "content/child/service_worker/service_worker_network_provider.h"
......@@ -245,10 +247,25 @@ void EmbeddedWorkerContextClient::didHandleFetchEvent(
int request_id,
const blink::WebServiceWorkerResponse& web_response) {
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(),
web_response.statusText().utf8(),
web_response.method().utf8(),
std::map<std::string, std::string>());
#endif
script_context_->DidHandleFetchEvent(
request_id, SERVICE_WORKER_FETCH_EVENT_RESULT_RESPONSE, response);
}
......
......@@ -3,14 +3,13 @@
// found in the LICENSE file.
this.onfetch = function(event) {
response = new Response({
statusCode: 200,
statusText: 'OK',
method: 'GET',
headers: {
'Content-Language': 'fi',
'Content-Type': 'text/html; charset=UTF-8'
}
var headers = new HeaderMap;
headers.set('Content-Language', 'fi');
headers.set('Content-Type', 'text/html; charset=UTF-8');
var response = new Response({
status: 301,
statusText: 'Moved Permanently',
headers: headers
});
event.respondWith(new Promise(function(r) {
......
......@@ -6,13 +6,8 @@ var code = 404;
this.onfetch = function(event) {
response = new Response({
statusCode: code,
statusText: 'OK',
method: 'GET',
headers: {
'Content-Language': 'fi',
'Content-Type': 'text/html; charset=UTF-8'
}
status: code,
statusText: 'OK'
});
event.respondWith(new Promise(function(r) {
......@@ -22,4 +17,4 @@ this.onfetch = function(event) {
this.onsync = function(event) {
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