diff options
author | falken@chromium.org <falken@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-06-04 11:26:10 +0000 |
---|---|---|
committer | falken@chromium.org <falken@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-06-04 11:26:10 +0000 |
commit | 21b6636c8fae9e12e7b0917f2d6eefefeb42e83d (patch) | |
tree | cfecadbc0e9302cbe18681815625829cabab1c4f /content | |
parent | 2115dd3283dbb02f8f7b78fad021297f8e4ebae5 (diff) | |
download | chromium_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')
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' }); |