Chromium Code Reviews| Index: content/browser/fileapi/chrome_blob_storage_context.cc |
| diff --git a/content/browser/fileapi/chrome_blob_storage_context.cc b/content/browser/fileapi/chrome_blob_storage_context.cc |
| index 97151a83f67426d6483882bb675f13a9deab6e32..ae7a6ada929e9f028532006c5ea63380af5a12a1 100644 |
| --- a/content/browser/fileapi/chrome_blob_storage_context.cc |
| +++ b/content/browser/fileapi/chrome_blob_storage_context.cc |
| @@ -5,8 +5,10 @@ |
| #include "content/browser/fileapi/chrome_blob_storage_context.h" |
| #include "base/bind.h" |
| +#include "base/guid.h" |
| #include "content/public/browser/browser_context.h" |
| #include "content/public/browser/browser_thread.h" |
| +#include "webkit/browser/blob/blob_data_handle.h" |
| #include "webkit/browser/blob/blob_storage_context.h" |
| using base::UserDataAdapter; |
| @@ -14,6 +16,22 @@ using webkit_blob::BlobStorageContext; |
| namespace content { |
| +class ChromeBlobHandle : public BlobHandle { |
|
michaeln
2014/05/08 23:03:18
The ChromeXXX naming convention is really archaic
tommycli
2014/05/09 16:10:17
Done.
|
| + public: |
| + ChromeBlobHandle(scoped_ptr<webkit_blob::BlobDataHandle> handle) |
| + : handle_(handle.Pass()) { |
| + } |
| + |
| + virtual ~ChromeBlobHandle() {} |
| + |
| + virtual std::string uuid() OVERRIDE { |
| + return handle_->uuid(); |
| + } |
| + |
| + private: |
| + scoped_ptr<webkit_blob::BlobDataHandle> handle_; |
| +}; |
| + |
| static const char* kBlobStorageContextKeyName = "content_blob_storage_context"; |
| ChromeBlobStorageContext::ChromeBlobStorageContext() {} |
| @@ -43,8 +61,32 @@ void ChromeBlobStorageContext::InitializeOnIOThread() { |
| context_.reset(new BlobStorageContext()); |
| } |
| +void ChromeBlobStorageContext::CreateMemoryBackedBlob( |
| + const char* data, size_t length, const BlobCallback& callback) { |
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| + BrowserThread::PostTaskAndReplyWithResult( |
| + BrowserThread::IO, FROM_HERE, |
| + base::Bind(&ChromeBlobStorageContext::CreateMemoryBackedBlobOnIOThread, |
| + this, data, length, callback), |
| + callback); |
| +} |
| + |
| ChromeBlobStorageContext::~ChromeBlobStorageContext() {} |
| +scoped_ptr<BlobHandle> |
| +ChromeBlobStorageContext::CreateMemoryBackedBlobOnIOThread( |
| + const char* data, size_t length, const BlobCallback& callback) { |
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| + |
| + std::string uuid(base::GenerateGUID()); |
| + scoped_refptr<webkit_blob::BlobData> blob_data = |
| + new webkit_blob::BlobData(uuid); |
| + blob_data->AppendData(data, length); |
| + scoped_ptr<BlobHandle> blob_handle( |
| + new ChromeBlobHandle(context_->AddFinishedBlob(blob_data.get()).Pass())); |
| + return blob_handle.Pass(); |
| +} |
| + |
| void ChromeBlobStorageContext::DeleteOnCorrectThread() const { |
| if (BrowserThread::IsMessageLoopValid(BrowserThread::IO) && |
| !BrowserThread::CurrentlyOn(BrowserThread::IO)) { |