summaryrefslogtreecommitdiffstats
path: root/content
diff options
context:
space:
mode:
authorfalken@chromium.org <falken@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-06-04 11:26:10 +0000
committerfalken@chromium.org <falken@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-06-04 11:26:10 +0000
commit21b6636c8fae9e12e7b0917f2d6eefefeb42e83d (patch)
treecfecadbc0e9302cbe18681815625829cabab1c4f /content
parent2115dd3283dbb02f8f7b78fad021297f8e4ebae5 (diff)
downloadchromium_src-21b6636c8fae9e12e7b0917f2d6eefefeb42e83d.zip
chromium_src-21b6636c8fae9e12e7b0917f2d6eefefeb42e83d.tar.gz
chromium_src-21b6636c8fae9e12e7b0917f2d6eefefeb42e83d.tar.bz2
ServiceWorker: Read the blob from SW's response to a fetch event
Also remove browser tests for the fetch event that will be replaced with layout tests in the next Blink patch. Since layout tests can't test HTTP response headers, one of the browser tests remains. Multi-sided patch to implement blob-type fetch event response bodies: #1: blink-side: https://codereview.chromium.org/307063002/ #2: chromium-side, THIS PATCH #3: blink-side: https://codereview.chromium.org/304233017 BUG=379074 Review URL: https://codereview.chromium.org/304153015 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@274773 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content')
-rw-r--r--content/browser/service_worker/service_worker_browsertest.cc37
-rw-r--r--content/renderer/service_worker/embedded_worker_context_client.cc2
-rw-r--r--content/test/data/service_worker/fetch_event.js3
-rw-r--r--content/test/data/service_worker/fetch_event_error.js9
-rw-r--r--content/test/data/service_worker/fetch_event_fallback.js8
-rw-r--r--content/test/data/service_worker/sync.js2
6 files changed, 26 insertions, 35 deletions
diff --git a/content/browser/service_worker/service_worker_browsertest.cc b/content/browser/service_worker/service_worker_browsertest.cc
index 18c5f91..a2c4521 100644
--- a/content/browser/service_worker/service_worker_browsertest.cc
+++ b/content/browser/service_worker/service_worker_browsertest.cc
@@ -6,6 +6,7 @@
#include "base/callback.h"
#include "base/command_line.h"
#include "base/run_loop.h"
+#include "content/browser/fileapi/chrome_blob_storage_context.h"
#include "content/browser/service_worker/embedded_worker_instance.h"
#include "content/browser/service_worker/embedded_worker_registry.h"
#include "content/browser/service_worker/service_worker_context_core.h"
@@ -26,6 +27,9 @@
#include "content/public/test/content_browser_test_utils.h"
#include "content/shell/browser/shell.h"
#include "net/test/embedded_test_server/embedded_test_server.h"
+#include "webkit/browser/blob/blob_data_handle.h"
+#include "webkit/browser/blob/blob_storage_context.h"
+#include "webkit/common/blob/blob_data.h"
namespace content {
@@ -90,6 +94,17 @@ ServiceWorkerVersion::FetchCallback CreateResponseReceiver(
return base::Bind(&ReceiveFetchResult, run_quit_thread, quit, result);
}
+void ReadResponseBody(std::string* body,
+ scoped_refptr<ChromeBlobStorageContext> context,
+ std::string blob_uuid) {
+ scoped_ptr<webkit_blob::BlobDataHandle> blob_data_handle =
+ context->context()->GetBlobDataFromUUID(blob_uuid);
+ ASSERT_EQ(1U, blob_data_handle->data()->items().size());
+ *body = std::string(blob_data_handle->data()->items()[0].bytes(),
+ 0,
+ blob_data_handle->data()->items()[0].length());
+}
+
} // namespace
class ServiceWorkerBrowserTest : public ContentBrowserTest {
@@ -474,22 +489,14 @@ IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest, FetchEvent_Response) {
expected_headers["Content-Language"] = "fi";
expected_headers["Content-Type"] = "text/html; charset=UTF-8";
EXPECT_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_EVENT_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_EVENT_RESULT_FALLBACK, result);
+ scoped_refptr<ChromeBlobStorageContext> context =
+ ChromeBlobStorageContext::GetFor(
+ shell()->web_contents()->GetBrowserContext());
+ std::string body;
+ RunOnIOThread(
+ base::Bind(&ReadResponseBody, &body, context, response.blob_uuid));
+ EXPECT_EQ("This resource is gone. Gone, gone, gone.", body);
}
IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest,
diff --git a/content/renderer/service_worker/embedded_worker_context_client.cc b/content/renderer/service_worker/embedded_worker_context_client.cc
index 509c85f..ea4072d 100644
--- a/content/renderer/service_worker/embedded_worker_context_client.cc
+++ b/content/renderer/service_worker/embedded_worker_context_client.cc
@@ -258,7 +258,7 @@ void EmbeddedWorkerContextClient::didHandleFetchEvent(
ServiceWorkerResponse response(web_response.status(),
web_response.statusText().utf8(),
headers,
- std::string());
+ web_response.blobUUID().utf8());
script_context_->DidHandleFetchEvent(
request_id, SERVICE_WORKER_FETCH_EVENT_RESULT_RESPONSE, response);
}
diff --git a/content/test/data/service_worker/fetch_event.js b/content/test/data/service_worker/fetch_event.js
index 503806b..6d7da39 100644
--- a/content/test/data/service_worker/fetch_event.js
+++ b/content/test/data/service_worker/fetch_event.js
@@ -6,7 +6,8 @@ this.onfetch = function(event) {
var headers = new HeaderMap;
headers.set('Content-Language', 'fi');
headers.set('Content-Type', 'text/html; charset=UTF-8');
- var response = new Response({
+ var blob = new Blob(["This resource is gone. Gone, gone, gone."]);
+ var response = new Response(blob, {
status: 301,
statusText: 'Moved Permanently',
headers: headers
diff --git a/content/test/data/service_worker/fetch_event_error.js b/content/test/data/service_worker/fetch_event_error.js
deleted file mode 100644
index e6a30a7..0000000
--- a/content/test/data/service_worker/fetch_event_error.js
+++ /dev/null
@@ -1,9 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-this.onfetch = function(event) {
- event.respondWith(new Promise(resolve, reject) {
- reject('rejected!');
- });
-};
diff --git a/content/test/data/service_worker/fetch_event_fallback.js b/content/test/data/service_worker/fetch_event_fallback.js
deleted file mode 100644
index 094bec9..0000000
--- a/content/test/data/service_worker/fetch_event_fallback.js
+++ /dev/null
@@ -1,8 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-this.onfetch = function(event) {
- event.respondWith('This is not a Response object, so browser should ' +
- 'fallback to native');
-};
diff --git a/content/test/data/service_worker/sync.js b/content/test/data/service_worker/sync.js
index 02da273..941ea2d 100644
--- a/content/test/data/service_worker/sync.js
+++ b/content/test/data/service_worker/sync.js
@@ -5,7 +5,7 @@
var code = 404;
this.onfetch = function(event) {
- response = new Response({
+ response = new Response(new Blob(), {
status: code,
statusText: 'OK'
});