| Index: content/browser/service_worker/service_worker_cache.cc
|
| diff --git a/content/browser/service_worker/service_worker_cache.cc b/content/browser/service_worker/service_worker_cache.cc
|
| index 3011356f4f17f3b81f8ae0867ae561e265da2fd2..0ca7e9d2e5ebaca4fe0021097a6f2b168c1d8f99 100644
|
| --- a/content/browser/service_worker/service_worker_cache.cc
|
| +++ b/content/browser/service_worker/service_worker_cache.cc
|
| @@ -183,10 +183,11 @@ class ServiceWorkerCache::BlobReader : public net::URLRequest::Delegate {
|
| weak_ptr_factory_(this) {}
|
|
|
| // |entry| is passed to the callback once complete.
|
| - void StreamBlobToCache(disk_cache::ScopedEntryPtr entry,
|
| - net::URLRequestContext* request_context,
|
| - scoped_ptr<storage::BlobDataHandle> blob_data_handle,
|
| - const EntryAndBoolCallback& callback) {
|
| + void StreamBlobToCache(
|
| + disk_cache::ScopedEntryPtr entry,
|
| + net::URLRequestContext* request_context,
|
| + scoped_ptr<storage::BlobDataSnapshotHandle> blob_data_handle,
|
| + const EntryAndBoolCallback& callback) {
|
| DCHECK(entry);
|
| entry_ = entry.Pass();
|
| callback_ = callback;
|
| @@ -343,7 +344,7 @@ struct ServiceWorkerCache::MatchContext {
|
|
|
| // Output
|
| scoped_ptr<ServiceWorkerResponse> response;
|
| - scoped_refptr<storage::BlobData> blob_data;
|
| + scoped_ptr<storage::BlobDataBuilder> blob_data;
|
|
|
| // For reading the cache entry data into a blob.
|
| scoped_refptr<net::IOBufferWithSize> response_body_buffer;
|
| @@ -358,7 +359,7 @@ struct ServiceWorkerCache::PutContext {
|
| const GURL& origin,
|
| scoped_ptr<ServiceWorkerFetchRequest> request,
|
| scoped_ptr<ServiceWorkerResponse> response,
|
| - scoped_ptr<storage::BlobDataHandle> blob_data_handle,
|
| + scoped_ptr<storage::BlobDataSnapshotHandle> blob_data_handle,
|
| const ServiceWorkerCache::ResponseCallback& callback,
|
| net::URLRequestContext* request_context,
|
| const scoped_refptr<storage::QuotaManagerProxy>& quota_manager_proxy)
|
| @@ -379,7 +380,7 @@ struct ServiceWorkerCache::PutContext {
|
| GURL origin;
|
| scoped_ptr<ServiceWorkerFetchRequest> request;
|
| scoped_ptr<ServiceWorkerResponse> response;
|
| - scoped_ptr<storage::BlobDataHandle> blob_data_handle;
|
| + scoped_ptr<storage::BlobDataSnapshotHandle> blob_data_handle;
|
| ServiceWorkerCache::ResponseCallback callback;
|
| net::URLRequestContext* request_context;
|
| scoped_refptr<storage::QuotaManagerProxy> quota_manager_proxy;
|
| @@ -389,7 +390,7 @@ struct ServiceWorkerCache::PutContext {
|
| disk_cache::Entry* cache_entry;
|
|
|
| // The BlobDataHandle for the output ServiceWorkerResponse.
|
| - scoped_ptr<storage::BlobDataHandle> out_blob_data_handle;
|
| + scoped_ptr<storage::BlobDataSnapshotHandle> out_blob_data_handle;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(PutContext);
|
| };
|
| @@ -432,13 +433,13 @@ void ServiceWorkerCache::Put(scoped_ptr<ServiceWorkerFetchRequest> request,
|
| ResponseCallback pending_callback =
|
| base::Bind(&ServiceWorkerCache::PendingResponseCallback,
|
| weak_ptr_factory_.GetWeakPtr(), callback);
|
| - scoped_ptr<storage::BlobDataHandle> blob_data_handle;
|
| + scoped_ptr<storage::BlobDataSnapshotHandle> blob_data_handle;
|
|
|
| if (!response->blob_uuid.empty()) {
|
| if (!blob_storage_context_) {
|
| pending_callback.Run(ErrorTypeStorage,
|
| scoped_ptr<ServiceWorkerResponse>(),
|
| - scoped_ptr<storage::BlobDataHandle>());
|
| + scoped_ptr<storage::BlobDataSnapshotHandle>());
|
| return;
|
| }
|
| blob_data_handle =
|
| @@ -446,7 +447,7 @@ void ServiceWorkerCache::Put(scoped_ptr<ServiceWorkerFetchRequest> request,
|
| if (!blob_data_handle) {
|
| pending_callback.Run(ErrorTypeStorage,
|
| scoped_ptr<ServiceWorkerResponse>(),
|
| - scoped_ptr<storage::BlobDataHandle>());
|
| + scoped_ptr<storage::BlobDataSnapshotHandle>());
|
| return;
|
| }
|
| }
|
| @@ -490,7 +491,7 @@ void ServiceWorkerCache::Match(scoped_ptr<ServiceWorkerFetchRequest> request,
|
| case BACKEND_CLOSED:
|
| pending_callback.Run(ErrorTypeStorage,
|
| scoped_ptr<ServiceWorkerResponse>(),
|
| - scoped_ptr<storage::BlobDataHandle>());
|
| + scoped_ptr<storage::BlobDataSnapshotHandle>());
|
| return;
|
| case BACKEND_OPEN:
|
| DCHECK(backend_);
|
| @@ -661,9 +662,10 @@ void ServiceWorkerCache::MatchDidOpenEntry(
|
| scoped_ptr<MatchContext> match_context,
|
| int rv) {
|
| if (rv != net::OK) {
|
| - match_context->original_callback.Run(ServiceWorkerCache::ErrorTypeNotFound,
|
| - scoped_ptr<ServiceWorkerResponse>(),
|
| - scoped_ptr<storage::BlobDataHandle>());
|
| + match_context->original_callback.Run(
|
| + ServiceWorkerCache::ErrorTypeNotFound,
|
| + scoped_ptr<ServiceWorkerResponse>(),
|
| + scoped_ptr<storage::BlobDataSnapshotHandle>());
|
| return;
|
| }
|
|
|
| @@ -682,9 +684,10 @@ void ServiceWorkerCache::MatchDidReadMetadata(
|
| scoped_ptr<MatchContext> match_context,
|
| scoped_ptr<ServiceWorkerCacheMetadata> metadata) {
|
| if (!metadata) {
|
| - match_context->original_callback.Run(ServiceWorkerCache::ErrorTypeStorage,
|
| - scoped_ptr<ServiceWorkerResponse>(),
|
| - scoped_ptr<storage::BlobDataHandle>());
|
| + match_context->original_callback.Run(
|
| + ServiceWorkerCache::ErrorTypeStorage,
|
| + scoped_ptr<ServiceWorkerResponse>(),
|
| + scoped_ptr<storage::BlobDataSnapshotHandle>());
|
| return;
|
| }
|
|
|
| @@ -712,30 +715,33 @@ void ServiceWorkerCache::MatchDidReadMetadata(
|
|
|
| if (!VaryMatches(match_context->request->headers, cached_request_headers,
|
| response->headers)) {
|
| - match_context->original_callback.Run(ServiceWorkerCache::ErrorTypeNotFound,
|
| - scoped_ptr<ServiceWorkerResponse>(),
|
| - scoped_ptr<storage::BlobDataHandle>());
|
| + match_context->original_callback.Run(
|
| + ServiceWorkerCache::ErrorTypeNotFound,
|
| + scoped_ptr<ServiceWorkerResponse>(),
|
| + scoped_ptr<storage::BlobDataSnapshotHandle>());
|
| return;
|
| }
|
|
|
| if (match_context->entry->GetDataSize(INDEX_RESPONSE_BODY) == 0) {
|
| - match_context->original_callback.Run(ServiceWorkerCache::ErrorTypeOK,
|
| - match_context->response.Pass(),
|
| - scoped_ptr<storage::BlobDataHandle>());
|
| + match_context->original_callback.Run(
|
| + ServiceWorkerCache::ErrorTypeOK, match_context->response.Pass(),
|
| + scoped_ptr<storage::BlobDataSnapshotHandle>());
|
| return;
|
| }
|
|
|
| // Stream the response body into a blob.
|
| if (!match_context->blob_storage_context) {
|
| - match_context->original_callback.Run(ServiceWorkerCache::ErrorTypeStorage,
|
| - scoped_ptr<ServiceWorkerResponse>(),
|
| - scoped_ptr<storage::BlobDataHandle>());
|
| + match_context->original_callback.Run(
|
| + ServiceWorkerCache::ErrorTypeStorage,
|
| + scoped_ptr<ServiceWorkerResponse>(),
|
| + scoped_ptr<storage::BlobDataSnapshotHandle>());
|
| return;
|
| }
|
|
|
| response->blob_uuid = base::GenerateGUID();
|
|
|
| - match_context->blob_data = new storage::BlobData(response->blob_uuid);
|
| + match_context->blob_data.reset(
|
| + new storage::BlobDataBuilder(response->blob_uuid));
|
| match_context->response_body_buffer = new net::IOBufferWithSize(kBufferSize);
|
|
|
| disk_cache::Entry* tmp_entry_ptr = match_context->entry;
|
| @@ -763,9 +769,10 @@ void ServiceWorkerCache::MatchDidReadResponseBodyData(
|
| "422516 ServiceWorkerCache::MatchDidReadResponseBodyData"));
|
|
|
| if (rv < 0) {
|
| - match_context->original_callback.Run(ServiceWorkerCache::ErrorTypeStorage,
|
| - scoped_ptr<ServiceWorkerResponse>(),
|
| - scoped_ptr<storage::BlobDataHandle>());
|
| + match_context->original_callback.Run(
|
| + ServiceWorkerCache::ErrorTypeStorage,
|
| + scoped_ptr<ServiceWorkerResponse>(),
|
| + scoped_ptr<storage::BlobDataSnapshotHandle>());
|
| return;
|
| }
|
|
|
| @@ -802,15 +809,16 @@ void ServiceWorkerCache::MatchDidReadResponseBodyData(
|
| void ServiceWorkerCache::MatchDoneWithBody(
|
| scoped_ptr<MatchContext> match_context) {
|
| if (!match_context->blob_storage_context) {
|
| - match_context->original_callback.Run(ServiceWorkerCache::ErrorTypeStorage,
|
| - scoped_ptr<ServiceWorkerResponse>(),
|
| - scoped_ptr<storage::BlobDataHandle>());
|
| + match_context->original_callback.Run(
|
| + ServiceWorkerCache::ErrorTypeStorage,
|
| + scoped_ptr<ServiceWorkerResponse>(),
|
| + scoped_ptr<storage::BlobDataSnapshotHandle>());
|
| return;
|
| }
|
|
|
| - scoped_ptr<storage::BlobDataHandle> blob_data_handle(
|
| + scoped_ptr<storage::BlobDataSnapshotHandle> blob_data_handle(
|
| match_context->blob_storage_context->AddFinishedBlob(
|
| - match_context->blob_data.get()));
|
| + *match_context->blob_data.get()));
|
|
|
| match_context->original_callback.Run(ServiceWorkerCache::ErrorTypeOK,
|
| match_context->response.Pass(),
|
| @@ -821,7 +829,7 @@ void ServiceWorkerCache::PutImpl(scoped_ptr<PutContext> put_context) {
|
| if (backend_state_ != BACKEND_OPEN) {
|
| put_context->callback.Run(ErrorTypeStorage,
|
| scoped_ptr<ServiceWorkerResponse>(),
|
| - scoped_ptr<storage::BlobDataHandle>());
|
| + scoped_ptr<storage::BlobDataSnapshotHandle>());
|
| return;
|
| }
|
|
|
| @@ -838,7 +846,7 @@ void ServiceWorkerCache::PutDidDelete(scoped_ptr<PutContext> put_context,
|
| if (backend_state_ != BACKEND_OPEN) {
|
| put_context->callback.Run(ErrorTypeStorage,
|
| scoped_ptr<ServiceWorkerResponse>(),
|
| - scoped_ptr<storage::BlobDataHandle>());
|
| + scoped_ptr<storage::BlobDataSnapshotHandle>());
|
| return;
|
| }
|
|
|
| @@ -862,7 +870,7 @@ void ServiceWorkerCache::PutDidCreateEntry(scoped_ptr<PutContext> put_context,
|
| if (rv != net::OK) {
|
| put_context->callback.Run(ServiceWorkerCache::ErrorTypeExists,
|
| scoped_ptr<ServiceWorkerResponse>(),
|
| - scoped_ptr<storage::BlobDataHandle>());
|
| + scoped_ptr<storage::BlobDataSnapshotHandle>());
|
| return;
|
| }
|
|
|
| @@ -899,7 +907,7 @@ void ServiceWorkerCache::PutDidCreateEntry(scoped_ptr<PutContext> put_context,
|
| if (!metadata.SerializeToString(serialized.get())) {
|
| put_context->callback.Run(ServiceWorkerCache::ErrorTypeStorage,
|
| scoped_ptr<ServiceWorkerResponse>(),
|
| - scoped_ptr<storage::BlobDataHandle>());
|
| + scoped_ptr<storage::BlobDataSnapshotHandle>());
|
| return;
|
| }
|
|
|
| @@ -931,7 +939,7 @@ void ServiceWorkerCache::PutDidWriteHeaders(scoped_ptr<PutContext> put_context,
|
| put_context->cache_entry->Doom();
|
| put_context->callback.Run(ServiceWorkerCache::ErrorTypeStorage,
|
| scoped_ptr<ServiceWorkerResponse>(),
|
| - scoped_ptr<storage::BlobDataHandle>());
|
| + scoped_ptr<storage::BlobDataSnapshotHandle>());
|
| return;
|
| }
|
|
|
| @@ -949,7 +957,7 @@ void ServiceWorkerCache::PutDidWriteHeaders(scoped_ptr<PutContext> put_context,
|
|
|
| put_context->callback.Run(ServiceWorkerCache::ErrorTypeOK,
|
| put_context->response.Pass(),
|
| - scoped_ptr<storage::BlobDataHandle>());
|
| + scoped_ptr<storage::BlobDataSnapshotHandle>());
|
| return;
|
| }
|
|
|
| @@ -962,7 +970,7 @@ void ServiceWorkerCache::PutDidWriteHeaders(scoped_ptr<PutContext> put_context,
|
|
|
| // Grab some pointers before passing put_context in Bind.
|
| net::URLRequestContext* request_context = put_context->request_context;
|
| - scoped_ptr<storage::BlobDataHandle> blob_data_handle =
|
| + scoped_ptr<storage::BlobDataSnapshotHandle> blob_data_handle =
|
| put_context->blob_data_handle.Pass();
|
|
|
| reader_ptr->StreamBlobToCache(
|
| @@ -985,7 +993,7 @@ void ServiceWorkerCache::PutDidWriteBlobToCache(
|
| put_context->cache_entry->Doom();
|
| put_context->callback.Run(ServiceWorkerCache::ErrorTypeStorage,
|
| scoped_ptr<ServiceWorkerResponse>(),
|
| - scoped_ptr<storage::BlobDataHandle>());
|
| + scoped_ptr<storage::BlobDataSnapshotHandle>());
|
| return;
|
| }
|
|
|
| @@ -1208,7 +1216,7 @@ void ServiceWorkerCache::PendingResponseCallback(
|
| const ResponseCallback& callback,
|
| ErrorType error,
|
| scoped_ptr<ServiceWorkerResponse> response,
|
| - scoped_ptr<storage::BlobDataHandle> blob_data_handle) {
|
| + scoped_ptr<storage::BlobDataSnapshotHandle> blob_data_handle) {
|
| callback.Run(error, response.Pass(), blob_data_handle.Pass());
|
| DecPendingOps();
|
| }
|
|
|