summaryrefslogtreecommitdiffstats
path: root/chrome/browser/plugin_updater_unittest.cc
diff options
context:
space:
mode:
authorbauerb@chromium.org <bauerb@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-07-02 09:31:11 +0000
committerbauerb@chromium.org <bauerb@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-07-02 09:31:11 +0000
commit0a8b1e2c78db8b03065787c8b7b9d3fabb6729ee (patch)
tree445be17ecbb9212c374c594b4a5ad80ef3954130 /chrome/browser/plugin_updater_unittest.cc
parent796d0c6845a8eb6442e04035dc1b59d21555d7f3 (diff)
downloadchromium_src-0a8b1e2c78db8b03065787c8b7b9d3fabb6729ee.zip
chromium_src-0a8b1e2c78db8b03065787c8b7b9d3fabb6729ee.tar.gz
chromium_src-0a8b1e2c78db8b03065787c8b7b9d3fabb6729ee.tar.bz2
Group plugins in about:plugins and show update link for out-of-date ones.
Re-landing patch by mavrommatis, original review here: <http://codereview.chromium.org/1991005> Original description follows: (1) Group plugins with the same name together. (2) Show a download link for plugin versions with known security problems in about:plugins. BUG=3910,47858 TEST=Open "chrome://plugins", see that plugins are grouped, and that any vulnerable plugins are marked red. Try enabling and disabling plugin groups. Also, if the internal PDF plugin is enabled, it should stay enabled after a restart. Review URL: http://codereview.chromium.org/2811037 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@51510 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/plugin_updater_unittest.cc')
-rw-r--r--chrome/browser/plugin_updater_unittest.cc112
1 files changed, 112 insertions, 0 deletions
diff --git a/chrome/browser/plugin_updater_unittest.cc b/chrome/browser/plugin_updater_unittest.cc
new file mode 100644
index 0000000..d6df331
--- /dev/null
+++ b/chrome/browser/plugin_updater_unittest.cc
@@ -0,0 +1,112 @@
+// Copyright (c) 2009 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 "chrome/browser/plugin_updater.h"
+
+#include <string>
+#include <vector>
+
+#include "base/scoped_ptr.h"
+#include "base/string_util.h"
+#include "base/version.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "webkit/glue/plugins/webplugininfo.h"
+
+static const PluginGroupDefinition kPluginDef = {
+ "MyPlugin", "MyPlugin", "", "", "3.0.44", "http://latest/" };
+static const PluginGroupDefinition kPluginDef3 = {
+ "MyPlugin 3", "MyPlugin", "0", "4", "3.0.44", "http://latest" };
+static const PluginGroupDefinition kPluginDef4 = {
+ "MyPlugin 4", "MyPlugin", "4", "5", "4.0.44", "http://latest" };
+static const PluginGroupDefinition kPluginDefNotVulnerable = {
+ "MyPlugin", "MyPlugin", "", "", "", "http://latest" };
+
+// name, path, version, desc, mime_types, enabled.
+static WebPluginInfo kPlugin2043 = {
+ ASCIIToUTF16("MyPlugin"), FilePath(), ASCIIToUTF16("2.0.43"), string16(),
+ std::vector<WebPluginMimeType>(), true };
+static WebPluginInfo kPlugin3043 = {
+ ASCIIToUTF16("MyPlugin"), FilePath(), ASCIIToUTF16("3.0.43"), string16(),
+ std::vector<WebPluginMimeType>(), true };
+static WebPluginInfo kPlugin3044 = {
+ ASCIIToUTF16("MyPlugin"), FilePath(), ASCIIToUTF16("3.0.44"), string16(),
+ std::vector<WebPluginMimeType>(), true };
+static WebPluginInfo kPlugin3045 = {
+ ASCIIToUTF16("MyPlugin"), FilePath(), ASCIIToUTF16("3.0.45"), string16(),
+ std::vector<WebPluginMimeType>(), true };
+static WebPluginInfo kPlugin4043 = {
+ ASCIIToUTF16("MyPlugin"), FilePath(), ASCIIToUTF16("4.0.43"), string16(),
+ std::vector<WebPluginMimeType>(), true };
+
+class PluginUpdaterTest : public testing::Test {
+};
+
+TEST(PluginUpdaterTest, PluginGroupMatch) {
+ scoped_ptr<PluginGroup> group(PluginGroup::FromPluginGroupDefinition(
+ kPluginDef3));
+ EXPECT_TRUE(group->Match(kPlugin3045));
+ group->AddPlugin(kPlugin3045, 0);
+ EXPECT_FALSE(group->IsVulnerable());
+}
+
+TEST(PluginUpdaterTest, PluginGroupMatchMultipleFiles) {
+ scoped_ptr<PluginGroup> group(PluginGroup::FromPluginGroupDefinition(
+ kPluginDef3));
+ EXPECT_TRUE(group->Match(kPlugin3043));
+ group->AddPlugin(kPlugin3043, 0);
+ EXPECT_TRUE(group->IsVulnerable());
+
+ EXPECT_TRUE(group->Match(kPlugin3045));
+ group->AddPlugin(kPlugin3045, 1);
+ EXPECT_FALSE(group->IsVulnerable());
+}
+
+TEST(PluginUpdaterTest, PluginGroupMatchCorrectVersion) {
+ scoped_ptr<PluginGroup> group(PluginGroup::FromPluginGroupDefinition(
+ kPluginDef3));
+ EXPECT_TRUE(group->Match(kPlugin2043));
+ EXPECT_TRUE(group->Match(kPlugin3043));
+ EXPECT_FALSE(group->Match(kPlugin4043));
+
+ group.reset(PluginGroup::FromPluginGroupDefinition(kPluginDef4));
+ EXPECT_FALSE(group->Match(kPlugin2043));
+ EXPECT_FALSE(group->Match(kPlugin3043));
+ EXPECT_TRUE(group->Match(kPlugin4043));
+}
+
+TEST(PluginUpdaterTest, PluginGroupDefinition) {
+ const PluginGroupDefinition* definitions =
+ PluginUpdater::GetPluginGroupDefinitions();
+ for (size_t i = 0; i < PluginUpdater::GetPluginGroupDefinitionsSize(); ++i) {
+ scoped_ptr<PluginGroup> def_group(
+ PluginGroup::FromPluginGroupDefinition(definitions[i]));
+ ASSERT_TRUE(def_group.get() != NULL);
+ EXPECT_FALSE(def_group->Match(kPlugin2043));
+ }
+}
+
+TEST(PluginUpdaterTest, VersionExtraction) {
+ // Some real-world plugin versions (spaces, commata, parentheses, 'r', oh my)
+ const char* versions[][2] = {
+ { "7.6.6 (1671)", "7.6.6.1671" }, // Quicktime
+ { "2, 0, 0, 254", "2.0.0.254" }, // DivX
+ { "3, 0, 0, 0", "3.0.0.0" }, // Picasa
+ { "1, 0, 0, 1", "1.0.0.1" }, // Earth
+ { "10,0,45,2", "10.0.45.2" }, // Flash
+ { "11.5.7r609", "11.5.7.609"} // Shockwave
+ };
+
+ for (size_t i = 0; i < arraysize(versions); i++) {
+ const WebPluginInfo plugin = {
+ ASCIIToUTF16("Blah Plugin"), FilePath(), ASCIIToUTF16(versions[i][0]),
+ string16(),std::vector<WebPluginMimeType>(), true };
+ scoped_ptr<PluginGroup> group(PluginGroup::FromWebPluginInfo(plugin));
+ EXPECT_TRUE(group->Match(plugin));
+ group->AddPlugin(plugin, 0);
+ scoped_ptr<DictionaryValue> data(group->GetData());
+ std::string version;
+ data->GetString(L"version", &version);
+ EXPECT_EQ(versions[i][1], version);
+ }
+}