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 d07d19683c5d582b33b62827e41539a74b4245f9..97ff8f007f3b7eb957a5bfb00ad1d2e8ccb87aa6 100644 |
--- a/content/browser/service_worker/service_worker_browsertest.cc |
+++ b/content/browser/service_worker/service_worker_browsertest.cc |
@@ -39,6 +39,7 @@ struct FetchResult { |
ServiceWorkerStatusCode status; |
ServiceWorkerFetchEventResult result; |
ServiceWorkerResponse response; |
+ scoped_ptr<webkit_blob::BlobDataHandle> blob_data_handle; |
}; |
void RunAndQuit(const base::Closure& closure, |
@@ -76,6 +77,7 @@ void RunOnIOThread( |
// to pass to DispatchFetchEvent. |
void ReceiveFetchResult(BrowserThread::ID run_quit_thread, |
const base::Closure& quit, |
+ ChromeBlobStorageContext* blob_context, |
FetchResult* out_result, |
ServiceWorkerStatusCode actual_status, |
ServiceWorkerFetchEventResult actual_result, |
@@ -83,6 +85,11 @@ void ReceiveFetchResult(BrowserThread::ID run_quit_thread, |
out_result->status = actual_status; |
out_result->result = actual_result; |
out_result->response = actual_response; |
+ if (!actual_response.blob_uuid.empty()) { |
+ out_result->blob_data_handle = |
+ blob_context->context()->GetBlobDataFromUUID( |
+ actual_response.blob_uuid); |
+ } |
if (!quit.is_null()) |
BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, quit); |
} |
@@ -90,15 +97,16 @@ void ReceiveFetchResult(BrowserThread::ID run_quit_thread, |
ServiceWorkerVersion::FetchCallback CreateResponseReceiver( |
BrowserThread::ID run_quit_thread, |
const base::Closure& quit, |
+ ChromeBlobStorageContext* blob_context, |
FetchResult* result) { |
- return base::Bind(&ReceiveFetchResult, run_quit_thread, quit, result); |
+ return base::Bind(&ReceiveFetchResult, run_quit_thread, quit, |
+ make_scoped_refptr<ChromeBlobStorageContext>(blob_context), |
+ 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); |
+ webkit_blob::BlobDataHandle* blob_data_handle) { |
+ ASSERT_TRUE(blob_data_handle); |
ASSERT_EQ(1U, blob_data_handle->data()->items().size()); |
*body = std::string(blob_data_handle->data()->items()[0].bytes(), |
blob_data_handle->data()->items()[0].length()); |
@@ -300,8 +308,12 @@ class ServiceWorkerVersionBrowserTest : public ServiceWorkerBrowserTest { |
ASSERT_EQ(expected_status, status); |
} |
- void FetchOnRegisteredWorker(ServiceWorkerFetchEventResult* result, |
- ServiceWorkerResponse* response) { |
+ void FetchOnRegisteredWorker( |
+ ServiceWorkerFetchEventResult* result, |
+ ServiceWorkerResponse* response, |
+ scoped_ptr<webkit_blob::BlobDataHandle>* blob_data_handle) { |
+ blob_context_ = ChromeBlobStorageContext::GetFor( |
+ shell()->web_contents()->GetBrowserContext()); |
FetchResult fetch_result; |
fetch_result.status = SERVICE_WORKER_ERROR_FAILED; |
base::RunLoop fetch_run_loop; |
@@ -314,16 +326,18 @@ class ServiceWorkerVersionBrowserTest : public ServiceWorkerBrowserTest { |
fetch_run_loop.Run(); |
*result = fetch_result.result; |
*response = fetch_result.response; |
+ *blob_data_handle = fetch_result.blob_data_handle.Pass(); |
ASSERT_EQ(SERVICE_WORKER_OK, fetch_result.status); |
} |
- void FetchTestHelper(const std::string& worker_url, |
- ServiceWorkerFetchEventResult* result, |
- ServiceWorkerResponse* response) { |
+ void FetchTestHelper( |
+ const std::string& worker_url, |
+ ServiceWorkerFetchEventResult* result, |
+ ServiceWorkerResponse* response, |
+ scoped_ptr<webkit_blob::BlobDataHandle>* blob_data_handle) { |
RunOnIOThread( |
base::Bind(&self::SetUpRegistrationOnIOThread, this, worker_url)); |
- |
- FetchOnRegisteredWorker(result, response); |
+ FetchOnRegisteredWorker(result, response, blob_data_handle); |
} |
void SetUpRegistrationOnIOThread(const std::string& worker_url) { |
@@ -368,7 +382,8 @@ class ServiceWorkerVersionBrowserTest : public ServiceWorkerBrowserTest { |
std::map<std::string, std::string>()); |
version_->SetStatus(ServiceWorkerVersion::ACTIVE); |
version_->DispatchFetchEvent( |
- request, CreateResponseReceiver(BrowserThread::UI, done, result)); |
+ request, CreateResponseReceiver(BrowserThread::UI, done, |
+ blob_context_, result)); |
} |
void StopOnIOThread(const base::Closure& done, |
@@ -388,6 +403,7 @@ class ServiceWorkerVersionBrowserTest : public ServiceWorkerBrowserTest { |
protected: |
scoped_refptr<ServiceWorkerRegistration> registration_; |
scoped_refptr<ServiceWorkerVersion> version_; |
+ scoped_refptr<ChromeBlobStorageContext> blob_context_; |
}; |
IN_PROC_BROWSER_TEST_F(EmbeddedWorkerBrowserTest, StartAndStop) { |
@@ -480,7 +496,9 @@ IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest, |
IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest, FetchEvent_Response) { |
ServiceWorkerFetchEventResult result; |
ServiceWorkerResponse response; |
- FetchTestHelper("/service_worker/fetch_event.js", &result, &response); |
+ scoped_ptr<webkit_blob::BlobDataHandle> blob_data_handle; |
+ FetchTestHelper("/service_worker/fetch_event.js", |
+ &result, &response, &blob_data_handle); |
ASSERT_EQ(SERVICE_WORKER_FETCH_EVENT_RESULT_RESPONSE, result); |
EXPECT_EQ(301, response.status_code); |
EXPECT_EQ("Moved Permanently", response.status_text); |
@@ -489,12 +507,10 @@ IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest, FetchEvent_Response) { |
expected_headers["Content-Type"] = "text/html; charset=UTF-8"; |
EXPECT_EQ(expected_headers, response.headers); |
- scoped_refptr<ChromeBlobStorageContext> context = |
- ChromeBlobStorageContext::GetFor( |
- shell()->web_contents()->GetBrowserContext()); |
std::string body; |
RunOnIOThread( |
- base::Bind(&ReadResponseBody, &body, context, response.blob_uuid)); |
+ base::Bind(&ReadResponseBody, |
+ &body, base::Owned(blob_data_handle.release()))); |
EXPECT_EQ("This resource is gone. Gone, gone, gone.", body); |
} |
@@ -524,9 +540,9 @@ IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest, SyncEventHandled) { |
&self::SetUpRegistrationOnIOThread, this, "/service_worker/sync.js")); |
ServiceWorkerFetchEventResult result; |
ServiceWorkerResponse response; |
- |
+ scoped_ptr<webkit_blob::BlobDataHandle> blob_data_handle; |
// Should 404 before sync event. |
- FetchOnRegisteredWorker(&result, &response); |
+ FetchOnRegisteredWorker(&result, &response, &blob_data_handle); |
EXPECT_EQ(404, response.status_code); |
// Run the sync event. |
@@ -542,7 +558,7 @@ IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest, SyncEventHandled) { |
ASSERT_EQ(SERVICE_WORKER_OK, status); |
// Should 200 after sync event. |
- FetchOnRegisteredWorker(&result, &response); |
+ FetchOnRegisteredWorker(&result, &response, &blob_data_handle); |
EXPECT_EQ(200, response.status_code); |
} |