1 // Copyright 2014 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.
5 #include "base/supports_user_data.h"
9 #include "base/memory/ptr_util.h"
10 #include "testing/gtest/include/gtest/gtest.h"
15 struct TestSupportsUserData : public SupportsUserData {};
17 struct UsesItself : public SupportsUserData::Data {
18 UsesItself(SupportsUserData* supports_user_data, const void* key)
19 : supports_user_data_(supports_user_data),
23 ~UsesItself() override {
24 EXPECT_EQ(nullptr, supports_user_data_->GetUserData(key_));
27 SupportsUserData* supports_user_data_;
31 TEST(SupportsUserDataTest, ClearWorksRecursively) {
32 TestSupportsUserData supports_user_data;
34 supports_user_data.SetUserData(
35 &key, std::make_unique<UsesItself>(&supports_user_data, &key));
36 // Destruction of supports_user_data runs the actual test.