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 "content/common/plugin_list.h" | 5 #include "content/common/plugin_list.h" |
6 | 6 |
7 #include <set> | 7 #include <set> |
8 | 8 |
9 #include "base/basictypes.h" | 9 #include "base/basictypes.h" |
10 #include "base/file_version_info.h" | 10 #include "base/file_version_info.h" |
(...skipping 366 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
377 | 377 |
378 for (std::set<base::FilePath>::iterator i = plugin_dirs.begin(); | 378 for (std::set<base::FilePath>::iterator i = plugin_dirs.begin(); |
379 i != plugin_dirs.end(); ++i) { | 379 i != plugin_dirs.end(); ++i) { |
380 plugins->push_back(*i); | 380 plugins->push_back(*i); |
381 } | 381 } |
382 } | 382 } |
383 | 383 |
384 bool PluginList::ShouldLoadPluginUsingPluginList( | 384 bool PluginList::ShouldLoadPluginUsingPluginList( |
385 const WebPluginInfo& info, | 385 const WebPluginInfo& info, |
386 std::vector<WebPluginInfo>* plugins) { | 386 std::vector<WebPluginInfo>* plugins) { |
387 bool should_check_version = true; | 387 bool wrong_architecture = false; |
388 { | 388 |
389 base::AutoLock lock(lock_); | 389 if (info.type == WebPluginInfo::PLUGIN_TYPE_NPAPI) { |
390 should_check_version = | 390 base::FilePath plugin_path(info.path); |
391 std::find(extra_plugin_paths_.begin(), extra_plugin_paths_.end(), | 391 #if defined(ARCH_CPU_X86_64) |
392 info.path) == extra_plugin_paths_.end(); | 392 // The plugin in question could be a 32 bit plugin which we cannot load. |
393 if (IsValid32BitImage(base::MakeAbsoluteFilePath(plugin_path))) | |
394 wrong_architecture = true; | |
395 #else | |
396 // The plugin in question could be a 64 bit plugin which we cannot load. | |
397 if (!IsValid32BitImage(base::MakeAbsoluteFilePath(plugin_path))) | |
398 wrong_architecture = true; | |
399 #endif | |
393 } | 400 } |
394 // Version check for plugins that are not coming from |extra_plugin_paths_|. | 401 |
ananta
2014/11/03 20:28:04
Can we bail if wrong_architecture is true? here?
Bernhard Bauer
2014/11/03 22:24:22
Alternatively:
bool should_check_version;
if
| |
395 if (should_check_version) { | 402 if (!wrong_architecture) { |
396 for (size_t j = 0; j < plugins->size(); ++j) { | 403 bool should_check_version = true; |
397 base::FilePath::StringType plugin1 = | 404 { |
398 base::StringToLowerASCII((*plugins)[j].path.BaseName().value()); | 405 base::AutoLock lock(lock_); |
399 base::FilePath::StringType plugin2 = | 406 should_check_version = |
400 base::StringToLowerASCII(info.path.BaseName().value()); | 407 std::find(extra_plugin_paths_.begin(), extra_plugin_paths_.end(), |
401 if ((plugin1 == plugin2 && HaveSharedMimeType((*plugins)[j], info)) || | 408 info.path) == extra_plugin_paths_.end(); |
402 (plugin1 == kJavaDeploy1 && plugin2 == kJavaDeploy2) || | 409 } |
403 (plugin1 == kJavaDeploy2 && plugin2 == kJavaDeploy1)) { | 410 // Version check for plugins that are not coming from |extra_plugin_paths_|. |
404 if (IsNewerVersion(info.version, (*plugins)[j].version)) | 411 if (should_check_version) { |
405 return false; // We have loaded a plugin whose version is newer. | 412 for (size_t j = 0; j < plugins->size(); ++j) { |
406 plugins->erase(plugins->begin() + j); | 413 base::FilePath::StringType plugin1 = |
407 break; | 414 base::StringToLowerASCII((*plugins)[j].path.BaseName().value()); |
415 base::FilePath::StringType plugin2 = | |
416 base::StringToLowerASCII(info.path.BaseName().value()); | |
417 if ((plugin1 == plugin2 && HaveSharedMimeType((*plugins)[j], info)) || | |
418 (plugin1 == kJavaDeploy1 && plugin2 == kJavaDeploy2) || | |
419 (plugin1 == kJavaDeploy2 && plugin2 == kJavaDeploy1)) { | |
420 if (IsNewerVersion(info.version, (*plugins)[j].version)) | |
421 return false; // We have loaded a plugin whose version is newer. | |
422 plugins->erase(plugins->begin() + j); | |
423 break; | |
424 } | |
408 } | 425 } |
409 } | 426 } |
410 } | 427 } |
411 | 428 |
412 // The checks below only apply to NPAPI plugins. | 429 // The checks below only apply to NPAPI plugins. |
413 if (info.type != WebPluginInfo::PLUGIN_TYPE_NPAPI) | 430 if (info.type != WebPluginInfo::PLUGIN_TYPE_NPAPI) |
414 return true; | 431 return true; |
415 | 432 |
416 { | 433 { |
417 base::AutoLock lock(lock_); | 434 base::AutoLock lock(lock_); |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
467 } | 484 } |
468 } | 485 } |
469 | 486 |
470 } else if (filename == kOldWMPPlugin) { | 487 } else if (filename == kOldWMPPlugin) { |
471 for (size_t j = 0; j < plugins->size(); ++j) { | 488 for (size_t j = 0; j < plugins->size(); ++j) { |
472 if ((*plugins)[j].path.BaseName().value() == kNewWMPPlugin) | 489 if ((*plugins)[j].path.BaseName().value() == kNewWMPPlugin) |
473 return false; | 490 return false; |
474 } | 491 } |
475 } | 492 } |
476 | 493 |
477 base::FilePath plugin_path(info.path); | 494 if (wrong_architecture) |
478 #if defined(ARCH_CPU_X86_64) | |
479 // The plugin in question could be a 32 bit plugin which we cannot load. | |
480 if (IsValid32BitImage(base::MakeAbsoluteFilePath(plugin_path))) | |
481 return false; | 495 return false; |
482 #else | 496 |
483 // The plugin in question could be a 64 bit plugin which we cannot load. | |
484 if (!IsValid32BitImage(base::MakeAbsoluteFilePath(plugin_path))) | |
485 return false; | |
486 #endif | |
487 return true; | 497 return true; |
488 } | 498 } |
489 | 499 |
490 } // namespace content | 500 } // namespace content |
OLD | NEW |