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/extension_install_prompt.h" | 5 #include "chrome/browser/extensions/extension_install_prompt.h" |
6 | 6 |
7 #include "base/location.h" | 7 #include "base/location.h" |
8 #include "base/strings/string_number_conversions.h" | 8 #include "base/strings/string_number_conversions.h" |
9 #include "base/strings/string_util.h" | 9 #include "base/strings/string_util.h" |
10 #include "base/strings/utf_string_conversions.h" | 10 #include "base/strings/utf_string_conversions.h" |
(...skipping 605 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
616 new ExtensionInstallPromptShowParams(profile, native_window)), | 616 new ExtensionInstallPromptShowParams(profile, native_window)), |
617 delegate_(NULL) { | 617 delegate_(NULL) { |
618 } | 618 } |
619 | 619 |
620 ExtensionInstallPrompt::~ExtensionInstallPrompt() { | 620 ExtensionInstallPrompt::~ExtensionInstallPrompt() { |
621 } | 621 } |
622 | 622 |
623 void ExtensionInstallPrompt::ConfirmBundleInstall( | 623 void ExtensionInstallPrompt::ConfirmBundleInstall( |
624 extensions::BundleInstaller* bundle, | 624 extensions::BundleInstaller* bundle, |
625 const SkBitmap* icon, | 625 const SkBitmap* icon, |
626 const PermissionSet* permissions) { | 626 scoped_ptr<const PermissionSet> permissions) { |
627 DCHECK(ui_loop_ == base::MessageLoop::current()); | 627 DCHECK(ui_loop_ == base::MessageLoop::current()); |
628 bundle_ = bundle; | 628 bundle_ = bundle; |
629 custom_permissions_ = permissions; | 629 custom_permissions_ = permissions.Pass(); |
630 delegate_ = bundle; | 630 delegate_ = bundle; |
631 prompt_ = new Prompt(BUNDLE_INSTALL_PROMPT); | 631 prompt_ = new Prompt(BUNDLE_INSTALL_PROMPT); |
632 | 632 |
633 SetIcon(icon); | 633 SetIcon(icon); |
634 ShowConfirmation(); | 634 ShowConfirmation(); |
635 } | 635 } |
636 | 636 |
637 void ExtensionInstallPrompt::ConfirmPermissionsForDelegatedBundleInstall( | 637 void ExtensionInstallPrompt::ConfirmPermissionsForDelegatedBundleInstall( |
638 extensions::BundleInstaller* bundle, | 638 extensions::BundleInstaller* bundle, |
639 const std::string& delegated_username, | 639 const std::string& delegated_username, |
640 const SkBitmap* icon, | 640 const SkBitmap* icon, |
641 const extensions::PermissionSet* permissions) { | 641 scoped_ptr<const extensions::PermissionSet> permissions) { |
642 DCHECK(ui_loop_ == base::MessageLoop::current()); | 642 DCHECK(ui_loop_ == base::MessageLoop::current()); |
643 bundle_ = bundle; | 643 bundle_ = bundle; |
644 delegated_username_ = delegated_username; | 644 delegated_username_ = delegated_username; |
645 custom_permissions_ = permissions; | 645 custom_permissions_ = permissions.Pass(); |
646 delegate_ = bundle; | 646 delegate_ = bundle; |
647 prompt_ = new Prompt(DELEGATED_BUNDLE_PERMISSIONS_PROMPT); | 647 prompt_ = new Prompt(DELEGATED_BUNDLE_PERMISSIONS_PROMPT); |
648 | 648 |
649 SetIcon(icon); | 649 SetIcon(icon); |
650 ShowConfirmation(); | 650 ShowConfirmation(); |
651 } | 651 } |
652 | 652 |
653 void ExtensionInstallPrompt::ConfirmStandaloneInstall( | 653 void ExtensionInstallPrompt::ConfirmStandaloneInstall( |
654 Delegate* delegate, | 654 Delegate* delegate, |
655 const Extension* extension, | 655 const Extension* extension, |
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
752 delegate_ = delegate; | 752 delegate_ = delegate; |
753 prompt_ = prompt; | 753 prompt_ = prompt; |
754 show_dialog_callback_ = show_dialog_callback; | 754 show_dialog_callback_ = show_dialog_callback; |
755 | 755 |
756 LoadImageIfNeeded(); | 756 LoadImageIfNeeded(); |
757 } | 757 } |
758 | 758 |
759 void ExtensionInstallPrompt::ConfirmPermissions( | 759 void ExtensionInstallPrompt::ConfirmPermissions( |
760 Delegate* delegate, | 760 Delegate* delegate, |
761 const Extension* extension, | 761 const Extension* extension, |
762 const PermissionSet* permissions) { | 762 scoped_ptr<const PermissionSet> permissions) { |
763 DCHECK(ui_loop_ == base::MessageLoop::current()); | 763 DCHECK(ui_loop_ == base::MessageLoop::current()); |
764 extension_ = extension; | 764 extension_ = extension; |
765 custom_permissions_ = permissions; | 765 custom_permissions_ = permissions.Pass(); |
766 delegate_ = delegate; | 766 delegate_ = delegate; |
767 prompt_ = new Prompt(PERMISSIONS_PROMPT); | 767 prompt_ = new Prompt(PERMISSIONS_PROMPT); |
768 | 768 |
769 LoadImageIfNeeded(); | 769 LoadImageIfNeeded(); |
770 } | 770 } |
771 | 771 |
772 void ExtensionInstallPrompt::ReviewPermissions( | 772 void ExtensionInstallPrompt::ReviewPermissions( |
773 Delegate* delegate, | 773 Delegate* delegate, |
774 const Extension* extension, | 774 const Extension* extension, |
775 const std::vector<base::FilePath>& retained_file_paths, | 775 const std::vector<base::FilePath>& retained_file_paths, |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
838 extensions::ImageLoader::ImageRepresentation::NEVER_RESIZE, | 838 extensions::ImageLoader::ImageRepresentation::NEVER_RESIZE, |
839 gfx::Size(), | 839 gfx::Size(), |
840 ui::SCALE_FACTOR_100P)); | 840 ui::SCALE_FACTOR_100P)); |
841 loader->LoadImagesAsync( | 841 loader->LoadImagesAsync( |
842 extension_, | 842 extension_, |
843 images_list, | 843 images_list, |
844 base::Bind(&ExtensionInstallPrompt::OnImageLoaded, AsWeakPtr())); | 844 base::Bind(&ExtensionInstallPrompt::OnImageLoaded, AsWeakPtr())); |
845 } | 845 } |
846 | 846 |
847 void ExtensionInstallPrompt::ShowConfirmation() { | 847 void ExtensionInstallPrompt::ShowConfirmation() { |
848 scoped_refptr<const PermissionSet> permissions_to_display; | 848 scoped_ptr<const PermissionSet> permissions_wrapper; |
| 849 const PermissionSet* permissions_to_display = nullptr; |
849 if (custom_permissions_.get()) { | 850 if (custom_permissions_.get()) { |
850 permissions_to_display = custom_permissions_; | 851 permissions_to_display = custom_permissions_.get(); |
851 } else if (extension_) { | 852 } else if (extension_) { |
852 // Initialize permissions if they have not already been set so that | 853 // Initialize permissions if they have not already been set so that |
853 // withheld permissions are displayed properly in the install prompt. | 854 // withheld permissions are displayed properly in the install prompt. |
854 extensions::PermissionsUpdater( | 855 extensions::PermissionsUpdater( |
855 profile_, extensions::PermissionsUpdater::INIT_FLAG_TRANSIENT) | 856 profile_, extensions::PermissionsUpdater::INIT_FLAG_TRANSIENT) |
856 .InitializePermissions(extension_); | 857 .InitializePermissions(extension_); |
857 permissions_to_display = | 858 permissions_to_display = |
858 extension_->permissions_data()->active_permissions(); | 859 extension_->permissions_data()->active_permissions(); |
859 // For delegated installs, all optional permissions are pre-approved by the | 860 // For delegated installs, all optional permissions are pre-approved by the |
860 // person who triggers the install, so add them to the list. | 861 // person who triggers the install, so add them to the list. |
861 if (prompt_->type() == DELEGATED_PERMISSIONS_PROMPT || | 862 if (prompt_->type() == DELEGATED_PERMISSIONS_PROMPT || |
862 prompt_->type() == DELEGATED_BUNDLE_PERMISSIONS_PROMPT) { | 863 prompt_->type() == DELEGATED_BUNDLE_PERMISSIONS_PROMPT) { |
863 scoped_refptr<const PermissionSet> optional_permissions = | 864 const PermissionSet* optional_permissions = |
864 extensions::PermissionsParser::GetOptionalPermissions(extension_); | 865 extensions::PermissionsParser::GetOptionalPermissions(extension_); |
865 permissions_to_display = PermissionSet::CreateUnion( | 866 permissions_wrapper = PermissionSet::CreateUnion(*permissions_to_display, |
866 *permissions_to_display, *optional_permissions); | 867 *optional_permissions); |
| 868 permissions_to_display = permissions_wrapper.get(); |
867 } | 869 } |
868 } | 870 } |
869 | 871 |
870 if (permissions_to_display.get() && | 872 if (permissions_to_display && |
871 (!extension_ || | 873 (!extension_ || |
872 !extensions::PermissionsData::ShouldSkipPermissionWarnings( | 874 !extensions::PermissionsData::ShouldSkipPermissionWarnings( |
873 extension_->id()))) { | 875 extension_->id()))) { |
874 Manifest::Type type = | 876 Manifest::Type type = |
875 extension_ ? extension_->GetType() : Manifest::TYPE_UNKNOWN; | 877 extension_ ? extension_->GetType() : Manifest::TYPE_UNKNOWN; |
876 const extensions::PermissionMessageProvider* message_provider = | 878 const extensions::PermissionMessageProvider* message_provider = |
877 extensions::PermissionMessageProvider::Get(); | 879 extensions::PermissionMessageProvider::Get(); |
878 | 880 |
879 prompt_->SetPermissions(message_provider->GetPermissionMessages( | 881 prompt_->SetPermissions(message_provider->GetPermissionMessages( |
880 message_provider->GetAllPermissionIDs( | 882 message_provider->GetAllPermissionIDs( |
881 permissions_to_display.get(), type)), | 883 permissions_to_display, type)), |
882 REGULAR_PERMISSIONS); | 884 REGULAR_PERMISSIONS); |
883 | 885 |
884 scoped_refptr<const extensions::PermissionSet> withheld = | 886 const PermissionSet* withheld = |
885 extension_ ? extension_->permissions_data()->withheld_permissions() | 887 extension_ ? extension_->permissions_data()->withheld_permissions() |
886 : nullptr; | 888 : nullptr; |
887 if (withheld && !withheld->IsEmpty()) { | 889 if (withheld && !withheld->IsEmpty()) { |
888 prompt_->SetPermissions( | 890 prompt_->SetPermissions( |
889 message_provider->GetPermissionMessages( | 891 message_provider->GetPermissionMessages( |
890 message_provider->GetAllPermissionIDs(withheld.get(), type)), | 892 message_provider->GetAllPermissionIDs(withheld, type)), |
891 WITHHELD_PERMISSIONS); | 893 WITHHELD_PERMISSIONS); |
892 } | 894 } |
893 } | 895 } |
894 | 896 |
895 switch (prompt_->type()) { | 897 switch (prompt_->type()) { |
896 case PERMISSIONS_PROMPT: | 898 case PERMISSIONS_PROMPT: |
897 case RE_ENABLE_PROMPT: | 899 case RE_ENABLE_PROMPT: |
898 case INLINE_INSTALL_PROMPT: | 900 case INLINE_INSTALL_PROMPT: |
899 case EXTERNAL_INSTALL_PROMPT: | 901 case EXTERNAL_INSTALL_PROMPT: |
900 case INSTALL_PROMPT: | 902 case INSTALL_PROMPT: |
(...skipping 25 matching lines...) Expand all Loading... |
926 if (show_params_->WasParentDestroyed()) { | 928 if (show_params_->WasParentDestroyed()) { |
927 delegate_->InstallUIAbort(false); | 929 delegate_->InstallUIAbort(false); |
928 return; | 930 return; |
929 } | 931 } |
930 | 932 |
931 if (show_dialog_callback_.is_null()) | 933 if (show_dialog_callback_.is_null()) |
932 GetDefaultShowDialogCallback().Run(show_params_.get(), delegate_, prompt_); | 934 GetDefaultShowDialogCallback().Run(show_params_.get(), delegate_, prompt_); |
933 else | 935 else |
934 show_dialog_callback_.Run(show_params_.get(), delegate_, prompt_); | 936 show_dialog_callback_.Run(show_params_.get(), delegate_, prompt_); |
935 } | 937 } |
OLD | NEW |