| Index: chrome/browser/gpu_blacklist_unittest.cc
 | 
| ===================================================================
 | 
| --- chrome/browser/gpu_blacklist_unittest.cc	(revision 0)
 | 
| +++ chrome/browser/gpu_blacklist_unittest.cc	(revision 0)
 | 
| @@ -0,0 +1,149 @@
 | 
| +// Copyright (c) 2010 The Chromium Authors. All rights reserved.
 | 
| +// Use of this source code is governed by a BSD-style license that can be
 | 
| +// found in the LICENSE file.
 | 
| +
 | 
| +#include "testing/gtest/include/gtest/gtest.h"
 | 
| +#include "chrome/browser/gpu_blacklist.h"
 | 
| +
 | 
| +TEST(GpuBlacklistTest, BlacklistLogic) {
 | 
| +  GPUInfo gpu_info;
 | 
| +  gpu_info.SetGraphicsInfo(0x10de,  // Vendor ID
 | 
| +                           0x0640,  // Device ID
 | 
| +                           L"1.6.18",  // Driver Version
 | 
| +                           0x0114,  // Pixel Shader Version
 | 
| +                           0x0114,  // Vertex Shader Version
 | 
| +                           0x0201,  // GL version,
 | 
| +                           true);  // can_lose_context
 | 
| +  scoped_ptr<Version> os_version(Version::GetVersionFromString("10.6.4"));
 | 
| +
 | 
| +  GpuBlacklist blacklist;
 | 
| +
 | 
| +  // Default blacklist settings: all feature are allowed.
 | 
| +  GpuFeatureFlags flags = blacklist.DetermineGpuFeatureFlags(
 | 
| +      GpuBlacklist::kOsMacosx, os_version.get(), gpu_info);
 | 
| +  EXPECT_FALSE(flags.is_accelerated_2d_canvas_blacklisted());
 | 
| +  EXPECT_FALSE(flags.is_accelerated_compositing_blacklisted());
 | 
| +  EXPECT_FALSE(flags.is_webgl_blacklisted());
 | 
| +
 | 
| +  // Empty list: all features are allowed.
 | 
| +  const std::string empty_list_json =
 | 
| +      "{\n"
 | 
| +      "  \"name\": \"gpu blacklist\",\n"
 | 
| +      "  \"version\": \"0.0\",\n"
 | 
| +      "  \"entries\": [\n"
 | 
| +      "  ]\n"
 | 
| +      "}";
 | 
| +  EXPECT_TRUE(blacklist.LoadGpuBlacklist(empty_list_json));
 | 
| +  flags = blacklist.DetermineGpuFeatureFlags(
 | 
| +      GpuBlacklist::kOsMacosx, os_version.get(), gpu_info);
 | 
| +  EXPECT_FALSE(flags.is_accelerated_2d_canvas_blacklisted());
 | 
| +  EXPECT_FALSE(flags.is_accelerated_compositing_blacklisted());
 | 
| +  EXPECT_FALSE(flags.is_webgl_blacklisted());
 | 
| +
 | 
| +  // Blacklist accelerated_compositing with exact setting.
 | 
| +  const std::string exact_list_json =
 | 
| +      "{\n"
 | 
| +      "  \"name\": \"gpu blacklist\",\n"
 | 
| +      "  \"version\": \"0.1\",\n"
 | 
| +      "  \"entries\": [\n"
 | 
| +      "    {\n"
 | 
| +      "      \"os\": {\n"
 | 
| +      "        \"type\": \"macosx\",\n"
 | 
| +      "        \"version\": {\n"
 | 
| +      "          \"op\": \"=\",\n"
 | 
| +      "          \"number\": \"10.6.4\"\n"
 | 
| +      "        }\n"
 | 
| +      "      },\n"
 | 
| +      "      \"vendor_id\": \"0x10de\",\n"
 | 
| +      "      \"device_id\": \"0x0640\",\n"
 | 
| +      "      \"driver_version\": {\n"
 | 
| +      "        \"op\": \"=\",\n"
 | 
| +      "        \"number\": \"1.6.18\"\n"
 | 
| +      "      },\n"
 | 
| +      "      \"blacklist\": [\n"
 | 
| +      "        \"accelerated_compositing\",\n"
 | 
| +      "      ]\n"
 | 
| +      "    }\n"
 | 
| +      "  ]\n"
 | 
| +      "}";
 | 
| +  EXPECT_TRUE(blacklist.LoadGpuBlacklist(exact_list_json));
 | 
| +  flags = blacklist.DetermineGpuFeatureFlags(
 | 
| +      GpuBlacklist::kOsMacosx, os_version.get(), gpu_info);
 | 
| +  EXPECT_FALSE(flags.is_accelerated_2d_canvas_blacklisted());
 | 
| +  EXPECT_TRUE(flags.is_accelerated_compositing_blacklisted());
 | 
| +  EXPECT_FALSE(flags.is_webgl_blacklisted());
 | 
| +
 | 
| +  // Invalid json input should not change the current blacklist settings.
 | 
| +  const std::string invalid_json = "invalid";
 | 
| +  EXPECT_FALSE(blacklist.LoadGpuBlacklist(invalid_json));
 | 
| +  flags = blacklist.DetermineGpuFeatureFlags(
 | 
| +      GpuBlacklist::kOsMacosx, os_version.get(), gpu_info);
 | 
| +  EXPECT_FALSE(flags.is_accelerated_2d_canvas_blacklisted());
 | 
| +  EXPECT_TRUE(flags.is_accelerated_compositing_blacklisted());
 | 
| +  EXPECT_FALSE(flags.is_webgl_blacklisted());
 | 
| +
 | 
| +  // Blacklist a vendor on all OS.
 | 
| +  const std::string vendor_json =
 | 
| +      "{\n"
 | 
| +      "  \"name\": \"gpu blacklist\",\n"
 | 
| +      "  \"version\": \"0.1\",\n"
 | 
| +      "  \"entries\": [\n"
 | 
| +      "    {\n"
 | 
| +      "      \"vendor_id\": \"0x10de\",\n"
 | 
| +      "      \"blacklist\": [\n"
 | 
| +      "        \"webgl\",\n"
 | 
| +      "      ]\n"
 | 
| +      "    }\n"
 | 
| +      "  ]\n"
 | 
| +      "}";
 | 
| +  EXPECT_TRUE(blacklist.LoadGpuBlacklist(vendor_json));
 | 
| +  flags = blacklist.DetermineGpuFeatureFlags(
 | 
| +      GpuBlacklist::kOsMacosx, os_version.get(), gpu_info);
 | 
| +  EXPECT_FALSE(flags.is_accelerated_2d_canvas_blacklisted());
 | 
| +  EXPECT_FALSE(flags.is_accelerated_compositing_blacklisted());
 | 
| +  EXPECT_TRUE(flags.is_webgl_blacklisted());
 | 
| +  flags = blacklist.DetermineGpuFeatureFlags(
 | 
| +      GpuBlacklist::kOsWin, os_version.get(), gpu_info);
 | 
| +  EXPECT_FALSE(flags.is_accelerated_2d_canvas_blacklisted());
 | 
| +  EXPECT_FALSE(flags.is_accelerated_compositing_blacklisted());
 | 
| +  EXPECT_TRUE(flags.is_webgl_blacklisted());
 | 
| +  flags = blacklist.DetermineGpuFeatureFlags(
 | 
| +      GpuBlacklist::kOsLinux, os_version.get(), gpu_info);
 | 
| +  EXPECT_FALSE(flags.is_accelerated_2d_canvas_blacklisted());
 | 
| +  EXPECT_FALSE(flags.is_accelerated_compositing_blacklisted());
 | 
| +  EXPECT_TRUE(flags.is_webgl_blacklisted());
 | 
| +
 | 
| +  // Blacklist a vendor on Linux only.
 | 
| +  const std::string vendor_linux_json =
 | 
| +      "{\n"
 | 
| +      "  \"name\": \"gpu blacklist\",\n"
 | 
| +      "  \"version\": \"0.1\",\n"
 | 
| +      "  \"entries\": [\n"
 | 
| +      "    {\n"
 | 
| +      "      \"os\": {\n"
 | 
| +      "        \"type\": \"linux\"\n"
 | 
| +      "      },\n"
 | 
| +      "      \"vendor_id\": \"0x10de\",\n"
 | 
| +      "      \"blacklist\": [\n"
 | 
| +      "        \"accelerated_2d_canvas\",\n"
 | 
| +      "      ]\n"
 | 
| +      "    }\n"
 | 
| +      "  ]\n"
 | 
| +      "}";
 | 
| +  EXPECT_TRUE(blacklist.LoadGpuBlacklist(vendor_linux_json));
 | 
| +  flags = blacklist.DetermineGpuFeatureFlags(
 | 
| +      GpuBlacklist::kOsMacosx, os_version.get(), gpu_info);
 | 
| +  EXPECT_FALSE(flags.is_accelerated_2d_canvas_blacklisted());
 | 
| +  EXPECT_FALSE(flags.is_accelerated_compositing_blacklisted());
 | 
| +  EXPECT_FALSE(flags.is_webgl_blacklisted());
 | 
| +  flags = blacklist.DetermineGpuFeatureFlags(
 | 
| +      GpuBlacklist::kOsWin, os_version.get(), gpu_info);
 | 
| +  EXPECT_FALSE(flags.is_accelerated_2d_canvas_blacklisted());
 | 
| +  EXPECT_FALSE(flags.is_accelerated_compositing_blacklisted());
 | 
| +  EXPECT_FALSE(flags.is_webgl_blacklisted());
 | 
| +  flags = blacklist.DetermineGpuFeatureFlags(
 | 
| +      GpuBlacklist::kOsLinux, os_version.get(), gpu_info);
 | 
| +  EXPECT_TRUE(flags.is_accelerated_2d_canvas_blacklisted());
 | 
| +  EXPECT_FALSE(flags.is_accelerated_compositing_blacklisted());
 | 
| +  EXPECT_FALSE(flags.is_webgl_blacklisted());
 | 
| +}
 | 
| 
 |