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..917a0b38e8e9a588bf347bbfc3c1fe19217f2907 100644 |
--- a/webkit/browser/blob/blob_data_handle.h |
+++ b/webkit/browser/blob/blob_data_handle.h |
@@ -28,23 +28,42 @@ 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 |
+ : 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_; |
+ |
+ 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 |