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

Side by Side Diff: webkit/glue/plugins/plugin_list_unittest.cc

Issue 5783005: PluginList: Unit tests and bugfixes (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: address comments; rebase Created 10 years 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
(Empty)
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "webkit/glue/plugins/plugin_list.h"
6
7 #include "base/utf_string_conversions.h"
8 #include "testing/gtest/include/gtest/gtest.h"
9
10 namespace plugin_test_internal {
11
12 // A PluginList for tests that avoids file system IO. There is also no reason
13 // to use |lock_| (but it doesn't hurt either).
14 class PluginListWithoutFileIO : public NPAPI::PluginList {
15 public:
16 void CreatePluginGroup(const PluginGroupDefinition& definition) {
17 PluginGroup* group = PluginGroup::FromPluginGroupDefinition(definition);
18 ProcessGroupAfterInitialize(group);
19 plugin_groups_.insert(std::make_pair(group->identifier(), group));
20 }
21
22 void LoadDummyPlugin(WebPluginInfo* plugin) {
23 if (disabled_plugins_.count(plugin->path))
24 plugin->enabled = false;
25 else
26 plugin->enabled = true;
27 AddToPluginGroups(*plugin, &plugins_);
28 }
29
30 // NPAPI::PluginList methods:
31
32 virtual void LoadPlugins(bool refresh) {
33 if (plugins_loaded_ && !refresh)
34 return;
35
36 for (size_t i = 0; i < plugins_to_load_.size(); ++i)
37 LoadDummyPlugin(&plugins_to_load_[i]);
38
39 plugins_loaded_ = true;
40 }
41
42 virtual void ProcessGroupAfterInitialize(PluginGroup* group) {
43 group->set_plugin_list(this);
44 }
45
46 std::vector<WebPluginInfo> plugins_to_load_;
47 };
48
49 } // namespace plugin_test_internal
50
51 namespace {
52
53 bool Equals(const WebPluginInfo& a, const WebPluginInfo& b,
54 bool care_about_enabled_status) {
55 return (a.name == b.name &&
56 a.path == b.path &&
57 a.version == b.version &&
58 a.desc == b.desc &&
59 (!care_about_enabled_status || a.enabled == b.enabled));
60 }
61
62 bool Contains(const std::vector<WebPluginInfo>& list,
63 const WebPluginInfo& plugin,
64 bool care_about_enabled_status) {
65 for (std::vector<WebPluginInfo>::const_iterator it = list.begin();
66 it != list.end(); ++it) {
67 if (Equals(*it, plugin, care_about_enabled_status))
68 return true;
69 }
70 return false;
71 }
72
73 } // namespace
74
75 namespace NPAPI {
76
77 class PluginListTest : public testing::Test {
78 public:
79 PluginListTest()
80 : foo_plugin_(ASCIIToUTF16("Foo Plugin"),
81 FilePath(FILE_PATH_LITERAL("/plugins/foo.plugin")),
82 ASCIIToUTF16("1.2.3"),
83 ASCIIToUTF16("foo")),
84 bar_plugin_(ASCIIToUTF16("Bar Plugin"),
85 FilePath(FILE_PATH_LITERAL("/plugins/bar.plugin")),
86 ASCIIToUTF16("2.3.4"),
87 ASCIIToUTF16("bar")) {
88 }
89
90 virtual void SetUp() {
91 bar_plugin_.enabled = false;
92 plugin_list_.DisablePlugin(bar_plugin_.path, false);
93 plugin_list_.plugins_to_load_.push_back(foo_plugin_);
94 plugin_list_.plugins_to_load_.push_back(bar_plugin_);
95 }
96
97 protected:
98 plugin_test_internal::PluginListWithoutFileIO plugin_list_;
99 WebPluginInfo foo_plugin_;
100 WebPluginInfo bar_plugin_;
101 };
102
103 TEST_F(PluginListTest, GetPlugins) {
104 std::vector<WebPluginInfo> plugins;
105 plugin_list_.GetPlugins(false, &plugins);
106 EXPECT_EQ(size_t(2), plugins.size());
107 EXPECT_TRUE(Contains(plugins, foo_plugin_, true));
108 EXPECT_TRUE(Contains(plugins, bar_plugin_, true));
109 }
110
111 TEST_F(PluginListTest, GetEnabledPlugins) {
112 std::vector<WebPluginInfo> plugins;
113 plugin_list_.GetEnabledPlugins(false, &plugins);
114 EXPECT_EQ(size_t(1), plugins.size());
115 EXPECT_TRUE(Contains(plugins, foo_plugin_, true));
116 }
117
118 TEST_F(PluginListTest, GetPluginGroup) {
119 const PluginGroup* foo_group = plugin_list_.GetPluginGroup(foo_plugin_);
120 EXPECT_EQ(foo_group->GetGroupName(), foo_plugin_.name);
121 EXPECT_TRUE(foo_group->Enabled());
122 // The second request should return a pointer to the same instance.
123 const PluginGroup* foo_group2 = plugin_list_.GetPluginGroup(foo_plugin_);
124 EXPECT_EQ(foo_group, foo_group2);
125 const PluginGroup* bar_group = plugin_list_.GetPluginGroup(bar_plugin_);
126 EXPECT_FALSE(bar_group->Enabled());
127 }
128
129 TEST_F(PluginListTest, EnableDisablePlugin) {
130 // Disable "foo" plugin.
131 plugin_list_.DisablePlugin(foo_plugin_.path, false);
132 std::vector<WebPluginInfo> plugins;
133 plugin_list_.GetEnabledPlugins(false, &plugins);
134 EXPECT_FALSE(Contains(plugins, foo_plugin_, false));
135 const PluginGroup* foo_group = plugin_list_.GetPluginGroup(foo_plugin_);
136 EXPECT_FALSE(foo_group->Enabled());
137 // Enable "bar" plugin.
138 plugin_list_.EnablePlugin(bar_plugin_.path);
139 plugin_list_.GetEnabledPlugins(false, &plugins);
140 EXPECT_TRUE(Contains(plugins, bar_plugin_, false));
141 const PluginGroup* bar_group = plugin_list_.GetPluginGroup(bar_plugin_);
142 EXPECT_TRUE(bar_group->Enabled());
143 }
144
145 TEST_F(PluginListTest, EnableGroup) {
146 // Disable "foo" plugin group.
147 const PluginGroup* foo_group = plugin_list_.GetPluginGroup(foo_plugin_);
148 EXPECT_TRUE(foo_group->Enabled());
149 EXPECT_TRUE(plugin_list_.EnableGroup(false, foo_group->GetGroupName()));
150 EXPECT_FALSE(foo_group->Enabled());
151 std::vector<WebPluginInfo> plugins;
152 plugin_list_.GetEnabledPlugins(false, &plugins);
153 EXPECT_EQ(0u, plugins.size());
154 EXPECT_FALSE(Contains(plugins, foo_plugin_, false));
155 // Enable "bar" plugin group.
156 const PluginGroup* bar_group = plugin_list_.GetPluginGroup(bar_plugin_);
157 EXPECT_FALSE(bar_group->Enabled());
158 plugin_list_.EnableGroup(true, bar_group->GetGroupName());
159 EXPECT_TRUE(bar_group->Enabled());
160 plugin_list_.GetEnabledPlugins(false, &plugins);
161 EXPECT_TRUE(Contains(plugins, bar_plugin_, false));
162 }
163
164 TEST_F(PluginListTest, EmptyGroup) {
165 std::vector<PluginGroup> groups;
166 plugin_list_.GetPluginGroups(false, &groups);
167 for (size_t i = 0; i < groups.size(); ++i) {
168 EXPECT_GE(groups[i].GetPlugins().size(), 1u);
169 }
170 }
171
172 TEST_F(PluginListTest, DisableOutdated) {
173 VersionRangeDefinition version_range[] = {
174 { "0", "4", "3.0.44" },
175 { "4", "5", "" }
176 };
177 PluginGroupDefinition plugin_def = {
178 "myplugin-34", "MyPlugin 3/4", "MyPlugin", version_range,
179 arraysize(version_range), "http://latest" };
180 WebPluginInfo plugin_3043(ASCIIToUTF16("MyPlugin"),
181 FilePath(FILE_PATH_LITERAL("/myplugin.3.0.43")),
182 ASCIIToUTF16("3.0.43"),
183 ASCIIToUTF16("MyPlugin version 3.0.43"));
184 WebPluginInfo plugin_3045(ASCIIToUTF16("MyPlugin"),
185 FilePath(FILE_PATH_LITERAL("/myplugin.3.0.45")),
186 ASCIIToUTF16("3.0.45"),
187 ASCIIToUTF16("MyPlugin version 3.0.45"));
188 plugin_list_.plugins_to_load_.clear();
189 plugin_list_.plugins_to_load_.push_back(plugin_3043);
190 plugin_list_.plugins_to_load_.push_back(plugin_3045);
191 plugin_list_.CreatePluginGroup(plugin_def);
192 const PluginGroup* group_3043 = plugin_list_.GetPluginGroup(plugin_3043);
193 const PluginGroup* group_3045 = plugin_list_.GetPluginGroup(plugin_3045);
194 EXPECT_EQ(group_3043, group_3045);
195 EXPECT_EQ(plugin_3043.desc, group_3043->description());
196 EXPECT_TRUE(group_3043->IsVulnerable());
197 const_cast<PluginGroup*>(group_3043)->DisableOutdatedPlugins();
198 EXPECT_EQ(plugin_3045.desc, group_3043->description());
199 EXPECT_FALSE(group_3043->IsVulnerable());
200 }
201
202 } // namespace NPAPI
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698