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 } |
90 }; | 96 }; |
91 | 97 |
92 TEST_F(PluginGroupTest, PluginGroupMatch) { | 98 TEST_F(PluginGroupTest, PluginGroupMatch) { |
93 scoped_ptr<PluginGroup> group(PluginGroupTest::CreatePluginGroup( | 99 scoped_ptr<PluginGroup> group(PluginGroupTest::CreatePluginGroup( |
94 kPluginDef3)); | 100 kPluginDef3)); |
95 EXPECT_TRUE(group->Match(kPlugin3045)); | 101 EXPECT_TRUE(group->Match(kPlugin3045)); |
96 EXPECT_TRUE(group->Match(kPlugin3045r)); | 102 EXPECT_TRUE(group->Match(kPlugin3045r)); |
97 EXPECT_FALSE(group->Match(kPluginNoVersion)); | 103 EXPECT_FALSE(group->Match(kPluginNoVersion)); |
98 group->AddPlugin(kPlugin3045); | 104 group->AddPlugin(kPlugin3045); |
99 EXPECT_FALSE(group->IsVulnerable(kPlugin3045)); | 105 EXPECT_FALSE(group->IsVulnerable()); |
100 | 106 |
101 group.reset(PluginGroupTest::CreatePluginGroup(kPluginDef)); | 107 group.reset(PluginGroupTest::CreatePluginGroup(kPluginDef)); |
102 EXPECT_FALSE(group->Match(kPluginNoVersion)); | 108 EXPECT_FALSE(group->Match(kPluginNoVersion)); |
103 } | 109 } |
104 | 110 |
105 TEST_F(PluginGroupTest, PluginGroupMatchCorrectVersion) { | 111 TEST_F(PluginGroupTest, PluginGroupMatchCorrectVersion) { |
106 scoped_ptr<PluginGroup> group(PluginGroupTest::CreatePluginGroup( | 112 scoped_ptr<PluginGroup> group(PluginGroupTest::CreatePluginGroup( |
107 kPluginDef3)); | 113 kPluginDef3)); |
108 EXPECT_TRUE(group->Match(kPlugin2043)); | 114 EXPECT_TRUE(group->Match(kPlugin2043)); |
109 EXPECT_TRUE(group->Match(kPlugin3043)); | 115 EXPECT_TRUE(group->Match(kPlugin3043)); |
110 EXPECT_FALSE(group->Match(kPlugin4043)); | 116 EXPECT_FALSE(group->Match(kPlugin4043)); |
111 | 117 |
112 group.reset(PluginGroupTest::CreatePluginGroup(kPluginDef4)); | 118 group.reset(PluginGroupTest::CreatePluginGroup(kPluginDef4)); |
113 EXPECT_FALSE(group->Match(kPlugin2043)); | 119 EXPECT_FALSE(group->Match(kPlugin2043)); |
114 EXPECT_FALSE(group->Match(kPlugin3043)); | 120 EXPECT_FALSE(group->Match(kPlugin3043)); |
115 EXPECT_TRUE(group->Match(kPlugin4043)); | 121 EXPECT_TRUE(group->Match(kPlugin4043)); |
116 | 122 |
117 group.reset(PluginGroupTest::CreatePluginGroup(kPluginDef34)); | 123 group.reset(PluginGroupTest::CreatePluginGroup(kPluginDef34)); |
118 EXPECT_TRUE(group->Match(kPlugin2043)); | 124 EXPECT_TRUE(group->Match(kPlugin2043)); |
119 EXPECT_TRUE(group->Match(kPlugin3043)); | 125 EXPECT_TRUE(group->Match(kPlugin3043)); |
120 EXPECT_TRUE(group->Match(kPlugin4043)); | 126 EXPECT_TRUE(group->Match(kPlugin4043)); |
121 } | 127 } |
122 | 128 |
| 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 |
123 TEST_F(PluginGroupTest, PluginGroupDefinition) { | 168 TEST_F(PluginGroupTest, PluginGroupDefinition) { |
124 for (size_t i = 0; i < arraysize(kPluginDefinitions); ++i) { | 169 for (size_t i = 0; i < arraysize(kPluginDefinitions); ++i) { |
125 scoped_ptr<PluginGroup> def_group( | 170 scoped_ptr<PluginGroup> def_group( |
126 PluginGroupTest::CreatePluginGroup(kPluginDefinitions[i])); | 171 PluginGroupTest::CreatePluginGroup(kPluginDefinitions[i])); |
127 ASSERT_TRUE(def_group.get() != NULL); | 172 ASSERT_TRUE(def_group.get() != NULL); |
128 } | 173 } |
129 } | 174 } |
130 | 175 |
131 TEST_F(PluginGroupTest, VersionExtraction) { | 176 TEST_F(PluginGroupTest, VersionExtraction) { |
132 // Some real-world plugin versions (spaces, commata, parentheses, 'r', oh my) | 177 // Some real-world plugin versions (spaces, commata, parentheses, 'r', oh my) |
133 const char* versions[][2] = { | 178 const char* versions[][2] = { |
134 { "7.6.6 (1671)", "7.6.6.1671" }, // Quicktime | 179 { "7.6.6 (1671)", "7.6.6.1671" }, // Quicktime |
135 { "2, 0, 0, 254", "2.0.0.254" }, // DivX | 180 { "2, 0, 0, 254", "2.0.0.254" }, // DivX |
136 { "3, 0, 0, 0", "3.0.0.0" }, // Picasa | 181 { "3, 0, 0, 0", "3.0.0.0" }, // Picasa |
137 { "1, 0, 0, 1", "1.0.0.1" }, // Earth | 182 { "1, 0, 0, 1", "1.0.0.1" }, // Earth |
138 { "10,0,45,2", "10.0.45.2" }, // Flash | 183 { "10,0,45,2", "10.0.45.2" }, // Flash |
139 { "10.1 r102", "10.1.102"}, // Flash | 184 { "10.1 r102", "10.1.102"}, // Flash |
140 { "10.3 d180", "10.3.180" }, // Flash (Debug) | 185 { "10.3 d180", "10.3.180" }, // Flash (Debug) |
141 { "11.5.7r609", "11.5.7.609"}, // Shockwave | 186 { "11.5.7r609", "11.5.7.609"}, // Shockwave |
142 { "1.6.0_22", "1.6.0.22"}, // Java | 187 { "1.6.0_22", "1.6.0.22"}, // Java |
143 }; | 188 }; |
144 | 189 |
145 for (size_t i = 0; i < arraysize(versions); i++) { | 190 for (size_t i = 0; i < arraysize(versions); i++) { |
146 scoped_ptr<Version> version(PluginGroup::CreateVersionFromString( | 191 const WebPluginInfo plugin = WebPluginInfo( |
147 ASCIIToUTF16(versions[i][0]))); | 192 ASCIIToUTF16("Blah Plugin"), FilePath(FILE_PATH_LITERAL("blahfile")), |
148 EXPECT_STREQ(versions[i][1], version->GetString().c_str()); | 193 ASCIIToUTF16(versions[i][0]), string16()); |
| 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); |
149 } | 201 } |
150 } | 202 } |
151 | 203 |
| 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 |
152 TEST_F(PluginGroupTest, IsVulnerable) { | 302 TEST_F(PluginGroupTest, IsVulnerable) { |
153 // Adobe Reader 10 | 303 // Adobe Reader 10 |
154 VersionRangeDefinition adobe_reader_version_range[] = { | 304 VersionRangeDefinition adobe_reader_version_range[] = { |
155 { "10", "11", "", false }, | 305 { "10", "11", "", false }, |
156 { "9", "10", "9.4.1", false }, | 306 { "9", "10", "9.4.1", false }, |
157 { "0", "9", "8.2.5", false } | 307 { "0", "9", "8.2.5", false } |
158 }; | 308 }; |
159 PluginGroupDefinition adobe_reader_plugin_def = { | 309 PluginGroupDefinition adobe_reader_plugin_def = { |
160 "adobe-reader", "Adobe Reader", "Adobe Acrobat", | 310 "adobe-reader", "Adobe Reader", "Adobe Acrobat", |
161 adobe_reader_version_range, arraysize(adobe_reader_version_range), | 311 adobe_reader_version_range, arraysize(adobe_reader_version_range), |
162 "http://get.adobe.com/reader/" }; | 312 "http://get.adobe.com/reader/" }; |
163 WebPluginInfo adobe_reader_plugin(ASCIIToUTF16("Adobe Reader"), | 313 WebPluginInfo adobe_reader_plugin(ASCIIToUTF16("Adobe Reader"), |
164 FilePath(FILE_PATH_LITERAL("/reader.so")), | 314 FilePath(FILE_PATH_LITERAL("/reader.so")), |
165 ASCIIToUTF16("10.0.0.396"), | 315 ASCIIToUTF16("10.0.0.396"), |
166 ASCIIToUTF16("adobe reader 10")); | 316 ASCIIToUTF16("adobe reader 10")); |
167 scoped_ptr<PluginGroup> group(PluginGroupTest::CreatePluginGroup( | 317 scoped_ptr<PluginGroup> group(PluginGroupTest::CreatePluginGroup( |
168 adobe_reader_plugin_def)); | 318 adobe_reader_plugin_def)); |
169 group->AddPlugin(adobe_reader_plugin); | 319 group->AddPlugin(adobe_reader_plugin); |
170 PluginGroup group_copy(*group); // Exercise the copy constructor. | 320 PluginGroup group_copy(*group); // Exercise the copy constructor. |
171 EXPECT_FALSE(group_copy.IsVulnerable(adobe_reader_plugin)); | 321 EXPECT_FALSE(group_copy.IsVulnerable()); |
172 EXPECT_FALSE(group_copy.RequiresAuthorization(adobe_reader_plugin)); | 322 EXPECT_FALSE(group_copy.RequiresAuthorization()); |
173 | 323 |
174 // Silverlight 4 | 324 // Silverlight 4 |
175 VersionRangeDefinition silverlight_version_range[] = { | 325 VersionRangeDefinition silverlight_version_range[] = { |
176 { "0", "4", "3.0.50106.0", false }, | 326 { "0", "4", "3.0.50106.0", false }, |
177 { "4", "5", "", true } | 327 { "4", "5", "", true } |
178 }; | 328 }; |
179 PluginGroupDefinition silverlight_plugin_def = { | 329 PluginGroupDefinition silverlight_plugin_def = { |
180 "silverlight", "Silverlight", "Silverlight", silverlight_version_range, | 330 "silverlight", "Silverlight", "Silverlight", silverlight_version_range, |
181 arraysize(silverlight_version_range), | 331 arraysize(silverlight_version_range), |
182 "http://www.microsoft.com/getsilverlight/" }; | 332 "http://www.microsoft.com/getsilverlight/" }; |
183 WebPluginInfo silverlight_plugin(ASCIIToUTF16("Silverlight"), | 333 WebPluginInfo silverlight_plugin(ASCIIToUTF16("Silverlight"), |
184 FilePath(FILE_PATH_LITERAL("/silver.so")), | 334 FilePath(FILE_PATH_LITERAL("/silver.so")), |
185 ASCIIToUTF16("4.0.50917.0"), | 335 ASCIIToUTF16("4.0.50917.0"), |
186 ASCIIToUTF16("silverlight 4")); | 336 ASCIIToUTF16("silverlight 4")); |
187 group.reset(PluginGroupTest::CreatePluginGroup(silverlight_plugin_def)); | 337 group.reset(PluginGroupTest::CreatePluginGroup(silverlight_plugin_def)); |
188 group->AddPlugin(silverlight_plugin); | 338 group->AddPlugin(silverlight_plugin); |
189 EXPECT_FALSE(PluginGroup(*group).IsVulnerable(silverlight_plugin)); | 339 EXPECT_FALSE(PluginGroup(*group).IsVulnerable()); |
190 EXPECT_TRUE(PluginGroup(*group).RequiresAuthorization(silverlight_plugin)); | 340 EXPECT_TRUE(PluginGroup(*group).RequiresAuthorization()); |
| 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()); |
191 } | 395 } |
192 | 396 |
193 } // namespace npapi | 397 } // namespace npapi |
194 } // namespace webkit | 398 } // namespace webkit |
OLD | NEW |