| OLD | NEW | 
|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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_list.h" | 5 #include "webkit/plugins/npapi/plugin_list.h" | 
| 6 | 6 | 
| 7 #include <tchar.h> | 7 #include <tchar.h> | 
| 8 | 8 | 
| 9 #include <set> | 9 #include <set> | 
| 10 | 10 | 
| (...skipping 317 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 328     base::StringToInt(b_ver[i], &cur_b); | 328     base::StringToInt(b_ver[i], &cur_b); | 
| 329 | 329 | 
| 330     if (cur_a > cur_b) | 330     if (cur_a > cur_b) | 
| 331       return false; | 331       return false; | 
| 332     if (cur_a < cur_b) | 332     if (cur_a < cur_b) | 
| 333       return true; | 333       return true; | 
| 334   } | 334   } | 
| 335   return false; | 335   return false; | 
| 336 } | 336 } | 
| 337 | 337 | 
| 338 // TODO(ibraaaa): DELETE. http://crbug.com/124396 |  | 
| 339 bool PluginList::ShouldLoadPlugin( |  | 
| 340     const webkit::WebPluginInfo& info, |  | 
| 341     ScopedVector<PluginGroup>* plugin_groups) { |  | 
| 342   // Version check |  | 
| 343 |  | 
| 344   for (size_t i = 0; i < plugin_groups->size(); ++i) { |  | 
| 345     const std::vector<webkit::WebPluginInfo>& plugins = |  | 
| 346         (*plugin_groups)[i]->web_plugin_infos(); |  | 
| 347     for (size_t j = 0; j < plugins.size(); ++j) { |  | 
| 348       std::wstring plugin1 = |  | 
| 349           StringToLowerASCII(plugins[j].path.BaseName().value()); |  | 
| 350       std::wstring plugin2 = |  | 
| 351           StringToLowerASCII(info.path.BaseName().value()); |  | 
| 352       if ((plugin1 == plugin2 && HaveSharedMimeType(plugins[j], info)) || |  | 
| 353           (plugin1 == kJavaDeploy1 && plugin2 == kJavaDeploy2) || |  | 
| 354           (plugin1 == kJavaDeploy2 && plugin2 == kJavaDeploy1)) { |  | 
| 355         if (!IsNewerVersion(plugins[j].version, info.version)) |  | 
| 356           return false;  // We have loaded a plugin whose version is newer. |  | 
| 357         (*plugin_groups)[i]->RemovePlugin(plugins[j].path); |  | 
| 358         break; |  | 
| 359       } |  | 
| 360     } |  | 
| 361   } |  | 
| 362 |  | 
| 363   // Troublemakers |  | 
| 364 |  | 
| 365   std::wstring filename = StringToLowerASCII(info.path.BaseName().value()); |  | 
| 366   // Depends on XPCOM. |  | 
| 367   if (filename == kMozillaActiveXPlugin) |  | 
| 368     return false; |  | 
| 369 |  | 
| 370   // Disable the Yahoo Application State plugin as it crashes the plugin |  | 
| 371   // process on return from NPObjectStub::OnInvoke. Please refer to |  | 
| 372   // http://b/issue?id=1372124 for more information. |  | 
| 373   if (filename == kYahooApplicationStatePlugin) |  | 
| 374     return false; |  | 
| 375 |  | 
| 376   // Disable the WangWang protocol handler plugin (npww.dll) as it crashes |  | 
| 377   // chrome during shutdown. Firefox also disables this plugin. |  | 
| 378   // Please refer to http://code.google.com/p/chromium/issues/detail?id=3953 |  | 
| 379   // for more information. |  | 
| 380   if (filename == kWanWangProtocolHandlerPlugin) |  | 
| 381     return false; |  | 
| 382 |  | 
| 383   // We only work with newer versions of the Java plugin which use NPAPI only |  | 
| 384   // and don't depend on XPCOM. |  | 
| 385   if (filename == kJavaPlugin1 || filename == kJavaPlugin2) { |  | 
| 386     std::vector<std::wstring> ver; |  | 
| 387     base::SplitString(info.version, '.', &ver); |  | 
| 388     int major, minor, update; |  | 
| 389     if (ver.size() == 4 && |  | 
| 390         base::StringToInt(ver[0], &major) && |  | 
| 391         base::StringToInt(ver[1], &minor) && |  | 
| 392         base::StringToInt(ver[2], &update)) { |  | 
| 393       if (major == 6 && minor == 0 && update < 120) |  | 
| 394         return false;  // Java SE6 Update 11 or older. |  | 
| 395     } |  | 
| 396   } |  | 
| 397 |  | 
| 398   if (base::win::IsMetroProcess()) { |  | 
| 399     // In metro mode we only allow pepper plugins. |  | 
| 400     if (info.type == WebPluginInfo::PLUGIN_TYPE_NPAPI) |  | 
| 401       return false; |  | 
| 402   } |  | 
| 403 |  | 
| 404   // Special WMP handling |  | 
| 405 |  | 
| 406   // If both the new and old WMP plugins exist, only load the new one. |  | 
| 407   if (filename == kNewWMPPlugin) { |  | 
| 408     if (dont_load_new_wmp_) |  | 
| 409       return false; |  | 
| 410 |  | 
| 411     for (size_t i = 0; i < plugin_groups->size(); ++i) { |  | 
| 412       const std::vector<webkit::WebPluginInfo>& plugins = |  | 
| 413           (*plugin_groups)[i]->web_plugin_infos(); |  | 
| 414       for (size_t j = 0; j < plugins.size(); ++j) { |  | 
| 415         if (plugins[j].path.BaseName().value() == kOldWMPPlugin) { |  | 
| 416           (*plugin_groups)[i]->RemovePlugin(plugins[j].path); |  | 
| 417           break; |  | 
| 418         } |  | 
| 419       } |  | 
| 420     } |  | 
| 421   } else if (filename == kOldWMPPlugin) { |  | 
| 422     for (size_t i = 0; i < plugin_groups->size(); ++i) { |  | 
| 423       const std::vector<webkit::WebPluginInfo>& plugins = |  | 
| 424           (*plugin_groups)[i]->web_plugin_infos(); |  | 
| 425       for (size_t j = 0; j < plugins.size(); ++j) { |  | 
| 426         if (plugins[j].path.BaseName().value() == kNewWMPPlugin) |  | 
| 427           return false; |  | 
| 428       } |  | 
| 429     } |  | 
| 430   } |  | 
| 431 |  | 
| 432   HMODULE plugin_dll = NULL; |  | 
| 433   bool load_plugin = true; |  | 
| 434 |  | 
| 435   // The plugin list could contain a 64 bit plugin which we cannot load. |  | 
| 436   for (size_t i = 0; i < internal_plugins_.size(); ++i) { |  | 
| 437     if (info.path == internal_plugins_[i].info.path) |  | 
| 438       continue; |  | 
| 439 |  | 
| 440     if (file_util::PathExists(info.path) && (!IsValid32BitImage(info.path))) |  | 
| 441       load_plugin = false; |  | 
| 442     break; |  | 
| 443   } |  | 
| 444   return load_plugin; |  | 
| 445 } |  | 
| 446 |  | 
| 447 bool PluginList::ShouldLoadPluginUsingPluginList( | 338 bool PluginList::ShouldLoadPluginUsingPluginList( | 
| 448     const webkit::WebPluginInfo& info, | 339     const webkit::WebPluginInfo& info, | 
| 449     std::vector<webkit::WebPluginInfo>* plugins) { | 340     std::vector<webkit::WebPluginInfo>* plugins) { | 
| 450   // Version check | 341   // Version check | 
| 451   for (size_t j = 0; j < plugins->size(); ++j) { | 342   for (size_t j = 0; j < plugins->size(); ++j) { | 
| 452     FilePath::StringType plugin1 = | 343     FilePath::StringType plugin1 = | 
| 453         StringToLowerASCII((*plugins)[j].path.BaseName().value()); | 344         StringToLowerASCII((*plugins)[j].path.BaseName().value()); | 
| 454     FilePath::StringType plugin2 = | 345     FilePath::StringType plugin2 = | 
| 455         StringToLowerASCII(info.path.BaseName().value()); | 346         StringToLowerASCII(info.path.BaseName().value()); | 
| 456     if ((plugin1 == plugin2 && HaveSharedMimeType((*plugins)[j], info)) || | 347     if ((plugin1 == plugin2 && HaveSharedMimeType((*plugins)[j], info)) || | 
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 537     if (file_util::PathExists(info.path) && (!IsValid32BitImage(info.path))) | 428     if (file_util::PathExists(info.path) && (!IsValid32BitImage(info.path))) | 
| 538       load_plugin = false; | 429       load_plugin = false; | 
| 539     break; | 430     break; | 
| 540   } | 431   } | 
| 541   return load_plugin; | 432   return load_plugin; | 
| 542 } | 433 } | 
| 543 | 434 | 
| 544 | 435 | 
| 545 }  // namespace npapi | 436 }  // namespace npapi | 
| 546 }  // namespace webkit | 437 }  // namespace webkit | 
| OLD | NEW | 
|---|