OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "webkit/plugins/npapi/plugin_group.h" | 5 #include "webkit/plugins/npapi/plugin_group.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/memory/scoped_ptr.h" | 10 #include "base/memory/scoped_ptr.h" |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
80 | 80 |
81 class PluginGroupTest : public testing::Test { | 81 class PluginGroupTest : public testing::Test { |
82 public: | 82 public: |
83 static PluginGroup* CreatePluginGroup( | 83 static PluginGroup* CreatePluginGroup( |
84 const PluginGroupDefinition& definition) { | 84 const PluginGroupDefinition& definition) { |
85 return PluginGroup::FromPluginGroupDefinition(definition); | 85 return PluginGroup::FromPluginGroupDefinition(definition); |
86 } | 86 } |
87 static PluginGroup* CreatePluginGroup(const WebPluginInfo& wpi) { | 87 static PluginGroup* CreatePluginGroup(const WebPluginInfo& wpi) { |
88 return PluginGroup::FromWebPluginInfo(wpi); | 88 return PluginGroup::FromWebPluginInfo(wpi); |
89 } | 89 } |
90 protected: | |
91 virtual void TearDown() { | |
92 PluginGroup::SetPolicyEnforcedPluginPatterns(std::set<string16>(), | |
93 std::set<string16>(), | |
94 std::set<string16>()); | |
95 } | |
96 }; | 90 }; |
97 | 91 |
98 TEST_F(PluginGroupTest, PluginGroupMatch) { | 92 TEST_F(PluginGroupTest, PluginGroupMatch) { |
99 scoped_ptr<PluginGroup> group(PluginGroupTest::CreatePluginGroup( | 93 scoped_ptr<PluginGroup> group(PluginGroupTest::CreatePluginGroup( |
100 kPluginDef3)); | 94 kPluginDef3)); |
101 EXPECT_TRUE(group->Match(kPlugin3045)); | 95 EXPECT_TRUE(group->Match(kPlugin3045)); |
102 EXPECT_TRUE(group->Match(kPlugin3045r)); | 96 EXPECT_TRUE(group->Match(kPlugin3045r)); |
103 EXPECT_FALSE(group->Match(kPluginNoVersion)); | 97 EXPECT_FALSE(group->Match(kPluginNoVersion)); |
104 group->AddPlugin(kPlugin3045); | 98 group->AddPlugin(kPlugin3045); |
105 EXPECT_FALSE(group->IsVulnerable()); | 99 EXPECT_FALSE(group->IsVulnerable(kPlugin3045)); |
106 | 100 |
107 group.reset(PluginGroupTest::CreatePluginGroup(kPluginDef)); | 101 group.reset(PluginGroupTest::CreatePluginGroup(kPluginDef)); |
108 EXPECT_FALSE(group->Match(kPluginNoVersion)); | 102 EXPECT_FALSE(group->Match(kPluginNoVersion)); |
109 } | 103 } |
110 | 104 |
111 TEST_F(PluginGroupTest, PluginGroupMatchCorrectVersion) { | 105 TEST_F(PluginGroupTest, PluginGroupMatchCorrectVersion) { |
112 scoped_ptr<PluginGroup> group(PluginGroupTest::CreatePluginGroup( | 106 scoped_ptr<PluginGroup> group(PluginGroupTest::CreatePluginGroup( |
113 kPluginDef3)); | 107 kPluginDef3)); |
114 EXPECT_TRUE(group->Match(kPlugin2043)); | 108 EXPECT_TRUE(group->Match(kPlugin2043)); |
115 EXPECT_TRUE(group->Match(kPlugin3043)); | 109 EXPECT_TRUE(group->Match(kPlugin3043)); |
116 EXPECT_FALSE(group->Match(kPlugin4043)); | 110 EXPECT_FALSE(group->Match(kPlugin4043)); |
117 | 111 |
118 group.reset(PluginGroupTest::CreatePluginGroup(kPluginDef4)); | 112 group.reset(PluginGroupTest::CreatePluginGroup(kPluginDef4)); |
119 EXPECT_FALSE(group->Match(kPlugin2043)); | 113 EXPECT_FALSE(group->Match(kPlugin2043)); |
120 EXPECT_FALSE(group->Match(kPlugin3043)); | 114 EXPECT_FALSE(group->Match(kPlugin3043)); |
121 EXPECT_TRUE(group->Match(kPlugin4043)); | 115 EXPECT_TRUE(group->Match(kPlugin4043)); |
122 | 116 |
123 group.reset(PluginGroupTest::CreatePluginGroup(kPluginDef34)); | 117 group.reset(PluginGroupTest::CreatePluginGroup(kPluginDef34)); |
124 EXPECT_TRUE(group->Match(kPlugin2043)); | 118 EXPECT_TRUE(group->Match(kPlugin2043)); |
125 EXPECT_TRUE(group->Match(kPlugin3043)); | 119 EXPECT_TRUE(group->Match(kPlugin3043)); |
126 EXPECT_TRUE(group->Match(kPlugin4043)); | 120 EXPECT_TRUE(group->Match(kPlugin4043)); |
127 } | 121 } |
128 | 122 |
129 TEST_F(PluginGroupTest, PluginGroupDescription) { | |
130 string16 desc3043(ASCIIToUTF16("MyPlugin version 3.0.43")); | |
131 string16 desc3045(ASCIIToUTF16("MyPlugin version 3.0.45")); | |
132 | |
133 PluginGroupDefinition plugindefs[] = | |
134 { kPluginDef, kPluginDef3, kPluginDef34 }; | |
135 for (size_t i = 0; i < arraysize(plugindefs); ++i) { | |
136 WebPluginInfo plugin3043(kPlugin3043); | |
137 WebPluginInfo plugin3045(kPlugin3045); | |
138 { | |
139 scoped_ptr<PluginGroup> group(PluginGroupTest::CreatePluginGroup( | |
140 plugindefs[i])); | |
141 EXPECT_TRUE(group->Match(plugin3043)); | |
142 group->AddPlugin(plugin3043); | |
143 EXPECT_EQ(desc3043, group->description()); | |
144 EXPECT_TRUE(group->IsVulnerable()); | |
145 EXPECT_TRUE(group->Match(plugin3045)); | |
146 group->AddPlugin(plugin3045); | |
147 EXPECT_EQ(desc3043, group->description()); | |
148 EXPECT_TRUE(group->IsVulnerable()); | |
149 } | |
150 { | |
151 // Disable the second plugin. | |
152 plugin3045.enabled = | |
153 webkit::WebPluginInfo::USER_DISABLED_POLICY_UNMANAGED; | |
154 scoped_ptr<PluginGroup> group(PluginGroupTest::CreatePluginGroup( | |
155 plugindefs[i])); | |
156 EXPECT_TRUE(group->Match(plugin3043)); | |
157 group->AddPlugin(plugin3043); | |
158 EXPECT_EQ(desc3043, group->description()); | |
159 EXPECT_TRUE(group->IsVulnerable()); | |
160 EXPECT_TRUE(group->Match(plugin3045)); | |
161 group->AddPlugin(plugin3045); | |
162 EXPECT_EQ(desc3043, group->description()); | |
163 EXPECT_TRUE(group->IsVulnerable()); | |
164 } | |
165 } | |
166 } | |
167 | |
168 TEST_F(PluginGroupTest, PluginGroupDefinition) { | 123 TEST_F(PluginGroupTest, PluginGroupDefinition) { |
169 for (size_t i = 0; i < arraysize(kPluginDefinitions); ++i) { | 124 for (size_t i = 0; i < arraysize(kPluginDefinitions); ++i) { |
170 scoped_ptr<PluginGroup> def_group( | 125 scoped_ptr<PluginGroup> def_group( |
171 PluginGroupTest::CreatePluginGroup(kPluginDefinitions[i])); | 126 PluginGroupTest::CreatePluginGroup(kPluginDefinitions[i])); |
172 ASSERT_TRUE(def_group.get() != NULL); | 127 ASSERT_TRUE(def_group.get() != NULL); |
173 } | 128 } |
174 } | 129 } |
175 | 130 |
176 TEST_F(PluginGroupTest, VersionExtraction) { | 131 TEST_F(PluginGroupTest, VersionExtraction) { |
177 // Some real-world plugin versions (spaces, commata, parentheses, 'r', oh my) | 132 // Some real-world plugin versions (spaces, commata, parentheses, 'r', oh my) |
178 const char* versions[][2] = { | 133 const char* versions[][2] = { |
179 { "7.6.6 (1671)", "7.6.6.1671" }, // Quicktime | 134 { "7.6.6 (1671)", "7.6.6.1671" }, // Quicktime |
180 { "2, 0, 0, 254", "2.0.0.254" }, // DivX | 135 { "2, 0, 0, 254", "2.0.0.254" }, // DivX |
181 { "3, 0, 0, 0", "3.0.0.0" }, // Picasa | 136 { "3, 0, 0, 0", "3.0.0.0" }, // Picasa |
182 { "1, 0, 0, 1", "1.0.0.1" }, // Earth | 137 { "1, 0, 0, 1", "1.0.0.1" }, // Earth |
183 { "10,0,45,2", "10.0.45.2" }, // Flash | 138 { "10,0,45,2", "10.0.45.2" }, // Flash |
184 { "10.1 r102", "10.1.102"}, // Flash | 139 { "10.1 r102", "10.1.102"}, // Flash |
185 { "10.3 d180", "10.3.180" }, // Flash (Debug) | 140 { "10.3 d180", "10.3.180" }, // Flash (Debug) |
186 { "11.5.7r609", "11.5.7.609"}, // Shockwave | 141 { "11.5.7r609", "11.5.7.609"}, // Shockwave |
187 { "1.6.0_22", "1.6.0.22"}, // Java | 142 { "1.6.0_22", "1.6.0.22"}, // Java |
188 }; | 143 }; |
189 | 144 |
190 for (size_t i = 0; i < arraysize(versions); i++) { | 145 for (size_t i = 0; i < arraysize(versions); i++) { |
191 const WebPluginInfo plugin = WebPluginInfo( | 146 scoped_ptr<Version> version(PluginGroup::CreateVersionFromString( |
192 ASCIIToUTF16("Blah Plugin"), FilePath(FILE_PATH_LITERAL("blahfile")), | 147 ASCIIToUTF16(versions[i][0]))); |
193 ASCIIToUTF16(versions[i][0]), string16()); | 148 EXPECT_STREQ(versions[i][1], version->GetString().c_str()); |
194 scoped_ptr<PluginGroup> group(PluginGroupTest::CreatePluginGroup(plugin)); | |
195 EXPECT_TRUE(group->Match(plugin)); | |
196 group->AddPlugin(plugin); | |
197 scoped_ptr<DictionaryValue> data(group->GetDataForUI()); | |
198 std::string version; | |
199 data->GetString("version", &version); | |
200 EXPECT_EQ(versions[i][1], version); | |
201 } | 149 } |
202 } | 150 } |
203 | 151 |
204 TEST_F(PluginGroupTest, DisabledByPolicy) { | |
205 std::set<string16> disabled_plugins; | |
206 disabled_plugins.insert(ASCIIToUTF16("Disable this!")); | |
207 disabled_plugins.insert(ASCIIToUTF16("*Google*")); | |
208 PluginGroup::SetPolicyEnforcedPluginPatterns(disabled_plugins, | |
209 std::set<string16>(), | |
210 std::set<string16>()); | |
211 | |
212 EXPECT_FALSE(PluginGroup::IsPluginNameDisabledByPolicy(ASCIIToUTF16("42"))); | |
213 EXPECT_TRUE(PluginGroup::IsPluginNameDisabledByPolicy( | |
214 ASCIIToUTF16("Disable this!"))); | |
215 EXPECT_TRUE(PluginGroup::IsPluginNameDisabledByPolicy( | |
216 ASCIIToUTF16("Google Earth"))); | |
217 } | |
218 | |
219 TEST_F(PluginGroupTest, EnabledByPolicy) { | |
220 std::set<string16> enabled_plugins; | |
221 enabled_plugins.insert(ASCIIToUTF16("Enable that!")); | |
222 enabled_plugins.insert(ASCIIToUTF16("PDF*")); | |
223 PluginGroup::SetPolicyEnforcedPluginPatterns(std::set<string16>(), | |
224 std::set<string16>(), | |
225 enabled_plugins); | |
226 | |
227 EXPECT_FALSE(PluginGroup::IsPluginNameEnabledByPolicy(ASCIIToUTF16("42"))); | |
228 EXPECT_TRUE(PluginGroup::IsPluginNameEnabledByPolicy( | |
229 ASCIIToUTF16("Enable that!"))); | |
230 EXPECT_TRUE(PluginGroup::IsPluginNameEnabledByPolicy( | |
231 ASCIIToUTF16("PDF Reader"))); | |
232 } | |
233 | |
234 TEST_F(PluginGroupTest, EnabledAndDisabledByPolicy) { | |
235 const string16 k42(ASCIIToUTF16("42")); | |
236 const string16 kEnabled(ASCIIToUTF16("Enabled")); | |
237 const string16 kEnabled2(ASCIIToUTF16("Enabled 2")); | |
238 const string16 kEnabled3(ASCIIToUTF16("Enabled 3")); | |
239 const string16 kException(ASCIIToUTF16("Exception")); | |
240 const string16 kException2(ASCIIToUTF16("Exception 2")); | |
241 const string16 kGoogleMars(ASCIIToUTF16("Google Mars")); | |
242 const string16 kGoogleEarth(ASCIIToUTF16("Google Earth")); | |
243 | |
244 std::set<string16> disabled_plugins; | |
245 std::set<string16> disabled_plugins_exceptions; | |
246 std::set<string16> enabled_plugins; | |
247 | |
248 disabled_plugins.insert(kEnabled); | |
249 disabled_plugins_exceptions.insert(kEnabled); | |
250 enabled_plugins.insert(kEnabled); | |
251 | |
252 disabled_plugins_exceptions.insert(kException); | |
253 | |
254 disabled_plugins.insert(kEnabled2); | |
255 enabled_plugins.insert(kEnabled2); | |
256 | |
257 disabled_plugins.insert(kException2); | |
258 disabled_plugins_exceptions.insert(kException2); | |
259 | |
260 disabled_plugins_exceptions.insert(kEnabled3); | |
261 enabled_plugins.insert(kEnabled3); | |
262 | |
263 PluginGroup::SetPolicyEnforcedPluginPatterns(disabled_plugins, | |
264 disabled_plugins_exceptions, | |
265 enabled_plugins); | |
266 | |
267 EXPECT_FALSE(PluginGroup::IsPluginNameEnabledByPolicy(k42)); | |
268 EXPECT_FALSE(PluginGroup::IsPluginNameDisabledByPolicy(k42)); | |
269 | |
270 EXPECT_TRUE(PluginGroup::IsPluginNameEnabledByPolicy(kEnabled)); | |
271 EXPECT_FALSE(PluginGroup::IsPluginNameDisabledByPolicy(kEnabled)); | |
272 EXPECT_TRUE(PluginGroup::IsPluginNameEnabledByPolicy(kEnabled2)); | |
273 EXPECT_FALSE(PluginGroup::IsPluginNameDisabledByPolicy(kEnabled2)); | |
274 EXPECT_TRUE(PluginGroup::IsPluginNameEnabledByPolicy(kEnabled3)); | |
275 EXPECT_FALSE(PluginGroup::IsPluginNameDisabledByPolicy(kEnabled3)); | |
276 | |
277 EXPECT_FALSE(PluginGroup::IsPluginNameEnabledByPolicy(kException)); | |
278 EXPECT_FALSE(PluginGroup::IsPluginNameDisabledByPolicy(kException)); | |
279 EXPECT_FALSE(PluginGroup::IsPluginNameEnabledByPolicy(kException2)); | |
280 EXPECT_FALSE(PluginGroup::IsPluginNameDisabledByPolicy(kException2)); | |
281 | |
282 disabled_plugins.clear(); | |
283 disabled_plugins_exceptions.clear(); | |
284 enabled_plugins.clear(); | |
285 | |
286 disabled_plugins.insert(ASCIIToUTF16("*")); | |
287 disabled_plugins_exceptions.insert(ASCIIToUTF16("*Google*")); | |
288 enabled_plugins.insert(kGoogleEarth); | |
289 | |
290 PluginGroup::SetPolicyEnforcedPluginPatterns(disabled_plugins, | |
291 disabled_plugins_exceptions, | |
292 enabled_plugins); | |
293 | |
294 EXPECT_TRUE(PluginGroup::IsPluginNameEnabledByPolicy(kGoogleEarth)); | |
295 EXPECT_FALSE(PluginGroup::IsPluginNameDisabledByPolicy(kGoogleEarth)); | |
296 EXPECT_FALSE(PluginGroup::IsPluginNameEnabledByPolicy(kGoogleMars)); | |
297 EXPECT_FALSE(PluginGroup::IsPluginNameDisabledByPolicy(kGoogleMars)); | |
298 EXPECT_FALSE(PluginGroup::IsPluginNameEnabledByPolicy(k42)); | |
299 EXPECT_TRUE(PluginGroup::IsPluginNameDisabledByPolicy(k42)); | |
300 } | |
301 | |
302 TEST_F(PluginGroupTest, IsVulnerable) { | 152 TEST_F(PluginGroupTest, IsVulnerable) { |
303 // Adobe Reader 10 | 153 // Adobe Reader 10 |
304 VersionRangeDefinition adobe_reader_version_range[] = { | 154 VersionRangeDefinition adobe_reader_version_range[] = { |
305 { "10", "11", "", false }, | 155 { "10", "11", "", false }, |
306 { "9", "10", "9.4.1", false }, | 156 { "9", "10", "9.4.1", false }, |
307 { "0", "9", "8.2.5", false } | 157 { "0", "9", "8.2.5", false } |
308 }; | 158 }; |
309 PluginGroupDefinition adobe_reader_plugin_def = { | 159 PluginGroupDefinition adobe_reader_plugin_def = { |
310 "adobe-reader", "Adobe Reader", "Adobe Acrobat", | 160 "adobe-reader", "Adobe Reader", "Adobe Acrobat", |
311 adobe_reader_version_range, arraysize(adobe_reader_version_range), | 161 adobe_reader_version_range, arraysize(adobe_reader_version_range), |
312 "http://get.adobe.com/reader/" }; | 162 "http://get.adobe.com/reader/" }; |
313 WebPluginInfo adobe_reader_plugin(ASCIIToUTF16("Adobe Reader"), | 163 WebPluginInfo adobe_reader_plugin(ASCIIToUTF16("Adobe Reader"), |
314 FilePath(FILE_PATH_LITERAL("/reader.so")), | 164 FilePath(FILE_PATH_LITERAL("/reader.so")), |
315 ASCIIToUTF16("10.0.0.396"), | 165 ASCIIToUTF16("10.0.0.396"), |
316 ASCIIToUTF16("adobe reader 10")); | 166 ASCIIToUTF16("adobe reader 10")); |
317 scoped_ptr<PluginGroup> group(PluginGroupTest::CreatePluginGroup( | 167 scoped_ptr<PluginGroup> group(PluginGroupTest::CreatePluginGroup( |
318 adobe_reader_plugin_def)); | 168 adobe_reader_plugin_def)); |
319 group->AddPlugin(adobe_reader_plugin); | 169 group->AddPlugin(adobe_reader_plugin); |
320 PluginGroup group_copy(*group); // Exercise the copy constructor. | 170 PluginGroup group_copy(*group); // Exercise the copy constructor. |
321 EXPECT_FALSE(group_copy.IsVulnerable()); | 171 EXPECT_FALSE(group_copy.IsVulnerable(adobe_reader_plugin)); |
322 EXPECT_FALSE(group_copy.RequiresAuthorization()); | 172 EXPECT_FALSE(group_copy.RequiresAuthorization(adobe_reader_plugin)); |
323 | 173 |
324 // Silverlight 4 | 174 // Silverlight 4 |
325 VersionRangeDefinition silverlight_version_range[] = { | 175 VersionRangeDefinition silverlight_version_range[] = { |
326 { "0", "4", "3.0.50106.0", false }, | 176 { "0", "4", "3.0.50106.0", false }, |
327 { "4", "5", "", true } | 177 { "4", "5", "", true } |
328 }; | 178 }; |
329 PluginGroupDefinition silverlight_plugin_def = { | 179 PluginGroupDefinition silverlight_plugin_def = { |
330 "silverlight", "Silverlight", "Silverlight", silverlight_version_range, | 180 "silverlight", "Silverlight", "Silverlight", silverlight_version_range, |
331 arraysize(silverlight_version_range), | 181 arraysize(silverlight_version_range), |
332 "http://www.microsoft.com/getsilverlight/" }; | 182 "http://www.microsoft.com/getsilverlight/" }; |
333 WebPluginInfo silverlight_plugin(ASCIIToUTF16("Silverlight"), | 183 WebPluginInfo silverlight_plugin(ASCIIToUTF16("Silverlight"), |
334 FilePath(FILE_PATH_LITERAL("/silver.so")), | 184 FilePath(FILE_PATH_LITERAL("/silver.so")), |
335 ASCIIToUTF16("4.0.50917.0"), | 185 ASCIIToUTF16("4.0.50917.0"), |
336 ASCIIToUTF16("silverlight 4")); | 186 ASCIIToUTF16("silverlight 4")); |
337 group.reset(PluginGroupTest::CreatePluginGroup(silverlight_plugin_def)); | 187 group.reset(PluginGroupTest::CreatePluginGroup(silverlight_plugin_def)); |
338 group->AddPlugin(silverlight_plugin); | 188 group->AddPlugin(silverlight_plugin); |
339 EXPECT_FALSE(PluginGroup(*group).IsVulnerable()); | 189 EXPECT_FALSE(PluginGroup(*group).IsVulnerable(silverlight_plugin)); |
340 EXPECT_TRUE(PluginGroup(*group).RequiresAuthorization()); | 190 EXPECT_TRUE(PluginGroup(*group).RequiresAuthorization(silverlight_plugin)); |
341 } | |
342 | |
343 TEST_F(PluginGroupTest, WhitelistedIsNotVulnerable) { | |
344 VersionRangeDefinition version_range[] = { | |
345 { "0", "6", "5.0", true } | |
346 }; | |
347 PluginGroupDefinition plugin_def = { | |
348 "nativehtml5", "NativeHTML5", "NativeHTML5", version_range, | |
349 arraysize(version_range), | |
350 "http://bugzilla.mozilla.org/show_bug.cgi?id=649408" }; | |
351 WebPluginInfo plugin(ASCIIToUTF16("NativeHTML5"), | |
352 FilePath(FILE_PATH_LITERAL("/native.so")), | |
353 ASCIIToUTF16("4.0"), | |
354 ASCIIToUTF16("NativeHTML5")); | |
355 scoped_ptr<PluginGroup> group(PluginGroupTest::CreatePluginGroup(plugin_def)); | |
356 group->AddPlugin(plugin); | |
357 | |
358 EXPECT_TRUE(group->IsVulnerable()); | |
359 EXPECT_TRUE(group->RequiresAuthorization()); | |
360 | |
361 std::set<string16> enabled_plugins; | |
362 enabled_plugins.insert(ASCIIToUTF16("NativeHTML5")); | |
363 PluginGroup::SetPolicyEnforcedPluginPatterns(std::set<string16>(), | |
364 std::set<string16>(), | |
365 enabled_plugins); | |
366 group->EnforceGroupPolicy(); | |
367 | |
368 EXPECT_FALSE(group->IsVulnerable()); | |
369 EXPECT_FALSE(group->RequiresAuthorization()); | |
370 } | |
371 | |
372 TEST_F(PluginGroupTest, MultipleVersions) { | |
373 scoped_ptr<PluginGroup> group( | |
374 PluginGroupTest::CreatePluginGroup(kPluginDef3)); | |
375 group->AddPlugin(kPlugin3044); | |
376 group->AddPlugin(kPlugin3043); | |
377 EXPECT_EQ(kPlugin3044.desc, group->description()); | |
378 EXPECT_FALSE(group->IsVulnerable()); | |
379 | |
380 group->DisablePlugin(kPlugin3044.path); | |
381 EXPECT_EQ(kPlugin3043.desc, group->description()); | |
382 EXPECT_TRUE(group->IsVulnerable()); | |
383 | |
384 EXPECT_TRUE(group->EnableGroup(false)); | |
385 EXPECT_EQ(kPlugin3044.desc, group->description()); | |
386 EXPECT_FALSE(group->IsVulnerable()); | |
387 | |
388 EXPECT_TRUE(group->RemovePlugin(kPlugin3044.path)); | |
389 EXPECT_EQ(kPlugin3043.desc, group->description()); | |
390 EXPECT_TRUE(group->IsVulnerable()); | |
391 | |
392 EXPECT_TRUE(group->RemovePlugin(kPlugin3043.path)); | |
393 EXPECT_TRUE(group->IsEmpty()); | |
394 EXPECT_EQ(string16(), group->description()); | |
395 } | 191 } |
396 | 192 |
397 } // namespace npapi | 193 } // namespace npapi |
398 } // namespace webkit | 194 } // namespace webkit |
OLD | NEW |