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

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

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

Powered by Google App Engine
This is Rietveld 408576698