| OLD | NEW |
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 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 | 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/scoped_ptr.h" | 10 #include "base/scoped_ptr.h" |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 85 PluginGroup::SetPolicyDisabledPluginPatterns(std::set<string16>()); | 85 PluginGroup::SetPolicyDisabledPluginPatterns(std::set<string16>()); |
| 86 } | 86 } |
| 87 }; | 87 }; |
| 88 | 88 |
| 89 TEST(PluginGroupTest, PluginGroupMatch) { | 89 TEST(PluginGroupTest, PluginGroupMatch) { |
| 90 scoped_ptr<PluginGroup> group(PluginGroupTest::CreatePluginGroup( | 90 scoped_ptr<PluginGroup> group(PluginGroupTest::CreatePluginGroup( |
| 91 kPluginDef3)); | 91 kPluginDef3)); |
| 92 EXPECT_TRUE(group->Match(kPlugin3045)); | 92 EXPECT_TRUE(group->Match(kPlugin3045)); |
| 93 EXPECT_TRUE(group->Match(kPlugin3045r)); | 93 EXPECT_TRUE(group->Match(kPlugin3045r)); |
| 94 EXPECT_FALSE(group->Match(kPluginNoVersion)); | 94 EXPECT_FALSE(group->Match(kPluginNoVersion)); |
| 95 group->AddPlugin(kPlugin3045, 0); | 95 group->AddPlugin(kPlugin3045); |
| 96 EXPECT_FALSE(group->IsVulnerable()); | 96 EXPECT_FALSE(group->IsVulnerable()); |
| 97 | 97 |
| 98 group.reset(PluginGroupTest::CreatePluginGroup(kPluginDef)); | 98 group.reset(PluginGroupTest::CreatePluginGroup(kPluginDef)); |
| 99 EXPECT_FALSE(group->Match(kPluginNoVersion)); | 99 EXPECT_FALSE(group->Match(kPluginNoVersion)); |
| 100 } | 100 } |
| 101 | 101 |
| 102 TEST(PluginGroupTest, PluginGroupMatchCorrectVersion) { | 102 TEST(PluginGroupTest, PluginGroupMatchCorrectVersion) { |
| 103 scoped_ptr<PluginGroup> group(PluginGroupTest::CreatePluginGroup( | 103 scoped_ptr<PluginGroup> group(PluginGroupTest::CreatePluginGroup( |
| 104 kPluginDef3)); | 104 kPluginDef3)); |
| 105 EXPECT_TRUE(group->Match(kPlugin2043)); | 105 EXPECT_TRUE(group->Match(kPlugin2043)); |
| (...skipping 17 matching lines...) Expand all Loading... |
| 123 | 123 |
| 124 PluginGroupDefinition plugindefs[] = | 124 PluginGroupDefinition plugindefs[] = |
| 125 { kPluginDef, kPluginDef3, kPluginDef34 }; | 125 { kPluginDef, kPluginDef3, kPluginDef34 }; |
| 126 for (size_t i = 0; i < arraysize(plugindefs); ++i) { | 126 for (size_t i = 0; i < arraysize(plugindefs); ++i) { |
| 127 WebPluginInfo plugin3043(kPlugin3043); | 127 WebPluginInfo plugin3043(kPlugin3043); |
| 128 WebPluginInfo plugin3045(kPlugin3045); | 128 WebPluginInfo plugin3045(kPlugin3045); |
| 129 { | 129 { |
| 130 scoped_ptr<PluginGroup> group(PluginGroupTest::CreatePluginGroup( | 130 scoped_ptr<PluginGroup> group(PluginGroupTest::CreatePluginGroup( |
| 131 plugindefs[i])); | 131 plugindefs[i])); |
| 132 EXPECT_TRUE(group->Match(plugin3043)); | 132 EXPECT_TRUE(group->Match(plugin3043)); |
| 133 group->AddPlugin(plugin3043, 0); | 133 group->AddPlugin(plugin3043); |
| 134 EXPECT_EQ(desc3043, group->description()); | 134 EXPECT_EQ(desc3043, group->description()); |
| 135 EXPECT_TRUE(group->IsVulnerable()); | 135 EXPECT_TRUE(group->IsVulnerable()); |
| 136 EXPECT_TRUE(group->Match(plugin3045)); | 136 EXPECT_TRUE(group->Match(plugin3045)); |
| 137 group->AddPlugin(plugin3045, 1); | 137 group->AddPlugin(plugin3045); |
| 138 EXPECT_EQ(desc3043, group->description()); | 138 EXPECT_EQ(desc3043, group->description()); |
| 139 EXPECT_TRUE(group->IsVulnerable()); | 139 EXPECT_TRUE(group->IsVulnerable()); |
| 140 } | 140 } |
| 141 | |
| 142 { | 141 { |
| 143 // Disable the first plugin. | 142 // Disable the second plugin. |
| 144 plugin3043.enabled = false; | 143 plugin3045.enabled = |
| 144 webkit::npapi::WebPluginInfo::USER_DISABLED_POLICY_UNMANAGED; |
| 145 scoped_ptr<PluginGroup> group(PluginGroupTest::CreatePluginGroup( | 145 scoped_ptr<PluginGroup> group(PluginGroupTest::CreatePluginGroup( |
| 146 plugindefs[i])); | 146 plugindefs[i])); |
| 147 EXPECT_TRUE(group->Match(plugin3043)); | 147 EXPECT_TRUE(group->Match(plugin3043)); |
| 148 group->AddPlugin(plugin3043, 0); | 148 group->AddPlugin(plugin3043); |
| 149 EXPECT_EQ(desc3043, group->description()); | |
| 150 EXPECT_TRUE(group->IsVulnerable()); | |
| 151 EXPECT_FALSE(group->Enabled()); | |
| 152 EXPECT_TRUE(group->Match(plugin3045)); | |
| 153 group->AddPlugin(plugin3045, 1); | |
| 154 EXPECT_EQ(desc3045, group->description()); | |
| 155 EXPECT_FALSE(group->IsVulnerable()); | |
| 156 } | |
| 157 | |
| 158 { | |
| 159 // Disable the second plugin. | |
| 160 plugin3045.enabled = false; | |
| 161 scoped_ptr<PluginGroup> group(PluginGroupTest::CreatePluginGroup( | |
| 162 plugindefs[i])); | |
| 163 EXPECT_TRUE(group->Match(plugin3043)); | |
| 164 group->AddPlugin(plugin3043, 1); | |
| 165 EXPECT_EQ(desc3043, group->description()); | 149 EXPECT_EQ(desc3043, group->description()); |
| 166 EXPECT_TRUE(group->IsVulnerable()); | 150 EXPECT_TRUE(group->IsVulnerable()); |
| 167 EXPECT_TRUE(group->Match(plugin3045)); | 151 EXPECT_TRUE(group->Match(plugin3045)); |
| 168 group->AddPlugin(plugin3045, 0); | 152 group->AddPlugin(plugin3045); |
| 169 EXPECT_EQ(desc3043, group->description()); | 153 EXPECT_EQ(desc3043, group->description()); |
| 170 EXPECT_TRUE(group->IsVulnerable()); | 154 EXPECT_TRUE(group->IsVulnerable()); |
| 171 } | 155 } |
| 172 } | 156 } |
| 173 } | 157 } |
| 174 | 158 |
| 175 TEST(PluginGroupTest, PluginGroupDefinition) { | 159 TEST(PluginGroupTest, PluginGroupDefinition) { |
| 176 const PluginGroupDefinition* definitions = | 160 const PluginGroupDefinition* definitions = |
| 177 PluginList::GetPluginGroupDefinitions(); | 161 PluginList::GetPluginGroupDefinitions(); |
| 178 for (size_t i = 0; i < PluginList::GetPluginGroupDefinitionsSize(); ++i) { | 162 for (size_t i = 0; i < PluginList::GetPluginGroupDefinitionsSize(); ++i) { |
| 179 scoped_ptr<PluginGroup> def_group( | 163 scoped_ptr<PluginGroup> def_group( |
| 180 PluginGroupTest::CreatePluginGroup(definitions[i])); | 164 PluginGroupTest::CreatePluginGroup(definitions[i])); |
| 181 ASSERT_TRUE(def_group.get() != NULL); | 165 ASSERT_TRUE(def_group.get() != NULL); |
| 182 EXPECT_FALSE(def_group->Match(kPlugin2043)); | 166 EXPECT_FALSE(def_group->Match(kPlugin2043)); |
| 183 } | 167 } |
| 184 } | 168 } |
| 185 | 169 |
| 186 TEST(PluginGroupTest, DisableOutdated) { | 170 TEST(PluginGroupTest, DisableOutdated) { |
| 187 PluginGroupDefinition plugindefs[] = { kPluginDef3, kPluginDef34 }; | 171 PluginGroupDefinition plugindefs[] = { kPluginDef3, kPluginDef34 }; |
| 188 for (size_t i = 0; i < 2; ++i) { | 172 for (size_t i = 0; i < 2; ++i) { |
| 189 scoped_ptr<PluginGroup> group(PluginGroupTest::CreatePluginGroup( | 173 scoped_ptr<PluginGroup> group(PluginGroupTest::CreatePluginGroup( |
| 190 plugindefs[i])); | 174 plugindefs[i])); |
| 191 group->AddPlugin(kPlugin3043, 0); | 175 group->AddPlugin(kPlugin3043); |
| 192 group->AddPlugin(kPlugin3045, 1); | 176 group->AddPlugin(kPlugin3045); |
| 177 |
| 193 EXPECT_EQ(ASCIIToUTF16("MyPlugin version 3.0.43"), group->description()); | 178 EXPECT_EQ(ASCIIToUTF16("MyPlugin version 3.0.43"), group->description()); |
| 194 EXPECT_TRUE(group->IsVulnerable()); | 179 EXPECT_TRUE(group->IsVulnerable()); |
| 195 | 180 |
| 196 group->DisableOutdatedPlugins(); | 181 group->DisableOutdatedPlugins(); |
| 197 EXPECT_EQ(ASCIIToUTF16("MyPlugin version 3.0.45"), group->description()); | 182 EXPECT_EQ(ASCIIToUTF16("MyPlugin version 3.0.45"), group->description()); |
| 198 EXPECT_FALSE(group->IsVulnerable()); | 183 EXPECT_FALSE(group->IsVulnerable()); |
| 199 } | 184 } |
| 200 } | 185 } |
| 201 | 186 |
| 202 TEST(PluginGroupTest, VersionExtraction) { | 187 TEST(PluginGroupTest, VersionExtraction) { |
| 203 // Some real-world plugin versions (spaces, commata, parentheses, 'r', oh my) | 188 // Some real-world plugin versions (spaces, commata, parentheses, 'r', oh my) |
| 204 const char* versions[][2] = { | 189 const char* versions[][2] = { |
| 205 { "7.6.6 (1671)", "7.6.6.1671" }, // Quicktime | 190 { "7.6.6 (1671)", "7.6.6.1671" }, // Quicktime |
| 206 { "2, 0, 0, 254", "2.0.0.254" }, // DivX | 191 { "2, 0, 0, 254", "2.0.0.254" }, // DivX |
| 207 { "3, 0, 0, 0", "3.0.0.0" }, // Picasa | 192 { "3, 0, 0, 0", "3.0.0.0" }, // Picasa |
| 208 { "1, 0, 0, 1", "1.0.0.1" }, // Earth | 193 { "1, 0, 0, 1", "1.0.0.1" }, // Earth |
| 209 { "10,0,45,2", "10.0.45.2" }, // Flash | 194 { "10,0,45,2", "10.0.45.2" }, // Flash |
| 210 { "11.5.7r609", "11.5.7.609"}, // Shockwave | 195 { "11.5.7r609", "11.5.7.609"}, // Shockwave |
| 211 { "10.1 r102", "10.1.102"}, // Flash | 196 { "10.1 r102", "10.1.102"}, // Flash |
| 212 { "1.6.0_22", "1.6.0.22"}, // Java | 197 { "1.6.0_22", "1.6.0.22"}, // Java |
| 213 }; | 198 }; |
| 214 | 199 |
| 215 for (size_t i = 0; i < arraysize(versions); i++) { | 200 for (size_t i = 0; i < arraysize(versions); i++) { |
| 216 const WebPluginInfo plugin = WebPluginInfo( | 201 const WebPluginInfo plugin = WebPluginInfo( |
| 217 ASCIIToUTF16("Blah Plugin"), FilePath(FILE_PATH_LITERAL("blahfile")), | 202 ASCIIToUTF16("Blah Plugin"), FilePath(FILE_PATH_LITERAL("blahfile")), |
| 218 ASCIIToUTF16(versions[i][0]), string16()); | 203 ASCIIToUTF16(versions[i][0]), string16()); |
| 219 scoped_ptr<PluginGroup> group(PluginGroupTest::CreatePluginGroup(plugin)); | 204 scoped_ptr<PluginGroup> group(PluginGroupTest::CreatePluginGroup(plugin)); |
| 220 EXPECT_TRUE(group->Match(plugin)); | 205 EXPECT_TRUE(group->Match(plugin)); |
| 221 group->AddPlugin(plugin, 0); | 206 group->AddPlugin(plugin); |
| 222 scoped_ptr<DictionaryValue> data(group->GetDataForUI()); | 207 scoped_ptr<DictionaryValue> data(group->GetDataForUI()); |
| 223 std::string version; | 208 std::string version; |
| 224 data->GetString("version", &version); | 209 data->GetString("version", &version); |
| 225 EXPECT_EQ(versions[i][1], version); | 210 EXPECT_EQ(versions[i][1], version); |
| 226 } | 211 } |
| 227 } | 212 } |
| 228 | 213 |
| 229 TEST(PluginGroupTest, DisabledByPolicy) { | 214 TEST(PluginGroupTest, DisabledByPolicy) { |
| 230 std::set<string16> disabled_plugins; | 215 std::set<string16> disabled_plugins; |
| 231 disabled_plugins.insert(ASCIIToUTF16("Disable this!")); | 216 disabled_plugins.insert(ASCIIToUTF16("Disable this!")); |
| (...skipping 17 matching lines...) Expand all Loading... |
| 249 PluginGroupDefinition adobe_reader_plugin_def = { | 234 PluginGroupDefinition adobe_reader_plugin_def = { |
| 250 "adobe-reader", "Adobe Reader", "Adobe Acrobat", | 235 "adobe-reader", "Adobe Reader", "Adobe Acrobat", |
| 251 adobe_reader_version_range, arraysize(adobe_reader_version_range), | 236 adobe_reader_version_range, arraysize(adobe_reader_version_range), |
| 252 "http://get.adobe.com/reader/" }; | 237 "http://get.adobe.com/reader/" }; |
| 253 WebPluginInfo adobe_reader_plugin(ASCIIToUTF16("Adobe Reader"), | 238 WebPluginInfo adobe_reader_plugin(ASCIIToUTF16("Adobe Reader"), |
| 254 FilePath(FILE_PATH_LITERAL("/reader.so")), | 239 FilePath(FILE_PATH_LITERAL("/reader.so")), |
| 255 ASCIIToUTF16("10.0.0.396"), | 240 ASCIIToUTF16("10.0.0.396"), |
| 256 ASCIIToUTF16("adobe reader 10")); | 241 ASCIIToUTF16("adobe reader 10")); |
| 257 scoped_ptr<PluginGroup> group(PluginGroupTest::CreatePluginGroup( | 242 scoped_ptr<PluginGroup> group(PluginGroupTest::CreatePluginGroup( |
| 258 adobe_reader_plugin_def)); | 243 adobe_reader_plugin_def)); |
| 259 group->AddPlugin(adobe_reader_plugin, 0); | 244 group->AddPlugin(adobe_reader_plugin); |
| 260 PluginGroup group_copy(*group); // Exercise the copy constructor. | 245 PluginGroup group_copy(*group); // Exercise the copy constructor. |
| 261 EXPECT_FALSE(group_copy.IsVulnerable()); | 246 EXPECT_FALSE(group_copy.IsVulnerable()); |
| 262 | 247 |
| 263 // Silverlight 4 | 248 // Silverlight 4 |
| 264 VersionRangeDefinition silverlight_version_range[] = { | 249 VersionRangeDefinition silverlight_version_range[] = { |
| 265 { "0", "4", "3.0.50106.0" }, | 250 { "0", "4", "3.0.50106.0" }, |
| 266 { "4", "5", "" } | 251 { "4", "5", "" } |
| 267 }; | 252 }; |
| 268 PluginGroupDefinition silverlight_plugin_def = { | 253 PluginGroupDefinition silverlight_plugin_def = { |
| 269 "silverlight", "Silverlight", "Silverlight", silverlight_version_range, | 254 "silverlight", "Silverlight", "Silverlight", silverlight_version_range, |
| 270 arraysize(silverlight_version_range), | 255 arraysize(silverlight_version_range), |
| 271 "http://www.microsoft.com/getsilverlight/" }; | 256 "http://www.microsoft.com/getsilverlight/" }; |
| 272 WebPluginInfo silverlight_plugin(ASCIIToUTF16("Silverlight"), | 257 WebPluginInfo silverlight_plugin(ASCIIToUTF16("Silverlight"), |
| 273 FilePath(FILE_PATH_LITERAL("/silver.so")), | 258 FilePath(FILE_PATH_LITERAL("/silver.so")), |
| 274 ASCIIToUTF16("4.0.50917.0"), | 259 ASCIIToUTF16("4.0.50917.0"), |
| 275 ASCIIToUTF16("silverlight 4")); | 260 ASCIIToUTF16("silverlight 4")); |
| 276 group.reset(PluginGroupTest::CreatePluginGroup(silverlight_plugin_def)); | 261 group.reset(PluginGroupTest::CreatePluginGroup(silverlight_plugin_def)); |
| 277 group->AddPlugin(silverlight_plugin, 0); | 262 group->AddPlugin(silverlight_plugin); |
| 278 EXPECT_FALSE(PluginGroup(*group).IsVulnerable()); | 263 EXPECT_FALSE(PluginGroup(*group).IsVulnerable()); |
| 279 } | 264 } |
| 280 } // namespace npapi | 265 } // namespace npapi |
| 281 } // namespace webkit | 266 } // namespace webkit |
| OLD | NEW |