Index: webkit/browser/blob/blob_data_handle.h |
diff --git a/webkit/browser/blob/blob_data_handle.h b/webkit/browser/blob/blob_data_handle.h |
index 5f870f2731a21b9f456c99fc505e9c61a0a03bcd..bae65b0c5e3e24b0442c5eb36888eb94b8950637 100644 |
--- a/webkit/browser/blob/blob_data_handle.h |
+++ b/webkit/browser/blob/blob_data_handle.h |
@@ -28,23 +28,43 @@ class BlobStorageContext; |
class WEBKIT_STORAGE_BROWSER_EXPORT BlobDataHandle |
: public base::SupportsUserData::Data { |
public: |
+ BlobDataHandle(const BlobDataHandle& other); // May be copied on any thread. |
virtual ~BlobDataHandle(); // Maybe be deleted on any thread. |
BlobData* data() const; // May only be accessed on the IO thread. |
+ std::string uuid() const; // May be accessed on any thread. |
+ |
private: |
+ class BlobDataHandleShared |
michaeln
2014/04/28 18:25:22
too bad this has to be in the .h file :(
|
+ : public base::RefCountedThreadSafe<BlobDataHandleShared> { |
+ public: |
+ BlobDataHandleShared(BlobData* blob_data, |
+ BlobStorageContext* context, |
+ base::SequencedTaskRunner* task_runner); |
+ |
+ BlobData* data() const; |
+ const std::string& uuid() const; |
+ |
+ private: |
+ friend class base::DeleteHelper<BlobDataHandleShared>; |
+ friend class base::RefCountedThreadSafe<BlobDataHandleShared>; |
+ friend class BlobDataHandle; |
+ |
+ virtual ~BlobDataHandleShared(); |
+ |
+ scoped_refptr<BlobData> blob_data_; |
+ base::WeakPtr<BlobStorageContext> context_; |
+ scoped_refptr<base::SequencedTaskRunner> io_task_runner_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(BlobDataHandleShared); |
+ }; |
+ |
friend class BlobStorageContext; |
BlobDataHandle(BlobData* blob_data, BlobStorageContext* context, |
base::SequencedTaskRunner* task_runner); |
- static void DeleteHelper( |
- base::WeakPtr<BlobStorageContext> context, |
- BlobData* blob_data); |
- |
- BlobData* blob_data_; // Intentionally a raw ptr to a non-thread-safe ref. |
- base::WeakPtr<BlobStorageContext> context_; |
scoped_refptr<base::SequencedTaskRunner> io_task_runner_; |
- |
- DISALLOW_COPY_AND_ASSIGN(BlobDataHandle); |
+ scoped_refptr<BlobDataHandleShared> shared_; |
}; |
} // namespace webkit_blob |