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

Side by Side Diff: content/browser/gpu/gpu_data_manager_impl_unittest.cc

Issue 11378008: Raise an infobar and deny access to WebGL if a GPU reset was detected while a web page containing W… (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Work around build failure on Mac OS with 10.6 SDK. Created 8 years, 1 month 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/message_loop.h" 5 #include "base/message_loop.h"
6 #include "base/run_loop.h" 6 #include "base/run_loop.h"
7 #include "base/time.h"
7 #include "content/browser/gpu/gpu_data_manager_impl.h" 8 #include "content/browser/gpu/gpu_data_manager_impl.h"
8 #include "content/public/browser/gpu_data_manager_observer.h" 9 #include "content/public/browser/gpu_data_manager_observer.h"
9 #include "content/public/common/gpu_info.h" 10 #include "content/public/common/gpu_info.h"
11 #include "googleurl/src/gurl.h"
10 #include "testing/gtest/include/gtest/gtest.h" 12 #include "testing/gtest/include/gtest/gtest.h"
11 13
12 namespace content { 14 namespace content {
13 namespace { 15 namespace {
14 16
15 class TestObserver : public GpuDataManagerObserver { 17 class TestObserver : public GpuDataManagerObserver {
16 public: 18 public:
17 TestObserver() 19 TestObserver()
18 : gpu_info_updated_(false), 20 : gpu_info_updated_(false),
19 video_memory_usage_stats_updated_(false) { 21 video_memory_usage_stats_updated_(false) {
(...skipping 12 matching lines...) Expand all
32 virtual void OnVideoMemoryUsageStatsUpdate( 34 virtual void OnVideoMemoryUsageStatsUpdate(
33 const GPUVideoMemoryUsageStats& stats) OVERRIDE { 35 const GPUVideoMemoryUsageStats& stats) OVERRIDE {
34 video_memory_usage_stats_updated_ = true; 36 video_memory_usage_stats_updated_ = true;
35 } 37 }
36 38
37 private: 39 private:
38 bool gpu_info_updated_; 40 bool gpu_info_updated_;
39 bool video_memory_usage_stats_updated_; 41 bool video_memory_usage_stats_updated_;
40 }; 42 };
41 43
44 static base::Time GetTimeForTesting() {
45 return base::Time::FromDoubleT(1000);
46 }
47
48 static GURL GetDomain1ForTesting() {
49 return GURL("http://foo.com/");
50 }
51
52 static GURL GetDomain2ForTesting() {
53 return GURL("http://bar.com/");
54 }
55
42 } // namespace anonymous 56 } // namespace anonymous
43 57
44 class GpuDataManagerImplTest : public testing::Test { 58 class GpuDataManagerImplTest : public testing::Test {
45 public: 59 public:
46 GpuDataManagerImplTest() { } 60 GpuDataManagerImplTest() { }
47 61
48 virtual ~GpuDataManagerImplTest() { } 62 virtual ~GpuDataManagerImplTest() { }
49 63
50 protected: 64 protected:
65 // scoped_ptr doesn't work with GpuDataManagerImpl because its
66 // destructor is private. GpuDataManagerImplTest is however a friend
67 // so we can make a little helper class here.
68 class ScopedGpuDataManagerImpl {
69 public:
70 ScopedGpuDataManagerImpl() : impl_(new GpuDataManagerImpl()) {}
71 ~ScopedGpuDataManagerImpl() { delete impl_; }
72
73 GpuDataManagerImpl* get() const { return impl_; }
74 GpuDataManagerImpl* operator->() const { return impl_; }
75 // Small violation of C++ style guide to avoid polluting several
76 // tests with get() calls.
77 operator GpuDataManagerImpl*() { return impl_; }
78
79 private:
80 GpuDataManagerImpl* impl_;
81 DISALLOW_COPY_AND_ASSIGN(ScopedGpuDataManagerImpl);
82 };
83
51 void SetUp() { 84 void SetUp() {
52 } 85 }
53 86
54 void TearDown() { 87 void TearDown() {
55 } 88 }
56 89
90 base::Time JustBeforeExpiration(GpuDataManagerImpl* manager);
91 base::Time JustAfterExpiration(GpuDataManagerImpl* manager);
92 void TestBlockingDomainFrom3DAPIs(
93 GpuDataManagerImpl::DomainGuilt guilt_level);
94 void TestUnblockingDomainFrom3DAPIs(
95 GpuDataManagerImpl::DomainGuilt guilt_level);
96
57 MessageLoop message_loop_; 97 MessageLoop message_loop_;
58 }; 98 };
59 99
60 // We use new method instead of GetInstance() method because we want 100 // We use new method instead of GetInstance() method because we want
61 // each test to be independent of each other. 101 // each test to be independent of each other.
62 102
63 TEST_F(GpuDataManagerImplTest, GpuSideBlacklisting) { 103 TEST_F(GpuDataManagerImplTest, GpuSideBlacklisting) {
64 // If a feature is allowed in preliminary step (browser side), but 104 // If a feature is allowed in preliminary step (browser side), but
65 // disabled when GPU process launches and collects full GPU info, 105 // disabled when GPU process launches and collects full GPU info,
66 // it's too late to let renderer know, so we basically block all GPU 106 // it's too late to let renderer know, so we basically block all GPU
67 // access, to be on the safe side. 107 // access, to be on the safe side.
68 GpuDataManagerImpl* manager = new GpuDataManagerImpl(); 108 ScopedGpuDataManagerImpl manager;
69 ASSERT_TRUE(manager); 109 ASSERT_TRUE(manager.get());
70 EXPECT_EQ(0, manager->GetBlacklistedFeatures()); 110 EXPECT_EQ(0, manager->GetBlacklistedFeatures());
71 EXPECT_TRUE(manager->GpuAccessAllowed()); 111 EXPECT_TRUE(manager->GpuAccessAllowed());
72 112
73 const std::string blacklist_json = 113 const std::string blacklist_json =
74 "{\n" 114 "{\n"
75 " \"name\": \"gpu blacklist\",\n" 115 " \"name\": \"gpu blacklist\",\n"
76 " \"version\": \"0.1\",\n" 116 " \"version\": \"0.1\",\n"
77 " \"entries\": [\n" 117 " \"entries\": [\n"
78 " {\n" 118 " {\n"
79 " \"id\": 1,\n" 119 " \"id\": 1,\n"
(...skipping 21 matching lines...) Expand all
101 141
102 EXPECT_TRUE(manager->GpuAccessAllowed()); 142 EXPECT_TRUE(manager->GpuAccessAllowed());
103 EXPECT_EQ(GPU_FEATURE_TYPE_WEBGL, manager->GetBlacklistedFeatures()); 143 EXPECT_EQ(GPU_FEATURE_TYPE_WEBGL, manager->GetBlacklistedFeatures());
104 144
105 gpu_info.gl_renderer = "NVIDIA GeForce GT 120"; 145 gpu_info.gl_renderer = "NVIDIA GeForce GT 120";
106 manager->UpdateGpuInfo(gpu_info); 146 manager->UpdateGpuInfo(gpu_info);
107 EXPECT_FALSE(manager->GpuAccessAllowed()); 147 EXPECT_FALSE(manager->GpuAccessAllowed());
108 EXPECT_EQ(GPU_FEATURE_TYPE_WEBGL | 148 EXPECT_EQ(GPU_FEATURE_TYPE_WEBGL |
109 GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS, 149 GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS,
110 manager->GetBlacklistedFeatures()); 150 manager->GetBlacklistedFeatures());
111
112 delete manager;
113 } 151 }
114 152
115 TEST_F(GpuDataManagerImplTest, GpuSideExceptions) { 153 TEST_F(GpuDataManagerImplTest, GpuSideExceptions) {
116 GpuDataManagerImpl* manager = new GpuDataManagerImpl(); 154 ScopedGpuDataManagerImpl manager;
117 ASSERT_TRUE(manager); 155 ASSERT_TRUE(manager.get());
118 EXPECT_EQ(0, manager->GetBlacklistedFeatures()); 156 EXPECT_EQ(0, manager->GetBlacklistedFeatures());
119 EXPECT_TRUE(manager->GpuAccessAllowed()); 157 EXPECT_TRUE(manager->GpuAccessAllowed());
120 158
121 const std::string blacklist_json = 159 const std::string blacklist_json =
122 "{\n" 160 "{\n"
123 " \"name\": \"gpu blacklist\",\n" 161 " \"name\": \"gpu blacklist\",\n"
124 " \"version\": \"0.1\",\n" 162 " \"version\": \"0.1\",\n"
125 " \"entries\": [\n" 163 " \"entries\": [\n"
126 " {\n" 164 " {\n"
127 " \"id\": 1,\n" 165 " \"id\": 1,\n"
(...skipping 18 matching lines...) Expand all
146 manager->InitializeForTesting(blacklist_json, gpu_info); 184 manager->InitializeForTesting(blacklist_json, gpu_info);
147 185
148 EXPECT_TRUE(manager->GpuAccessAllowed()); 186 EXPECT_TRUE(manager->GpuAccessAllowed());
149 EXPECT_EQ(0, manager->GetBlacklistedFeatures()); 187 EXPECT_EQ(0, manager->GetBlacklistedFeatures());
150 188
151 // Now assue gpu process launches and full GPU info is collected. 189 // Now assue gpu process launches and full GPU info is collected.
152 gpu_info.gl_renderer = "NVIDIA GeForce GT 120"; 190 gpu_info.gl_renderer = "NVIDIA GeForce GT 120";
153 manager->UpdateGpuInfo(gpu_info); 191 manager->UpdateGpuInfo(gpu_info);
154 EXPECT_TRUE(manager->GpuAccessAllowed()); 192 EXPECT_TRUE(manager->GpuAccessAllowed());
155 EXPECT_EQ(0, manager->GetBlacklistedFeatures()); 193 EXPECT_EQ(0, manager->GetBlacklistedFeatures());
156
157 delete manager;
158 } 194 }
159 195
160 TEST_F(GpuDataManagerImplTest, BlacklistCard) { 196 TEST_F(GpuDataManagerImplTest, BlacklistCard) {
161 GpuDataManagerImpl* manager = new GpuDataManagerImpl(); 197 ScopedGpuDataManagerImpl manager;
162 ASSERT_TRUE(manager); 198 ASSERT_TRUE(manager.get());
163 EXPECT_EQ(0, manager->GetBlacklistedFeatures()); 199 EXPECT_EQ(0, manager->GetBlacklistedFeatures());
164 EXPECT_TRUE(manager->GpuAccessAllowed()); 200 EXPECT_TRUE(manager->GpuAccessAllowed());
165 201
166 manager->BlacklistCard(); 202 manager->BlacklistCard();
167 EXPECT_FALSE(manager->GpuAccessAllowed()); 203 EXPECT_FALSE(manager->GpuAccessAllowed());
168 EXPECT_EQ(GPU_FEATURE_TYPE_ALL, manager->GetBlacklistedFeatures()); 204 EXPECT_EQ(GPU_FEATURE_TYPE_ALL, manager->GetBlacklistedFeatures());
169
170 delete manager;
171 } 205 }
172 206
173 TEST_F(GpuDataManagerImplTest, SoftwareRendering) { 207 TEST_F(GpuDataManagerImplTest, SoftwareRendering) {
174 // Blacklist, then register SwiftShader. 208 // Blacklist, then register SwiftShader.
175 GpuDataManagerImpl* manager = new GpuDataManagerImpl(); 209 ScopedGpuDataManagerImpl manager;
176 ASSERT_TRUE(manager); 210 ASSERT_TRUE(manager.get());
177 EXPECT_EQ(0, manager->GetBlacklistedFeatures()); 211 EXPECT_EQ(0, manager->GetBlacklistedFeatures());
178 EXPECT_TRUE(manager->GpuAccessAllowed()); 212 EXPECT_TRUE(manager->GpuAccessAllowed());
179 EXPECT_FALSE(manager->ShouldUseSoftwareRendering()); 213 EXPECT_FALSE(manager->ShouldUseSoftwareRendering());
180 214
181 manager->BlacklistCard(); 215 manager->BlacklistCard();
182 EXPECT_FALSE(manager->GpuAccessAllowed()); 216 EXPECT_FALSE(manager->GpuAccessAllowed());
183 EXPECT_FALSE(manager->ShouldUseSoftwareRendering()); 217 EXPECT_FALSE(manager->ShouldUseSoftwareRendering());
184 218
185 // If software rendering is enabled, even if we blacklist GPU, 219 // If software rendering is enabled, even if we blacklist GPU,
186 // GPU process is still allowed. 220 // GPU process is still allowed.
187 const FilePath test_path(FILE_PATH_LITERAL("AnyPath")); 221 const FilePath test_path(FILE_PATH_LITERAL("AnyPath"));
188 manager->RegisterSwiftShaderPath(test_path); 222 manager->RegisterSwiftShaderPath(test_path);
189 EXPECT_TRUE(manager->ShouldUseSoftwareRendering()); 223 EXPECT_TRUE(manager->ShouldUseSoftwareRendering());
190 EXPECT_TRUE(manager->GpuAccessAllowed()); 224 EXPECT_TRUE(manager->GpuAccessAllowed());
191 EXPECT_EQ(GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS, 225 EXPECT_EQ(GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS,
192 manager->GetBlacklistedFeatures()); 226 manager->GetBlacklistedFeatures());
193
194 delete manager;
195 } 227 }
196 228
197 TEST_F(GpuDataManagerImplTest, SoftwareRendering2) { 229 TEST_F(GpuDataManagerImplTest, SoftwareRendering2) {
198 // Register SwiftShader, then blacklist. 230 // Register SwiftShader, then blacklist.
199 GpuDataManagerImpl* manager = new GpuDataManagerImpl(); 231 ScopedGpuDataManagerImpl manager;
200 ASSERT_TRUE(manager); 232 ASSERT_TRUE(manager.get());
201 EXPECT_EQ(0, manager->GetBlacklistedFeatures()); 233 EXPECT_EQ(0, manager->GetBlacklistedFeatures());
202 EXPECT_TRUE(manager->GpuAccessAllowed()); 234 EXPECT_TRUE(manager->GpuAccessAllowed());
203 EXPECT_FALSE(manager->ShouldUseSoftwareRendering()); 235 EXPECT_FALSE(manager->ShouldUseSoftwareRendering());
204 236
205 const FilePath test_path(FILE_PATH_LITERAL("AnyPath")); 237 const FilePath test_path(FILE_PATH_LITERAL("AnyPath"));
206 manager->RegisterSwiftShaderPath(test_path); 238 manager->RegisterSwiftShaderPath(test_path);
207 EXPECT_EQ(0, manager->GetBlacklistedFeatures()); 239 EXPECT_EQ(0, manager->GetBlacklistedFeatures());
208 EXPECT_TRUE(manager->GpuAccessAllowed()); 240 EXPECT_TRUE(manager->GpuAccessAllowed());
209 EXPECT_FALSE(manager->ShouldUseSoftwareRendering()); 241 EXPECT_FALSE(manager->ShouldUseSoftwareRendering());
210 242
211 manager->BlacklistCard(); 243 manager->BlacklistCard();
212 EXPECT_TRUE(manager->GpuAccessAllowed()); 244 EXPECT_TRUE(manager->GpuAccessAllowed());
213 EXPECT_TRUE(manager->ShouldUseSoftwareRendering()); 245 EXPECT_TRUE(manager->ShouldUseSoftwareRendering());
214 EXPECT_EQ(GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS, 246 EXPECT_EQ(GPU_FEATURE_TYPE_ACCELERATED_2D_CANVAS,
215 manager->GetBlacklistedFeatures()); 247 manager->GetBlacklistedFeatures());
216
217 delete manager;
218 } 248 }
219 249
220 TEST_F(GpuDataManagerImplTest, GpuInfoUpdate) { 250 TEST_F(GpuDataManagerImplTest, GpuInfoUpdate) {
221 GpuDataManagerImpl* manager = new GpuDataManagerImpl(); 251 ScopedGpuDataManagerImpl manager;
222 ASSERT_TRUE(manager); 252 ASSERT_TRUE(manager.get());
223 253
224 TestObserver observer; 254 TestObserver observer;
225 manager->AddObserver(&observer); 255 manager->AddObserver(&observer);
226 256
227 { 257 {
228 base::RunLoop run_loop; 258 base::RunLoop run_loop;
229 run_loop.RunUntilIdle(); 259 run_loop.RunUntilIdle();
230 } 260 }
231 EXPECT_FALSE(observer.gpu_info_updated()); 261 EXPECT_FALSE(observer.gpu_info_updated());
232 262
233 GPUInfo gpu_info; 263 GPUInfo gpu_info;
234 manager->UpdateGpuInfo(gpu_info); 264 manager->UpdateGpuInfo(gpu_info);
235 { 265 {
236 base::RunLoop run_loop; 266 base::RunLoop run_loop;
237 run_loop.RunUntilIdle(); 267 run_loop.RunUntilIdle();
238 } 268 }
239 EXPECT_TRUE(observer.gpu_info_updated()); 269 EXPECT_TRUE(observer.gpu_info_updated());
240
241 delete manager;
242 } 270 }
243 271
244 TEST_F(GpuDataManagerImplTest, NoGpuInfoUpdateWithSoftwareRendering) { 272 TEST_F(GpuDataManagerImplTest, NoGpuInfoUpdateWithSoftwareRendering) {
245 GpuDataManagerImpl* manager = new GpuDataManagerImpl(); 273 ScopedGpuDataManagerImpl manager;
246 ASSERT_TRUE(manager); 274 ASSERT_TRUE(manager.get());
247 275
248 manager->BlacklistCard(); 276 manager->BlacklistCard();
249 const FilePath test_path(FILE_PATH_LITERAL("AnyPath")); 277 const FilePath test_path(FILE_PATH_LITERAL("AnyPath"));
250 manager->RegisterSwiftShaderPath(test_path); 278 manager->RegisterSwiftShaderPath(test_path);
251 EXPECT_TRUE(manager->ShouldUseSoftwareRendering()); 279 EXPECT_TRUE(manager->ShouldUseSoftwareRendering());
252 EXPECT_TRUE(manager->GpuAccessAllowed()); 280 EXPECT_TRUE(manager->GpuAccessAllowed());
253 281
254 { 282 {
255 base::RunLoop run_loop; 283 base::RunLoop run_loop;
256 run_loop.RunUntilIdle(); 284 run_loop.RunUntilIdle();
257 } 285 }
258 286
259 TestObserver observer; 287 TestObserver observer;
260 manager->AddObserver(&observer); 288 manager->AddObserver(&observer);
261 { 289 {
262 base::RunLoop run_loop; 290 base::RunLoop run_loop;
263 run_loop.RunUntilIdle(); 291 run_loop.RunUntilIdle();
264 } 292 }
265 EXPECT_FALSE(observer.gpu_info_updated()); 293 EXPECT_FALSE(observer.gpu_info_updated());
266 294
267 GPUInfo gpu_info; 295 GPUInfo gpu_info;
268 manager->UpdateGpuInfo(gpu_info); 296 manager->UpdateGpuInfo(gpu_info);
269 { 297 {
270 base::RunLoop run_loop; 298 base::RunLoop run_loop;
271 run_loop.RunUntilIdle(); 299 run_loop.RunUntilIdle();
272 } 300 }
273 EXPECT_FALSE(observer.gpu_info_updated()); 301 EXPECT_FALSE(observer.gpu_info_updated());
274
275 delete manager;
276 } 302 }
277 303
278 TEST_F(GpuDataManagerImplTest, GPUVideoMemoryUsageStatsUpdate) { 304 TEST_F(GpuDataManagerImplTest, GPUVideoMemoryUsageStatsUpdate) {
279 GpuDataManagerImpl* manager = new GpuDataManagerImpl(); 305 ScopedGpuDataManagerImpl manager;
280 ASSERT_TRUE(manager); 306 ASSERT_TRUE(manager.get());
281 307
282 TestObserver observer; 308 TestObserver observer;
283 manager->AddObserver(&observer); 309 manager->AddObserver(&observer);
284 310
285 { 311 {
286 base::RunLoop run_loop; 312 base::RunLoop run_loop;
287 run_loop.RunUntilIdle(); 313 run_loop.RunUntilIdle();
288 } 314 }
289 EXPECT_FALSE(observer.video_memory_usage_stats_updated()); 315 EXPECT_FALSE(observer.video_memory_usage_stats_updated());
290 316
291 GPUVideoMemoryUsageStats vram_stats; 317 GPUVideoMemoryUsageStats vram_stats;
292 manager->UpdateVideoMemoryUsageStats(vram_stats); 318 manager->UpdateVideoMemoryUsageStats(vram_stats);
293 { 319 {
294 base::RunLoop run_loop; 320 base::RunLoop run_loop;
295 run_loop.RunUntilIdle(); 321 run_loop.RunUntilIdle();
296 } 322 }
297 EXPECT_TRUE(observer.video_memory_usage_stats_updated()); 323 EXPECT_TRUE(observer.video_memory_usage_stats_updated());
324 }
298 325
299 delete manager; 326 base::Time GpuDataManagerImplTest::JustBeforeExpiration(
327 GpuDataManagerImpl* manager) {
328 return GetTimeForTesting() + base::TimeDelta::FromMilliseconds(
329 manager->GetBlockAllDomainsDurationInMs()) -
330 base::TimeDelta::FromMilliseconds(3);
331 }
332
333 base::Time GpuDataManagerImplTest::JustAfterExpiration(
334 GpuDataManagerImpl* manager) {
335 return GetTimeForTesting() + base::TimeDelta::FromMilliseconds(
336 manager->GetBlockAllDomainsDurationInMs()) +
337 base::TimeDelta::FromMilliseconds(3);
338 }
339
340 void GpuDataManagerImplTest::TestBlockingDomainFrom3DAPIs(
341 GpuDataManagerImpl::DomainGuilt guilt_level) {
342 ScopedGpuDataManagerImpl manager;
343 ASSERT_TRUE(manager.get());
344
345 manager->BlockDomainFrom3DAPIsAtTime(GetDomain1ForTesting(),
346 guilt_level,
347 GetTimeForTesting());
348
349 // This domain should be blocked no matter what.
350 EXPECT_EQ(GpuDataManagerImpl::DOMAIN_BLOCK_STATUS_BLOCKED,
351 manager->Are3DAPIsBlockedAtTime(GetDomain1ForTesting(),
352 GetTimeForTesting()));
353 EXPECT_EQ(GpuDataManagerImpl::DOMAIN_BLOCK_STATUS_BLOCKED,
354 manager->Are3DAPIsBlockedAtTime(GetDomain1ForTesting(),
355 JustBeforeExpiration(manager)));
356 EXPECT_EQ(GpuDataManagerImpl::DOMAIN_BLOCK_STATUS_BLOCKED,
357 manager->Are3DAPIsBlockedAtTime(GetDomain1ForTesting(),
358 JustAfterExpiration(manager)));
359 }
360
361 void GpuDataManagerImplTest::TestUnblockingDomainFrom3DAPIs(
362 GpuDataManagerImpl::DomainGuilt guilt_level) {
363 ScopedGpuDataManagerImpl manager;
364 ASSERT_TRUE(manager.get());
365
366 manager->BlockDomainFrom3DAPIsAtTime(GetDomain1ForTesting(),
367 guilt_level,
368 GetTimeForTesting());
369
370 // Unblocking the domain should work.
371 manager->UnblockDomainFrom3DAPIs(GetDomain1ForTesting());
372 EXPECT_EQ(GpuDataManagerImpl::DOMAIN_BLOCK_STATUS_NOT_BLOCKED,
373 manager->Are3DAPIsBlockedAtTime(GetDomain1ForTesting(),
374 GetTimeForTesting()));
375 EXPECT_EQ(GpuDataManagerImpl::DOMAIN_BLOCK_STATUS_NOT_BLOCKED,
376 manager->Are3DAPIsBlockedAtTime(GetDomain1ForTesting(),
377 JustBeforeExpiration(manager)));
378 EXPECT_EQ(GpuDataManagerImpl::DOMAIN_BLOCK_STATUS_NOT_BLOCKED,
379 manager->Are3DAPIsBlockedAtTime(GetDomain1ForTesting(),
380 JustAfterExpiration(manager)));
381 }
382
383 TEST_F(GpuDataManagerImplTest, BlockGuiltyDomainFrom3DAPIs) {
384 TestBlockingDomainFrom3DAPIs(GpuDataManagerImpl::DOMAIN_GUILT_KNOWN);
385 }
386
387 TEST_F(GpuDataManagerImplTest, BlockDomainOfUnknownGuiltFrom3DAPIs) {
388 TestBlockingDomainFrom3DAPIs(GpuDataManagerImpl::DOMAIN_GUILT_UNKNOWN);
389 }
390
391 TEST_F(GpuDataManagerImplTest, BlockAllDomainsFrom3DAPIs) {
392 ScopedGpuDataManagerImpl manager;
393 ASSERT_TRUE(manager.get());
394
395 manager->BlockDomainFrom3DAPIsAtTime(GetDomain1ForTesting(),
396 GpuDataManagerImpl::DOMAIN_GUILT_UNKNOWN,
397 GetTimeForTesting());
398
399 // Blocking of other domains should expire.
400 EXPECT_EQ(GpuDataManagerImpl::DOMAIN_BLOCK_STATUS_ALL_DOMAINS_BLOCKED,
401 manager->Are3DAPIsBlockedAtTime(GetDomain2ForTesting(),
402 JustBeforeExpiration(manager)));
403 EXPECT_EQ(GpuDataManagerImpl::DOMAIN_BLOCK_STATUS_NOT_BLOCKED,
404 manager->Are3DAPIsBlockedAtTime(GetDomain2ForTesting(),
405 JustAfterExpiration(manager)));
406 }
407
408 TEST_F(GpuDataManagerImplTest, UnblockGuiltyDomainFrom3DAPIs) {
409 TestUnblockingDomainFrom3DAPIs(GpuDataManagerImpl::DOMAIN_GUILT_KNOWN);
410 }
411
412 TEST_F(GpuDataManagerImplTest, UnblockDomainOfUnknownGuiltFrom3DAPIs) {
413 TestUnblockingDomainFrom3DAPIs(GpuDataManagerImpl::DOMAIN_GUILT_UNKNOWN);
414 }
415
416 TEST_F(GpuDataManagerImplTest, UnblockOtherDomainFrom3DAPIs) {
417 ScopedGpuDataManagerImpl manager;
418 ASSERT_TRUE(manager.get());
419
420 manager->BlockDomainFrom3DAPIsAtTime(GetDomain1ForTesting(),
421 GpuDataManagerImpl::DOMAIN_GUILT_UNKNOWN,
422 GetTimeForTesting());
423
424 manager->UnblockDomainFrom3DAPIs(GetDomain2ForTesting());
425
426 EXPECT_EQ(GpuDataManagerImpl::DOMAIN_BLOCK_STATUS_NOT_BLOCKED,
427 manager->Are3DAPIsBlockedAtTime(GetDomain2ForTesting(),
428 JustBeforeExpiration(manager)));
429
430 // The original domain should still be blocked.
431 EXPECT_EQ(GpuDataManagerImpl::DOMAIN_BLOCK_STATUS_BLOCKED,
432 manager->Are3DAPIsBlockedAtTime(GetDomain1ForTesting(),
433 JustBeforeExpiration(manager)));
434 }
435
436 TEST_F(GpuDataManagerImplTest, UnblockThisDomainFrom3DAPIs) {
437 ScopedGpuDataManagerImpl manager;
438 ASSERT_TRUE(manager.get());
439
440 manager->BlockDomainFrom3DAPIsAtTime(GetDomain1ForTesting(),
441 GpuDataManagerImpl::DOMAIN_GUILT_UNKNOWN,
442 GetTimeForTesting());
443
444 manager->UnblockDomainFrom3DAPIs(GetDomain1ForTesting());
445
446 // This behavior is debatable. Perhaps the GPU reset caused by
447 // domain 1 should still cause other domains to be blocked.
448 EXPECT_EQ(GpuDataManagerImpl::DOMAIN_BLOCK_STATUS_NOT_BLOCKED,
449 manager->Are3DAPIsBlockedAtTime(GetDomain2ForTesting(),
450 JustBeforeExpiration(manager)));
300 } 451 }
301 452
302 } // namespace content 453 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/gpu/gpu_data_manager_impl.cc ('k') | content/browser/renderer_host/render_message_filter.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698