| Index: base/supports_user_data.h
|
| ===================================================================
|
| --- base/supports_user_data.h (revision 122771)
|
| +++ base/supports_user_data.h (working copy)
|
| @@ -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 @@
|
| 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_
|
|
|