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

Unified Diff: content/browser/gpu/gpu_data_manager_impl_unittest.cc

Issue 11366237: Add logic to block the use of client 3D APIs (WebGL, Pepper 3D) if context lost notifications are r… (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: 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 side-by-side diff with in-line comments
Download patch
Index: content/browser/gpu/gpu_data_manager_impl_unittest.cc
diff --git a/content/browser/gpu/gpu_data_manager_impl_unittest.cc b/content/browser/gpu/gpu_data_manager_impl_unittest.cc
index 371f60721f4b5b041005c6e6795e6c30143d79d9..0700d3fa286dcff634b3535987ac5000553bcca2 100644
--- a/content/browser/gpu/gpu_data_manager_impl_unittest.cc
+++ b/content/browser/gpu/gpu_data_manager_impl_unittest.cc
@@ -4,9 +4,11 @@
#include "base/message_loop.h"
#include "base/run_loop.h"
+#include "base/time.h"
#include "content/browser/gpu/gpu_data_manager_impl.h"
#include "content/public/browser/gpu_data_manager_observer.h"
#include "content/public/common/gpu_info.h"
+#include "googleurl/src/gurl.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace content {
@@ -39,6 +41,18 @@ class TestObserver : public GpuDataManagerObserver {
bool video_memory_usage_stats_updated_;
};
+static base::Time GetTimeForTesting() {
+ return base::Time::FromDoubleT(1000);
+}
+
+static GURL GetDomain1ForTesting() {
+ return GURL("http://foo.com/");
+}
+
+static GURL GetDomain2ForTesting() {
+ return GURL("http://bar.com/");
+}
+
} // namespace anonymous
class GpuDataManagerImplTest : public testing::Test {
@@ -54,6 +68,13 @@ class GpuDataManagerImplTest : public testing::Test {
void TearDown() {
}
+ base::Time JustBeforeExpiration(GpuDataManagerImpl* manager);
+ base::Time JustAfterExpiration(GpuDataManagerImpl* manager);
+ void TestBlockingDomainFrom3DAPIs(
+ GpuDataManager::DomainGuilt guilt_level);
+ void TestUnblockingDomainFrom3DAPIs(
+ GpuDataManager::DomainGuilt guilt_level);
+
MessageLoop message_loop_;
};
@@ -299,4 +320,131 @@ TEST_F(GpuDataManagerImplTest, GPUVideoMemoryUsageStatsUpdate) {
delete manager;
}
+base::Time GpuDataManagerImplTest::JustBeforeExpiration(
+ GpuDataManagerImpl* manager) {
+ return GetTimeForTesting() + base::TimeDelta::FromMilliseconds(
+ manager->GetBlockAllDomainsDurationInMs()) -
+ base::TimeDelta::FromMilliseconds(3);
+}
+
+base::Time GpuDataManagerImplTest::JustAfterExpiration(
+ GpuDataManagerImpl* manager) {
+ return GetTimeForTesting() + base::TimeDelta::FromMilliseconds(
+ manager->GetBlockAllDomainsDurationInMs()) +
+ base::TimeDelta::FromMilliseconds(3);
+}
+
+void GpuDataManagerImplTest::TestBlockingDomainFrom3DAPIs(
+ GpuDataManager::DomainGuilt guilt_level) {
+ GpuDataManagerImpl* manager = new GpuDataManagerImpl();
Zhenyao Mo 2012/11/14 16:35:58 You need to manually delete this manager to avoid
Ken Russell (switch to Gerrit) 2012/11/14 19:09:14 I see. I don't think this is maintainable so I've
+ ASSERT_TRUE(manager);
+
+ manager->BlockDomainFrom3DAPIsAtTime(GetDomain1ForTesting(),
+ guilt_level,
+ GetTimeForTesting());
+
+ // This domain should be blocked no matter what.
+ EXPECT_EQ(GpuDataManager::kDomainBlocked, manager->Are3DAPIsBlockedAtTime(
+ GetDomain1ForTesting(),
+ GetTimeForTesting()));
+ EXPECT_EQ(GpuDataManager::kDomainBlocked, manager->Are3DAPIsBlockedAtTime(
+ GetDomain1ForTesting(),
+ JustBeforeExpiration(manager)));
+ EXPECT_EQ(GpuDataManager::kDomainBlocked, manager->Are3DAPIsBlockedAtTime(
+ GetDomain1ForTesting(),
+ JustAfterExpiration(manager)));
+}
+
+void GpuDataManagerImplTest::TestUnblockingDomainFrom3DAPIs(
+ GpuDataManager::DomainGuilt guilt_level) {
+ GpuDataManagerImpl* manager = new GpuDataManagerImpl();
Zhenyao Mo 2012/11/14 16:35:58 delete manager in the end
+ ASSERT_TRUE(manager);
+
+ manager->BlockDomainFrom3DAPIsAtTime(GetDomain1ForTesting(),
+ guilt_level,
+ GetTimeForTesting());
+
+ // Unblocking the domain should work.
+ manager->UnblockDomainFrom3DAPIs(GetDomain1ForTesting());
+ EXPECT_EQ(GpuDataManager::kNotBlocked, manager->Are3DAPIsBlockedAtTime(
+ GetDomain1ForTesting(),
+ GetTimeForTesting()));
+ EXPECT_EQ(GpuDataManager::kNotBlocked, manager->Are3DAPIsBlockedAtTime(
+ GetDomain1ForTesting(),
+ JustBeforeExpiration(manager)));
+ EXPECT_EQ(GpuDataManager::kNotBlocked, manager->Are3DAPIsBlockedAtTime(
+ GetDomain1ForTesting(),
+ JustAfterExpiration(manager)));
+}
+
+TEST_F(GpuDataManagerImplTest, BlockGuiltyDomainFrom3DAPIs) {
+ TestBlockingDomainFrom3DAPIs(GpuDataManager::kKnownGuilty);
+}
+
+TEST_F(GpuDataManagerImplTest, BlockDomainOfUnknownGuiltFrom3DAPIs) {
+ TestBlockingDomainFrom3DAPIs(GpuDataManager::kUnknownGuilt);
+}
+
+TEST_F(GpuDataManagerImplTest, BlockAllDomainsFrom3DAPIs) {
+ GpuDataManagerImpl* manager = new GpuDataManagerImpl();
Zhenyao Mo 2012/11/14 16:35:58 delete manager in the end
+ ASSERT_TRUE(manager);
+
+ manager->BlockDomainFrom3DAPIsAtTime(GetDomain1ForTesting(),
+ GpuDataManager::kUnknownGuilt,
+ GetTimeForTesting());
+
+ // Blocking of other domains should expire.
+ EXPECT_EQ(GpuDataManager::kAllDomainsBlocked, manager->Are3DAPIsBlockedAtTime(
+ GetDomain2ForTesting(),
+ JustBeforeExpiration(manager)));
+ EXPECT_EQ(GpuDataManager::kNotBlocked, manager->Are3DAPIsBlockedAtTime(
+ GetDomain2ForTesting(),
+ JustAfterExpiration(manager)));
+}
+
+TEST_F(GpuDataManagerImplTest, UnblockGuiltyDomainFrom3DAPIs) {
+ TestUnblockingDomainFrom3DAPIs(GpuDataManager::kKnownGuilty);
+}
+
+TEST_F(GpuDataManagerImplTest, UnblockDomainOfUnknownGuiltFrom3DAPIs) {
+ TestUnblockingDomainFrom3DAPIs(GpuDataManager::kUnknownGuilt);
+}
+
+TEST_F(GpuDataManagerImplTest, UnblockOtherDomainFrom3DAPIs) {
+ GpuDataManagerImpl* manager = new GpuDataManagerImpl();
Zhenyao Mo 2012/11/14 16:35:58 delete manager in the end
+ ASSERT_TRUE(manager);
+
+ manager->BlockDomainFrom3DAPIsAtTime(GetDomain1ForTesting(),
+ GpuDataManager::kUnknownGuilt,
+ GetTimeForTesting());
+
+ manager->UnblockDomainFrom3DAPIs(GetDomain2ForTesting());
+
+ EXPECT_EQ(GpuDataManager::kNotBlocked, manager->Are3DAPIsBlockedAtTime(
+ GetDomain2ForTesting(),
+ JustBeforeExpiration(manager)));
+
+ // The original domain should still be blocked.
+ EXPECT_EQ(GpuDataManager::kDomainBlocked, manager->Are3DAPIsBlockedAtTime(
+ GetDomain1ForTesting(),
+ JustBeforeExpiration(manager)));
+}
+
+TEST_F(GpuDataManagerImplTest, UnblockThisDomainFrom3DAPIs) {
+ GpuDataManagerImpl* manager = new GpuDataManagerImpl();
+ ASSERT_TRUE(manager);
+
+ manager->BlockDomainFrom3DAPIsAtTime(GetDomain1ForTesting(),
+ GpuDataManager::kUnknownGuilt,
+ GetTimeForTesting());
+
+ manager->UnblockDomainFrom3DAPIs(GetDomain1ForTesting());
+
+ // This behavior is debatable. Perhaps the GPU reset caused by
+ // domain 1 should still cause other domains to be blocked.
+ EXPECT_EQ(GpuDataManager::kNotBlocked, manager->Are3DAPIsBlockedAtTime(
+ GetDomain2ForTesting(),
+ JustBeforeExpiration(manager)));
+}
+
} // namespace content

Powered by Google App Engine
This is Rietveld 408576698