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

Unified Diff: webkit/browser/blob/blob_storage_host.cc

Issue 23223003: Chromium Blob hacking (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 3 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
« no previous file with comments | « webkit/browser/blob/blob_storage_host.h ('k') | webkit/browser/blob/blob_url_request_job.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webkit/browser/blob/blob_storage_host.cc
diff --git a/webkit/browser/blob/blob_storage_host.cc b/webkit/browser/blob/blob_storage_host.cc
index eebf3fbace720170519a33de841bd7792ca38c81..9d3ddb959f63228f4f8b69675ed1fb7f9ec90686 100644
--- a/webkit/browser/blob/blob_storage_host.cc
+++ b/webkit/browser/blob/blob_storage_host.cc
@@ -5,6 +5,7 @@
#include "webkit/browser/blob/blob_storage_host.h"
#include "base/sequenced_task_runner.h"
+#include "base/strings/string_util.h"
#include "url/gurl.h"
#include "webkit/browser/blob/blob_data_handle.h"
#include "webkit/browser/blob/blob_storage_context.h"
@@ -27,6 +28,10 @@ BlobStorageHost::~BlobStorageHost() {
for (int i = 0; i < iter->second; ++i)
context_->DecrementBlobRefCount(iter->first);
}
+ for (std::set<GURL>::iterator iter = private_blob_urls_.begin();
+ iter != private_blob_urls_.end(); ++iter) {
+ context_->DeprecatedRevokePrivateBlobURL(*iter);
+ }
}
bool BlobStorageHost::StartBuildingBlob(const std::string& uuid) {
@@ -98,6 +103,56 @@ bool BlobStorageHost::RevokePublicBlobURL(const GURL& blob_url) {
return true;
}
+namespace {
+bool IsPrivateBlobURL(const GURL& url) {
+ return StartsWithASCII(url.spec(), "blob:blobinternal", true);
+}
+}
+
+void BlobStorageHost::DeprecatedRegisterBlobURL(
+ const GURL& private_url, const std::string& uuid) {
+ DCHECK(IsPrivateBlobURL(private_url));
+ if (!context_.get())
+ return;
+ context_->DeprecatedRegisterPrivateBlobURL(private_url, uuid);
+ private_blob_urls_.insert(private_url);
+}
+
+void BlobStorageHost::DeprecatedCloneBlobURL(
+ const GURL& url, const GURL& src_private_url) {
+ // This method is used in two ways.
+ // 1. During serialization/deserialization to 'clone' an existing blob.
+ // In this case the src and dest urls are 'private' blob urls.
+ // 2. To register public blob urls. In this case the dest url is a
+ // 'public' blob url.
+ DCHECK(IsPrivateBlobURL(src_private_url));
+ if (!context_.get())
+ return;
+ std::string uuid = context_->LookupUuidFromDeprecatedURL(src_private_url);
+ if (uuid.empty())
+ return;
+ if (IsPrivateBlobURL(url)) {
+ DeprecatedRegisterBlobURL(url, uuid);
+ } else {
+ // Temporarily bump the refcount so the uuid passes the InUse
+ // check inside the RegisterPublicBlobURL method.
+ ignore_result(IncrementBlobRefCount(uuid));
+ ignore_result(RegisterPublicBlobURL(url, uuid));
+ ignore_result(DecrementBlobRefCount(uuid));
+ }
+}
+
+void BlobStorageHost::DeprecatedRevokeBlobURL(const GURL& url) {
+ if (!context_.get())
+ return;
+ if (IsPrivateBlobURL(url)) {
+ context_->DeprecatedRevokePrivateBlobURL(url);
+ private_blob_urls_.erase(url);
+ } else {
+ ignore_result(RevokePublicBlobURL(url));
+ }
+}
+
bool BlobStorageHost::IsInUseInHost(const std::string& uuid) {
return blobs_inuse_map_.find(uuid) != blobs_inuse_map_.end();
}
« no previous file with comments | « webkit/browser/blob/blob_storage_host.h ('k') | webkit/browser/blob/blob_url_request_job.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698