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

Side by Side Diff: content/browser/blob_storage/blob_dispatcher_host.cc

Issue 1853333003: [BlobAsync] Faster shortcuttin, make renderer controller leaky & alive. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: comment Created 4 years, 8 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 unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/blob_storage/blob_dispatcher_host.h" 5 #include "content/browser/blob_storage/blob_dispatcher_host.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "content/browser/bad_message.h" 10 #include "content/browser/bad_message.h"
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after
181 const BlobStorageRegistry::Entry* entry = context->registry().GetEntry(uuid); 181 const BlobStorageRegistry::Entry* entry = context->registry().GetEntry(uuid);
182 if (!entry || entry->state == BlobStorageRegistry::BlobState::BROKEN) { 182 if (!entry || entry->state == BlobStorageRegistry::BlobState::BROKEN) {
183 // We ignore messages for blobs that don't exist to handle the case where 183 // We ignore messages for blobs that don't exist to handle the case where
184 // the renderer de-refs a blob that we're still constructing, and there are 184 // the renderer de-refs a blob that we're still constructing, and there are
185 // no references to that blob. We ignore broken as well, in the case where 185 // no references to that blob. We ignore broken as well, in the case where
186 // we decided to break a blob and the renderer also decided to cancel. 186 // we decided to break a blob and the renderer also decided to cancel.
187 // Note: if a blob is broken, then it can't be in the async_builder. 187 // Note: if a blob is broken, then it can't be in the async_builder.
188 // Second, if the last dereference of the blob happened on a different host, 188 // Second, if the last dereference of the blob happened on a different host,
189 // then we still haven't gotten rid of the 'building' state in the original 189 // then we still haven't gotten rid of the 'building' state in the original
190 // host. So we call cancel just in case this happens. 190 // host. So we call cancel just in case this happens.
191 async_builder_.CancelBuildingBlob( 191 if (async_builder_.IsBeingBuilt(uuid)) {
192 uuid, IPCBlobCreationCancelCode::BLOB_DEREFERENCED_WHILE_BUILDING, 192 async_builder_.CancelBuildingBlob(
193 context); 193 uuid, IPCBlobCreationCancelCode::BLOB_DEREFERENCED_WHILE_BUILDING,
194 context);
195 }
194 return; 196 return;
195 } 197 }
196 if (!async_builder_.IsBeingBuilt(uuid)) { 198 if (!async_builder_.IsBeingBuilt(uuid)) {
197 SendIPCResponse(uuid, BlobTransportResult::BAD_IPC); 199 SendIPCResponse(uuid, BlobTransportResult::BAD_IPC);
198 return; 200 return;
199 } 201 }
200 VLOG(1) << "Blob construction of " << uuid << " cancelled by renderer. " 202 VLOG(1) << "Blob construction of " << uuid << " cancelled by renderer. "
201 << " Reason: " << static_cast<int>(code) << "."; 203 << " Reason: " << static_cast<int>(code) << ".";
202 async_builder_.CancelBuildingBlob(uuid, code, context); 204 async_builder_.CancelBuildingBlob(uuid, code, context);
203 } 205 }
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
324 context->RevokePublicBlobURL(url); 326 context->RevokePublicBlobURL(url);
325 } 327 }
326 for (const auto& uuid_refnum_pair : blobs_inuse_map_) { 328 for (const auto& uuid_refnum_pair : blobs_inuse_map_) {
327 for (int i = 0; i < uuid_refnum_pair.second; ++i) 329 for (int i = 0; i < uuid_refnum_pair.second; ++i)
328 context->DecrementBlobRefCount(uuid_refnum_pair.first); 330 context->DecrementBlobRefCount(uuid_refnum_pair.first);
329 } 331 }
330 async_builder_.CancelAll(context); 332 async_builder_.CancelAll(context);
331 } 333 }
332 334
333 } // namespace content 335 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698