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

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: updated test file entry in gypi Created 6 years, 5 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 ~TestSystemUIResourceManagerImpl() {}
24
25 virtual void BuildResource(ui::SystemUIResourceManager::Type type) {}
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 cc::UIResourceId CreateUIResource(
49 content::UIResourceClientAndroid* client) OVERRIDE {
50 cc::UIResourceId id = next_ui_resource_id_++;
51 client->GetBitmap(id, false);
52 ui_resource_client_map_[id] = client;
53 return id;
54 }
55
56 virtual void DeleteUIResource(cc::UIResourceId id) OVERRIDE {
57 ui_resource_client_map_.erase(id);
58 }
59
60 void LayerTreeHostCleared() {
61 UIResourceClientMap client_map = ui_resource_client_map_;
62 ui_resource_client_map_.clear();
63 for (UIResourceClientMap::iterator iter = client_map.begin();
64 iter != client_map.end();
65 iter++) {
66 iter->second->UIResourceIsInvalid();
67 }
68 }
69
70 void LayerTreeHostReturned() {
71 system_ui_resource_manager_.RefreshResources();
72 }
73
74 TestSystemUIResourceManagerImpl& GetSystemUIResourceManager() {
75 return system_ui_resource_manager_;
76 }
77
78 private:
79 typedef base::hash_map<cc::UIResourceId, content::UIResourceClientAndroid*>
80 UIResourceClientMap;
81
82 cc::UIResourceId next_ui_resource_id_;
83 UIResourceClientMap ui_resource_client_map_;
84
85 // The UIResourceProvider owns the SystemUIResourceManager.
86 TestSystemUIResourceManagerImpl system_ui_resource_manager_;
87 };
88
89 class MockSystemUIResourceLayer : public ui::SystemUIResourceLayer {
90 public:
91 static scoped_ptr<MockSystemUIResourceLayer> Create() {
92 return make_scoped_ptr(new MockSystemUIResourceLayer());
93 }
94
95 ~MockSystemUIResourceLayer() {}
96
97 virtual void SetUIResourceId(cc::UIResourceId id) { id_ = id; }
98
99 cc::UIResourceId id() { return id_; }
100
101 private:
102 MockSystemUIResourceLayer() : id_(0) {}
103
104 cc::UIResourceId id_;
105 };
106
107 } // namespace
108
109 class SystemUIResourceManagerImplTest : public testing::Test {
110 public:
111 void Subscribe(ui::SystemUIResourceManager::Type type,
112 ui::SystemUIResourceLayer* layer) {
113 ui_resource_provider_.GetSystemUIResourceManager().Subscribe(type, layer);
114 }
115
116 void Unsubscribe(ui::SystemUIResourceManager::Type type,
117 ui::SystemUIResourceLayer* layer) {
118 ui_resource_provider_.GetSystemUIResourceManager().Unsubscribe(type, layer);
119 }
120
121 void LayerTreeHostCleared() { ui_resource_provider_.LayerTreeHostCleared(); }
122
123 void LayerTreeHostReturned() {
124 ui_resource_provider_.LayerTreeHostReturned();
125 }
126
127 void SetResourceAsLoaded(ui::SystemUIResourceManager::Type type) {
128 ui_resource_provider_.GetSystemUIResourceManager().SetResourceAsLoaded(
129 type);
130 }
131
132 private:
133 MockUIResourceProvider ui_resource_provider_;
134 };
135
136 TEST_F(SystemUIResourceManagerImplTest, SubscribeAfterBitmapLoaded) {
137 scoped_ptr<MockSystemUIResourceLayer> layer =
138 MockSystemUIResourceLayer::Create();
139
140 SetResourceAsLoaded(TEST_RESOURCE_TYPE);
141 EXPECT_EQ(0u, layer->id());
142
143 Subscribe(TEST_RESOURCE_TYPE, layer.get());
144 EXPECT_NE(0u, layer->id());
145 }
146
147 TEST_F(SystemUIResourceManagerImplTest, SubscribeBeforeLoadBitmap) {
148 scoped_ptr<MockSystemUIResourceLayer> layer =
149 MockSystemUIResourceLayer::Create();
150
151 EXPECT_EQ(0u, layer->id());
152 Subscribe(TEST_RESOURCE_TYPE, layer.get());
153 EXPECT_EQ(0u, layer->id());
154
155 SetResourceAsLoaded(TEST_RESOURCE_TYPE);
156 EXPECT_NE(0u, layer->id());
157 }
158
159 TEST_F(SystemUIResourceManagerImplTest, ResetLayerTreeHost) {
160 scoped_ptr<MockSystemUIResourceLayer> layer =
161 MockSystemUIResourceLayer::Create();
162
163 SetResourceAsLoaded(TEST_RESOURCE_TYPE);
164 Subscribe(TEST_RESOURCE_TYPE, layer.get());
165 EXPECT_NE(0u, layer->id());
166
167 LayerTreeHostCleared();
168 EXPECT_EQ(0u, layer->id());
169
170 LayerTreeHostReturned();
171 EXPECT_NE(0u, layer->id());
172 }
173
174 TEST_F(SystemUIResourceManagerImplTest, UnsubscribeLayer) {
175 scoped_ptr<MockSystemUIResourceLayer> layer_a =
176 MockSystemUIResourceLayer::Create();
177
178 scoped_ptr<MockSystemUIResourceLayer> layer_b =
179 MockSystemUIResourceLayer::Create();
180
181 SetResourceAsLoaded(TEST_RESOURCE_TYPE);
182
183 Subscribe(TEST_RESOURCE_TYPE, layer_a.get());
184 Subscribe(TEST_RESOURCE_TYPE, layer_b.get());
185
186 EXPECT_NE(0u, layer_a->id());
187 EXPECT_EQ(layer_a->id(), layer_b->id());
188
189 Unsubscribe(TEST_RESOURCE_TYPE, layer_a.get());
190 EXPECT_EQ(0u, layer_a->id());
191 EXPECT_NE(0u, layer_b->id());
192
193 LayerTreeHostCleared();
194 LayerTreeHostReturned();
195
196 EXPECT_EQ(0u, layer_a->id());
197 EXPECT_NE(0u, layer_b->id());
198 }
199
200 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698