diff options
| author | bauerb@chromium.org <bauerb@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-07-02 09:31:11 +0000 |
|---|---|---|
| committer | bauerb@chromium.org <bauerb@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-07-02 09:31:11 +0000 |
| commit | 0a8b1e2c78db8b03065787c8b7b9d3fabb6729ee (patch) | |
| tree | 445be17ecbb9212c374c594b4a5ad80ef3954130 /chrome/browser/plugin_updater_unittest.cc | |
| parent | 796d0c6845a8eb6442e04035dc1b59d21555d7f3 (diff) | |
| download | chromium_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.cc | 112 |
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); + } +} |
