diff options
Diffstat (limited to 'base/supports_user_data.h')
-rw-r--r-- | base/supports_user_data.h | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/base/supports_user_data.h b/base/supports_user_data.h index 0296a3e..1c90e01 100644 --- a/base/supports_user_data.h +++ b/base/supports_user_data.h @@ -9,6 +9,7 @@ #include "base/base_export.h" #include "base/memory/linked_ptr.h" +#include "base/memory/ref_counted.h" namespace base { @@ -42,6 +43,25 @@ class BASE_EXPORT SupportsUserData { DISALLOW_COPY_AND_ASSIGN(SupportsUserData); }; +// Adapter class that releases a refcounted object when the +// SupportsUserData::Data object is deleted. +template <typename T> +class UserDataAdapter : public base::SupportsUserData::Data { + public: + static T* Get(SupportsUserData* supports_user_data, const char* key) { + UserDataAdapter* data = + static_cast<UserDataAdapter*>(supports_user_data->GetUserData(key)); + return static_cast<T*>(data->object_.get()); + } + + UserDataAdapter(T* object) : object_(object) {} + + private: + scoped_refptr<T> object_; + + DISALLOW_COPY_AND_ASSIGN(UserDataAdapter); +}; + } // namespace base #endif // BASE_SUPPORTS_USER_DATA_H_ |