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 "chrome/browser/extensions/external_provider_impl.h" | 5 #include "chrome/browser/extensions/external_provider_impl.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include <set> | 9 #include <set> |
10 #include <vector> | 10 #include <vector> |
11 | 11 |
12 #include "base/command_line.h" | 12 #include "base/command_line.h" |
13 #include "base/files/file_path.h" | 13 #include "base/files/file_path.h" |
14 #include "base/logging.h" | 14 #include "base/logging.h" |
15 #include "base/memory/linked_ptr.h" | |
16 #include "base/metrics/field_trial.h" | 15 #include "base/metrics/field_trial.h" |
17 #include "base/stl_util.h" | 16 #include "base/stl_util.h" |
18 #include "base/strings/string_util.h" | 17 #include "base/strings/string_util.h" |
19 #include "base/trace_event/trace_event.h" | 18 #include "base/trace_event/trace_event.h" |
20 #include "base/values.h" | 19 #include "base/values.h" |
21 #include "base/version.h" | 20 #include "base/version.h" |
22 #include "build/build_config.h" | 21 #include "build/build_config.h" |
23 #include "chrome/browser/app_mode/app_mode_utils.h" | 22 #include "chrome/browser/app_mode/app_mode_utils.h" |
24 #include "chrome/browser/browser_process.h" | 23 #include "chrome/browser/browser_process.h" |
25 #include "chrome/browser/browser_process_platform_part.h" | 24 #include "chrome/browser/browser_process_platform_part.h" |
(...skipping 498 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
524 ExtensionManagementFactory::GetForBrowserContext(profile), | 523 ExtensionManagementFactory::GetForBrowserContext(profile), |
525 ExternalPolicyLoader::FORCED); | 524 ExternalPolicyLoader::FORCED); |
526 external_recommended_loader = new ExternalPolicyLoader( | 525 external_recommended_loader = new ExternalPolicyLoader( |
527 ExtensionManagementFactory::GetForBrowserContext(profile), | 526 ExtensionManagementFactory::GetForBrowserContext(profile), |
528 ExternalPolicyLoader::RECOMMENDED); | 527 ExternalPolicyLoader::RECOMMENDED); |
529 #endif | 528 #endif |
530 | 529 |
531 // Policies are mandatory so they can't be skipped with command line flag. | 530 // Policies are mandatory so they can't be skipped with command line flag. |
532 if (external_loader.get()) { | 531 if (external_loader.get()) { |
533 provider_list->push_back( | 532 provider_list->push_back( |
534 linked_ptr<ExternalProviderInterface>( | 533 std::unique_ptr<ExternalProviderInterface>(new ExternalProviderImpl( |
Devlin
2016/08/30 19:21:53
prefer base::MakeUnique
lazyboy
2016/08/30 20:30:56
Done.
| |
535 new ExternalProviderImpl( | 534 service, external_loader, profile, crx_location, |
536 service, | 535 Manifest::EXTERNAL_POLICY_DOWNLOAD, Extension::NO_FLAGS))); |
537 external_loader, | |
538 profile, | |
539 crx_location, | |
540 Manifest::EXTERNAL_POLICY_DOWNLOAD, | |
541 Extension::NO_FLAGS))); | |
542 } | 536 } |
543 | 537 |
544 // Load the KioskAppExternalProvider when running in kiosk mode. | 538 // Load the KioskAppExternalProvider when running in kiosk mode. |
545 if (chrome::IsRunningInForcedAppMode()) { | 539 if (chrome::IsRunningInForcedAppMode()) { |
546 #if defined(OS_CHROMEOS) | 540 #if defined(OS_CHROMEOS) |
547 chromeos::KioskAppManager* kiosk_app_manager = | 541 chromeos::KioskAppManager* kiosk_app_manager = |
548 chromeos::KioskAppManager::Get(); | 542 chromeos::KioskAppManager::Get(); |
549 CHECK(kiosk_app_manager); | 543 CHECK(kiosk_app_manager); |
550 | 544 |
551 // Kiosk primary app external provider. | 545 // Kiosk primary app external provider. |
552 if (!kiosk_app_manager->external_loader_created()) { | 546 if (!kiosk_app_manager->external_loader_created()) { |
553 // For enterprise managed kiosk apps, change the location to | 547 // For enterprise managed kiosk apps, change the location to |
554 // "force-installed by policy". | 548 // "force-installed by policy". |
555 policy::BrowserPolicyConnectorChromeOS* const connector = | 549 policy::BrowserPolicyConnectorChromeOS* const connector = |
556 g_browser_process->platform_part() | 550 g_browser_process->platform_part() |
557 ->browser_policy_connector_chromeos(); | 551 ->browser_policy_connector_chromeos(); |
558 Manifest::Location location = Manifest::EXTERNAL_PREF; | 552 Manifest::Location location = Manifest::EXTERNAL_PREF; |
559 if (connector && connector->IsEnterpriseManaged()) | 553 if (connector && connector->IsEnterpriseManaged()) |
560 location = Manifest::EXTERNAL_POLICY; | 554 location = Manifest::EXTERNAL_POLICY; |
561 | 555 |
562 std::unique_ptr<ExternalProviderImpl> kiosk_app_provider( | 556 std::unique_ptr<ExternalProviderImpl> kiosk_app_provider( |
563 new ExternalProviderImpl( | 557 new ExternalProviderImpl( |
564 service, kiosk_app_manager->CreateExternalLoader(), profile, | 558 service, kiosk_app_manager->CreateExternalLoader(), profile, |
565 location, Manifest::INVALID_LOCATION, Extension::NO_FLAGS)); | 559 location, Manifest::INVALID_LOCATION, Extension::NO_FLAGS)); |
566 kiosk_app_provider->set_auto_acknowledge(true); | 560 kiosk_app_provider->set_auto_acknowledge(true); |
567 kiosk_app_provider->set_install_immediately(true); | 561 kiosk_app_provider->set_install_immediately(true); |
568 provider_list->push_back( | 562 provider_list->push_back(std::move(kiosk_app_provider)); |
569 linked_ptr<ExternalProviderInterface>(kiosk_app_provider.release())); | |
570 } | 563 } |
571 | 564 |
572 // Kiosk secondary app external provider. | 565 // Kiosk secondary app external provider. |
573 if (!kiosk_app_manager->secondary_app_external_loader_created()) { | 566 if (!kiosk_app_manager->secondary_app_external_loader_created()) { |
574 std::unique_ptr<ExternalProviderImpl> secondary_kiosk_app_provider( | 567 std::unique_ptr<ExternalProviderImpl> secondary_kiosk_app_provider( |
575 new ExternalProviderImpl( | 568 new ExternalProviderImpl( |
576 service, kiosk_app_manager->CreateSecondaryAppExternalLoader(), | 569 service, kiosk_app_manager->CreateSecondaryAppExternalLoader(), |
577 profile, Manifest::EXTERNAL_PREF, | 570 profile, Manifest::EXTERNAL_PREF, |
578 Manifest::EXTERNAL_PREF_DOWNLOAD, Extension::NO_FLAGS)); | 571 Manifest::EXTERNAL_PREF_DOWNLOAD, Extension::NO_FLAGS)); |
579 secondary_kiosk_app_provider->set_auto_acknowledge(true); | 572 secondary_kiosk_app_provider->set_auto_acknowledge(true); |
580 secondary_kiosk_app_provider->set_install_immediately(true); | 573 secondary_kiosk_app_provider->set_install_immediately(true); |
581 provider_list->push_back(linked_ptr<ExternalProviderInterface>( | 574 provider_list->push_back(std::move(secondary_kiosk_app_provider)); |
582 secondary_kiosk_app_provider.release())); | |
583 } | 575 } |
584 #endif | 576 #endif |
585 return; | 577 return; |
586 } | 578 } |
587 | 579 |
588 // Extensions provided by recommended policies. | 580 // Extensions provided by recommended policies. |
589 if (external_recommended_loader.get()) { | 581 if (external_recommended_loader.get()) { |
590 provider_list->push_back(linked_ptr<ExternalProviderInterface>( | 582 provider_list->push_back( |
591 new ExternalProviderImpl(service, | 583 std::unique_ptr<ExternalProviderInterface>(new ExternalProviderImpl( |
Devlin
2016/08/30 19:21:53
ditto
lazyboy
2016/08/30 20:30:56
Done.
| |
592 external_recommended_loader, | 584 service, external_recommended_loader, profile, crx_location, |
593 profile, | 585 Manifest::EXTERNAL_PREF_DOWNLOAD, Extension::NO_FLAGS))); |
594 crx_location, | |
595 Manifest::EXTERNAL_PREF_DOWNLOAD, | |
596 Extension::NO_FLAGS))); | |
597 } | 586 } |
598 | 587 |
599 // In tests don't install extensions from default external sources. | 588 // In tests don't install extensions from default external sources. |
600 // It would only slowdown tests and make them flaky. | 589 // It would only slowdown tests and make them flaky. |
601 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | 590 if (base::CommandLine::ForCurrentProcess()->HasSwitch( |
602 switches::kDisableDefaultApps)) | 591 switches::kDisableDefaultApps)) |
603 return; | 592 return; |
604 | 593 |
605 // On Mac OS, items in /Library/... should be written by the superuser. | 594 // On Mac OS, items in /Library/... should be written by the superuser. |
606 // Check that all components of the path are writable by root only. | 595 // Check that all components of the path are writable by root only. |
(...skipping 14 matching lines...) Expand all Loading... | |
621 | 610 |
622 if (!is_chrome_os_public_session) { | 611 if (!is_chrome_os_public_session) { |
623 int external_apps_path_id = profile->IsSupervised() ? | 612 int external_apps_path_id = profile->IsSupervised() ? |
624 chrome::DIR_SUPERVISED_USERS_DEFAULT_APPS : | 613 chrome::DIR_SUPERVISED_USERS_DEFAULT_APPS : |
625 chrome::DIR_STANDALONE_EXTERNAL_EXTENSIONS; | 614 chrome::DIR_STANDALONE_EXTERNAL_EXTENSIONS; |
626 ExternalPrefLoader::Options pref_load_flags = | 615 ExternalPrefLoader::Options pref_load_flags = |
627 profile->IsNewProfile() | 616 profile->IsNewProfile() |
628 ? ExternalPrefLoader::DELAY_LOAD_UNTIL_PRIORITY_SYNC | 617 ? ExternalPrefLoader::DELAY_LOAD_UNTIL_PRIORITY_SYNC |
629 : ExternalPrefLoader::NONE; | 618 : ExternalPrefLoader::NONE; |
630 provider_list->push_back( | 619 provider_list->push_back( |
631 linked_ptr<ExternalProviderInterface>(new ExternalProviderImpl( | 620 std::unique_ptr<ExternalProviderInterface>(new ExternalProviderImpl( |
Devlin
2016/08/30 19:21:53
ditto (and for the rest of this file)
lazyboy
2016/08/30 20:30:56
Done.
| |
632 service, new ExternalPrefLoader(external_apps_path_id, | 621 service, new ExternalPrefLoader(external_apps_path_id, |
633 pref_load_flags, profile), | 622 pref_load_flags, profile), |
634 profile, Manifest::EXTERNAL_PREF, Manifest::EXTERNAL_PREF_DOWNLOAD, | 623 profile, Manifest::EXTERNAL_PREF, Manifest::EXTERNAL_PREF_DOWNLOAD, |
635 bundled_extension_creation_flags))); | 624 bundled_extension_creation_flags))); |
636 | 625 |
637 // OEM default apps. | 626 // OEM default apps. |
638 int oem_extension_creation_flags = | 627 int oem_extension_creation_flags = |
639 bundled_extension_creation_flags | Extension::WAS_INSTALLED_BY_OEM; | 628 bundled_extension_creation_flags | Extension::WAS_INSTALLED_BY_OEM; |
640 chromeos::ServicesCustomizationDocument* customization = | 629 chromeos::ServicesCustomizationDocument* customization = |
641 chromeos::ServicesCustomizationDocument::GetInstance(); | 630 chromeos::ServicesCustomizationDocument::GetInstance(); |
642 provider_list->push_back(linked_ptr<ExternalProviderInterface>( | 631 provider_list->push_back( |
643 new ExternalProviderImpl(service, | 632 std::unique_ptr<ExternalProviderInterface>(new ExternalProviderImpl( |
644 customization->CreateExternalLoader(profile), | 633 service, customization->CreateExternalLoader(profile), profile, |
645 profile, | 634 Manifest::EXTERNAL_PREF, Manifest::EXTERNAL_PREF_DOWNLOAD, |
646 Manifest::EXTERNAL_PREF, | 635 oem_extension_creation_flags))); |
647 Manifest::EXTERNAL_PREF_DOWNLOAD, | |
648 oem_extension_creation_flags))); | |
649 } | 636 } |
650 #elif defined(OS_LINUX) | 637 #elif defined(OS_LINUX) |
651 if (!profile->IsLegacySupervised()) { | 638 if (!profile->IsLegacySupervised()) { |
652 provider_list->push_back( | 639 provider_list->push_back( |
653 linked_ptr<ExternalProviderInterface>( | 640 std::unique_ptr<ExternalProviderInterface>(new ExternalProviderImpl( |
654 new ExternalProviderImpl( | 641 service, |
655 service, | 642 new ExternalPrefLoader(chrome::DIR_STANDALONE_EXTERNAL_EXTENSIONS, |
656 new ExternalPrefLoader( | 643 ExternalPrefLoader::NONE, nullptr), |
657 chrome::DIR_STANDALONE_EXTERNAL_EXTENSIONS, | 644 profile, Manifest::EXTERNAL_PREF, Manifest::EXTERNAL_PREF_DOWNLOAD, |
658 ExternalPrefLoader::NONE, | 645 bundled_extension_creation_flags))); |
659 NULL), | |
660 profile, | |
661 Manifest::EXTERNAL_PREF, | |
662 Manifest::EXTERNAL_PREF_DOWNLOAD, | |
663 bundled_extension_creation_flags))); | |
664 } | 646 } |
665 #endif | 647 #endif |
666 | 648 |
667 if (!profile->IsLegacySupervised()) { | 649 if (!profile->IsLegacySupervised()) { |
668 #if defined(OS_WIN) | 650 #if defined(OS_WIN) |
669 provider_list->push_back( | 651 provider_list->push_back( |
670 linked_ptr<ExternalProviderInterface>( | 652 std::unique_ptr<ExternalProviderInterface>(new ExternalProviderImpl( |
671 new ExternalProviderImpl( | 653 service, new ExternalRegistryLoader, profile, |
672 service, | 654 Manifest::EXTERNAL_REGISTRY, Manifest::EXTERNAL_PREF_DOWNLOAD, |
673 new ExternalRegistryLoader, | 655 Extension::NO_FLAGS))); |
674 profile, | |
675 Manifest::EXTERNAL_REGISTRY, | |
676 Manifest::EXTERNAL_PREF_DOWNLOAD, | |
677 Extension::NO_FLAGS))); | |
678 #else | 656 #else |
679 provider_list->push_back( | 657 provider_list->push_back( |
680 linked_ptr<ExternalProviderInterface>( | 658 std::unique_ptr<ExternalProviderInterface>(new ExternalProviderImpl( |
681 new ExternalProviderImpl( | 659 service, |
682 service, | 660 new ExternalPrefLoader(chrome::DIR_EXTERNAL_EXTENSIONS, |
683 new ExternalPrefLoader(chrome::DIR_EXTERNAL_EXTENSIONS, | 661 check_admin_permissions_on_mac, nullptr), |
684 check_admin_permissions_on_mac, | 662 profile, Manifest::EXTERNAL_PREF, Manifest::EXTERNAL_PREF_DOWNLOAD, |
685 NULL), | 663 bundled_extension_creation_flags))); |
686 profile, | |
687 Manifest::EXTERNAL_PREF, | |
688 Manifest::EXTERNAL_PREF_DOWNLOAD, | |
689 bundled_extension_creation_flags))); | |
690 | 664 |
691 // Define a per-user source of external extensions. | 665 // Define a per-user source of external extensions. |
692 #if defined(OS_MACOSX) || (defined(OS_LINUX) && defined(CHROMIUM_BUILD)) | 666 #if defined(OS_MACOSX) || (defined(OS_LINUX) && defined(CHROMIUM_BUILD)) |
693 provider_list->push_back( | 667 provider_list->push_back( |
694 linked_ptr<ExternalProviderInterface>( | 668 std::unique_ptr<ExternalProviderInterface>(new ExternalProviderImpl( |
695 new ExternalProviderImpl( | 669 service, |
696 service, | 670 new ExternalPrefLoader(chrome::DIR_USER_EXTERNAL_EXTENSIONS, |
697 new ExternalPrefLoader(chrome::DIR_USER_EXTERNAL_EXTENSIONS, | 671 ExternalPrefLoader::NONE, nullptr), |
698 ExternalPrefLoader::NONE, | 672 profile, Manifest::EXTERNAL_PREF, Manifest::EXTERNAL_PREF_DOWNLOAD, |
699 NULL), | 673 Extension::NO_FLAGS))); |
700 profile, | |
701 Manifest::EXTERNAL_PREF, | |
702 Manifest::EXTERNAL_PREF_DOWNLOAD, | |
703 Extension::NO_FLAGS))); | |
704 #endif | 674 #endif |
705 #endif | 675 #endif |
706 | 676 |
707 #if !defined(OS_CHROMEOS) | 677 #if !defined(OS_CHROMEOS) |
708 // The default apps are installed as INTERNAL but use the external | 678 // The default apps are installed as INTERNAL but use the external |
709 // extension installer codeflow. | 679 // extension installer codeflow. |
710 provider_list->push_back( | 680 provider_list->push_back( |
711 linked_ptr<ExternalProviderInterface>( | 681 std::unique_ptr<ExternalProviderInterface>(new default_apps::Provider( |
712 new default_apps::Provider( | 682 profile, service, |
713 profile, | 683 new ExternalPrefLoader(chrome::DIR_DEFAULT_APPS, |
714 service, | 684 ExternalPrefLoader::NONE, nullptr), |
715 new ExternalPrefLoader(chrome::DIR_DEFAULT_APPS, | 685 Manifest::INTERNAL, Manifest::INTERNAL, |
716 ExternalPrefLoader::NONE, | 686 Extension::FROM_WEBSTORE | Extension::WAS_INSTALLED_BY_DEFAULT))); |
717 NULL), | |
718 Manifest::INTERNAL, | |
719 Manifest::INTERNAL, | |
720 Extension::FROM_WEBSTORE | | |
721 Extension::WAS_INSTALLED_BY_DEFAULT))); | |
722 #endif | 687 #endif |
723 | 688 |
724 std::unique_ptr<ExternalProviderImpl> drive_migration_provider( | 689 std::unique_ptr<ExternalProviderImpl> drive_migration_provider( |
725 new ExternalProviderImpl( | 690 new ExternalProviderImpl( |
726 service, | 691 service, |
727 new ExtensionMigrator(profile, extension_misc::kDriveHostedAppId, | 692 new ExtensionMigrator(profile, extension_misc::kDriveHostedAppId, |
728 extension_misc::kDriveExtensionId), | 693 extension_misc::kDriveExtensionId), |
729 profile, Manifest::EXTERNAL_PREF, Manifest::EXTERNAL_PREF_DOWNLOAD, | 694 profile, Manifest::EXTERNAL_PREF, Manifest::EXTERNAL_PREF_DOWNLOAD, |
730 Extension::FROM_WEBSTORE | Extension::WAS_INSTALLED_BY_DEFAULT)); | 695 Extension::FROM_WEBSTORE | Extension::WAS_INSTALLED_BY_DEFAULT)); |
731 drive_migration_provider->set_auto_acknowledge(true); | 696 drive_migration_provider->set_auto_acknowledge(true); |
732 provider_list->push_back(linked_ptr<ExternalProviderInterface>( | 697 provider_list->push_back(std::move(drive_migration_provider)); |
733 drive_migration_provider.release())); | |
734 } | 698 } |
735 | 699 |
736 provider_list->push_back( | 700 provider_list->push_back( |
737 linked_ptr<ExternalProviderInterface>( | 701 std::unique_ptr<ExternalProviderInterface>(new ExternalProviderImpl( |
738 new ExternalProviderImpl( | 702 service, new ExternalComponentLoader(profile), profile, |
739 service, | 703 Manifest::INVALID_LOCATION, Manifest::EXTERNAL_COMPONENT, |
740 new ExternalComponentLoader(profile), | |
741 profile, | |
742 Manifest::INVALID_LOCATION, | |
743 Manifest::EXTERNAL_COMPONENT, | |
744 Extension::FROM_WEBSTORE | Extension::WAS_INSTALLED_BY_DEFAULT))); | 704 Extension::FROM_WEBSTORE | Extension::WAS_INSTALLED_BY_DEFAULT))); |
745 } | 705 } |
746 | 706 |
747 } // namespace extensions | 707 } // namespace extensions |
OLD | NEW |