Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(396)

Unified Diff: content/browser/service_worker/service_worker_cache_listener.cc

Issue 622833002: ServiceWorkerCache: Support response body in blob form. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@opacity
Patch Set: Rebase Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/browser/service_worker/service_worker_cache_listener.cc
diff --git a/content/browser/service_worker/service_worker_cache_listener.cc b/content/browser/service_worker/service_worker_cache_listener.cc
index 0ea9a6ecaadf8f687366d5d4beda0ee3cd68b8f5..bd52b1a52baca83f07b7be45fc25a1e2e94702a8 100644
--- a/content/browser/service_worker/service_worker_cache_listener.cc
+++ b/content/browser/service_worker/service_worker_cache_listener.cc
@@ -105,6 +105,7 @@ bool ServiceWorkerCacheListener::OnMessageReceived(
OnCacheBatch)
IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_CacheClosed,
OnCacheClosed)
+ IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_BlobDataHandled, OnBlobDataHandled)
IPC_MESSAGE_UNHANDLED(handled = false)
IPC_END_MESSAGE_MAP()
@@ -269,7 +270,8 @@ void ServiceWorkerCacheListener::OnCacheBatch(
operation.response.status_text,
operation.response.response_type,
operation.response.headers,
- operation.response.blob_uuid));
+ operation.response.blob_uuid,
+ operation.response.blob_size));
cache->Put(scoped_request.Pass(),
scoped_response.Pass(),
base::Bind(&ServiceWorkerCacheListener::OnCachePutCallback,
@@ -287,6 +289,10 @@ void ServiceWorkerCacheListener::OnCacheClosed(int cache_id) {
DropCacheReference(cache_id);
}
+void ServiceWorkerCacheListener::OnBlobDataHandled(const base::string16& uuid) {
michaeln 2014/10/06 21:01:33 std::string?
jkarlin 2014/10/07 12:48:17 I agree that we should be sending strings instead
+ DropBlobDataHandle(UTF16ToASCII(uuid));
+}
+
void ServiceWorkerCacheListener::Send(const IPC::Message& message) {
version_->embedded_worker()->SendMessage(message);
}
@@ -377,17 +383,9 @@ void ServiceWorkerCacheListener::OnCacheMatchCallback(
return;
}
- // TODO(jkarlin): Once there is a message acknowledging the blob handle from
- // the renderer then store the blob_data_handle until the message is received.
- // For now just drop it.
- Send(ServiceWorkerMsg_CacheMatchSuccess(
- request_id,
- ServiceWorkerResponse(response->url,
- response->status_code,
- response->status_text,
- response->response_type,
- response->headers,
- "")));
+ StoreBlobDataHandle(blob_data_handle.Pass());
+
+ Send(ServiceWorkerMsg_CacheMatchSuccess(request_id, *response));
}
void ServiceWorkerCacheListener::OnCacheKeysCallback(
@@ -437,9 +435,8 @@ void ServiceWorkerCacheListener::OnCachePutCallback(
return;
}
- // TODO(jkarlin): Once there is a message acknowledging the blob handle from
- // the renderer then store the blob_data_handle until the message is received.
- // For now just drop it.
+ StoreBlobDataHandle(blob_data_handle.Pass());
+
std::vector<ServiceWorkerResponse> responses;
responses.push_back(*response);
Send(ServiceWorkerMsg_CacheBatchSuccess(request_id, responses));
@@ -457,4 +454,22 @@ void ServiceWorkerCacheListener::DropCacheReference(CacheID cache_id) {
id_to_cache_map_.erase(cache_id);
}
+void ServiceWorkerCacheListener::StoreBlobDataHandle(
+ scoped_ptr<storage::BlobDataHandle> blob_data_handle) {
+ std::pair<UUIDToBlobDataHandleList::iterator, bool> rv =
+ blob_handle_store_.insert(std::make_pair(
+ blob_data_handle->uuid(), std::list<storage::BlobDataHandle>()));
+ rv.first->second.push_front(storage::BlobDataHandle(*blob_data_handle));
+}
+
+void ServiceWorkerCacheListener::DropBlobDataHandle(std::string uuid) {
+ UUIDToBlobDataHandleList::iterator it = blob_handle_store_.find(uuid);
+ if (it == blob_handle_store_.end())
+ return;
+ DCHECK(!it->second.empty());
+ it->second.pop_front();
+ if (it->second.empty())
+ blob_handle_store_.erase(it);
+}
+
} // namespace content

Powered by Google App Engine
This is Rietveld 408576698