Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(246)

Side by Side Diff: content/browser/android/system_ui_resource_manager_impl_unittest.cc

Issue 377013002: android: Use UIResource for overscroll glow (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: addressed comments Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
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.
4
5 #include "cc/resources/ui_resource_bitmap.h"
6 #include "content/browser/android/system_ui_resource_manager_impl.h"
7 #include "content/public/browser/android/ui_resource_client_android.h"
8 #include "content/public/browser/android/ui_resource_provider.h"
9 #include "testing/gmock/include/gmock/gmock.h"
10 #include "testing/gtest/include/gtest/gtest.h"
11 #include "third_party/skia/include/core/SkBitmap.h"
12 #include "third_party/skia/include/core/SkCanvas.h"
13 #include "ui/base/android/system_ui_resource_layer.h"
14
15 namespace content {
16
17 class TestSystemUIResourceManagerImpl
18 : public content::SystemUIResourceManagerImpl {
19 public:
20 TestSystemUIResourceManagerImpl(content::UIResourceProvider* provider)
21 : SystemUIResourceManagerImpl(provider) {}
22
23 virtual ~TestSystemUIResourceManagerImpl() {}
24
25 virtual void BuildResource(ui::SystemUIResourceManager::Type type) OVERRIDE {}
26
27 void SetResourceAsLoaded(ui::SystemUIResourceManager::Type type) {
28 SkBitmap small_bitmap;
29 SkCanvas canvas(small_bitmap);
30 small_bitmap.allocPixels(
31 SkImageInfo::Make(1, 1, kRGBA_8888_SkColorType, kOpaque_SkAlphaType));
32 canvas.drawColor(SK_ColorWHITE);
33 small_bitmap.setImmutable();
34 OnFinishedLoadBitmap(type, &small_bitmap);
35 }
36 };
37
38 namespace {
39
40 const ui::SystemUIResourceManager::Type TEST_RESOURCE_TYPE =
41 ui::SystemUIResourceManager::OVERSCROLL_GLOW;
42
43 class MockUIResourceProvider : public content::UIResourceProvider {
44 public:
45 MockUIResourceProvider()
46 : next_ui_resource_id_(0), system_ui_resource_manager_(this) {}
47
48 virtual ~MockUIResourceProvider() {}
49
50 virtual cc::UIResourceId CreateUIResource(
51 content::UIResourceClientAndroid* client) OVERRIDE {
52 cc::UIResourceId id = next_ui_resource_id_++;
53 client->GetBitmap(id, false);
54 ui_resource_client_map_[id] = client;
55 return id;
56 }
57
58 virtual void DeleteUIResource(cc::UIResourceId id) OVERRIDE {
59 ui_resource_client_map_.erase(id);
60 }
61
62 void LayerTreeHostCleared() {
63 UIResourceClientMap client_map = ui_resource_client_map_;
64 ui_resource_client_map_.clear();
65 for (UIResourceClientMap::iterator iter = client_map.begin();
66 iter != client_map.end();
67 iter++) {
68 iter->second->UIResourceIsInvalid();
69 }
70 }
71
72 void LayerTreeHostReturned() {
73 system_ui_resource_manager_.RefreshResources();
74 }
75
76 TestSystemUIResourceManagerImpl& GetSystemUIResourceManager() {
77 return system_ui_resource_manager_;
78 }
79
80 private:
81 typedef base::hash_map<cc::UIResourceId, content::UIResourceClientAndroid*>
82 UIResourceClientMap;
83
84 cc::UIResourceId next_ui_resource_id_;
85 UIResourceClientMap ui_resource_client_map_;
86
87 // The UIResourceProvider owns the SystemUIResourceManager.
88 TestSystemUIResourceManagerImpl system_ui_resource_manager_;
89 };
90
91 class MockSystemUIResourceLayer : public ui::SystemUIResourceLayer {
92 public:
93 static scoped_ptr<MockSystemUIResourceLayer> Create() {
94 return make_scoped_ptr(new MockSystemUIResourceLayer());
95 }
96
97 ~MockSystemUIResourceLayer() {}
98
99 virtual void SetUIResourceId(cc::UIResourceId id) OVERRIDE { id_ = id; }
100
101 cc::UIResourceId id() { return id_; }
102
103 private:
104 MockSystemUIResourceLayer() : id_(0) {}
105
106 cc::UIResourceId id_;
107 };
108
109 } // namespace
110
111 class SystemUIResourceManagerImplTest : public testing::Test {
112 public:
113 void Subscribe(ui::SystemUIResourceManager::Type type,
114 ui::SystemUIResourceLayer* layer) {
115 ui_resource_provider_.GetSystemUIResourceManager().Subscribe(type, layer);
116 }
117
118 void Unsubscribe(ui::SystemUIResourceManager::Type type,
119 ui::SystemUIResourceLayer* layer) {
120 ui_resource_provider_.GetSystemUIResourceManager().Unsubscribe(type, layer);
121 }
122
123 void LayerTreeHostCleared() { ui_resource_provider_.LayerTreeHostCleared(); }
124
125 void LayerTreeHostReturned() {
126 ui_resource_provider_.LayerTreeHostReturned();
127 }
128
129 void SetResourceAsLoaded(ui::SystemUIResourceManager::Type type) {
130 ui_resource_provider_.GetSystemUIResourceManager().SetResourceAsLoaded(
131 type);
132 }
133
134 private:
135 MockUIResourceProvider ui_resource_provider_;
136 };
137
138 TEST_F(SystemUIResourceManagerImplTest, SubscribeAfterBitmapLoaded) {
139 scoped_ptr<MockSystemUIResourceLayer> layer =
140 MockSystemUIResourceLayer::Create();
141
142 SetResourceAsLoaded(TEST_RESOURCE_TYPE);
143 EXPECT_EQ(0, layer->id());
144
145 Subscribe(TEST_RESOURCE_TYPE, layer.get());
146 EXPECT_NE(0, layer->id());
147 }
148
149 TEST_F(SystemUIResourceManagerImplTest, SubscribeBeforeLoadBitmap) {
150 scoped_ptr<MockSystemUIResourceLayer> layer =
151 MockSystemUIResourceLayer::Create();
152
153 EXPECT_EQ(0, layer->id());
154 Subscribe(TEST_RESOURCE_TYPE, layer.get());
155 EXPECT_EQ(0, layer->id());
156
157 SetResourceAsLoaded(TEST_RESOURCE_TYPE);
158 EXPECT_NE(0, layer->id());
159 }
160
161 TEST_F(SystemUIResourceManagerImplTest, ResetLayerTreeHost) {
162 scoped_ptr<MockSystemUIResourceLayer> layer =
163 MockSystemUIResourceLayer::Create();
164
165 SetResourceAsLoaded(TEST_RESOURCE_TYPE);
166 Subscribe(TEST_RESOURCE_TYPE, layer.get());
167 EXPECT_NE(0, layer->id());
168
169 LayerTreeHostCleared();
170 EXPECT_EQ(0, layer->id());
171
172 LayerTreeHostReturned();
173 EXPECT_NE(0, layer->id());
174 }
175
176 TEST_F(SystemUIResourceManagerImplTest, UnsubscribeLayer) {
177 scoped_ptr<MockSystemUIResourceLayer> layer_a =
178 MockSystemUIResourceLayer::Create();
179
180 scoped_ptr<MockSystemUIResourceLayer> layer_b =
181 MockSystemUIResourceLayer::Create();
182
183 SetResourceAsLoaded(TEST_RESOURCE_TYPE);
184
185 Subscribe(TEST_RESOURCE_TYPE, layer_a.get());
186 Subscribe(TEST_RESOURCE_TYPE, layer_b.get());
187
188 EXPECT_NE(0, layer_a->id());
189 EXPECT_EQ(layer_a->id(), layer_b->id());
190
191 Unsubscribe(TEST_RESOURCE_TYPE, layer_a.get());
192 EXPECT_EQ(0, layer_a->id());
193 EXPECT_NE(0, layer_b->id());
194
195 LayerTreeHostCleared();
196 LayerTreeHostReturned();
197
198 EXPECT_EQ(0, layer_a->id());
199 EXPECT_NE(0, layer_b->id());
200 }
201
202 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698