1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef WEBKIT_BROWSER_BLOB_BLOB_DATA_HANDLE_H_ 6 #define WEBKIT_BROWSER_BLOB_BLOB_DATA_HANDLE_H_ 7 8 #include <string> 9 10 #include "base/memory/ref_counted.h" 11 #include "base/memory/weak_ptr.h" 12 #include "base/supports_user_data.h" 13 #include "webkit/browser/webkit_storage_browser_export.h" 14 15 namespace base { 16 class SequencedTaskRunner; 17 } 18 19 namespace webkit_blob { 20 21 class BlobData; 22 class BlobStorageContext; 23 24 // A scoper object for use in chrome's main browser process, ensures 25 // the underlying BlobData and its uuid remain in BlobStorageContext's 26 // collection for the duration. This object has delete semantics and 27 // maybe deleted on any thread. 28 class WEBKIT_STORAGE_BROWSER_EXPORT BlobDataHandle 29 : public base::SupportsUserData::Data { 30 public: 31 virtual ~BlobDataHandle(); // Maybe be deleted on any thread. 32 BlobData* data() const; // May only be accessed on the IO thread. 33 34 private: 35 friend class BlobStorageContext; 36 BlobDataHandle(BlobData* blob_data, BlobStorageContext* context, 37 base::SequencedTaskRunner* task_runner); 38 39 static void DeleteHelper( 40 base::WeakPtr<BlobStorageContext> context, 41 BlobData* blob_data); 42 43 BlobData* blob_data_; // Intentionally a raw ptr to a non-thread-safe ref. 44 base::WeakPtr<BlobStorageContext> context_; 45 scoped_refptr<base::SequencedTaskRunner> io_task_runner_; 46 }; 47 48 } // namespace webkit_blob 49 50 #endif // WEBKIT_BROWSER_BLOB_BLOB_DATA_HANDLE_H_ 51