Index: chrome/browser/extensions/extension_install_prompt.cc |
diff --git a/chrome/browser/extensions/extension_install_prompt.cc b/chrome/browser/extensions/extension_install_prompt.cc |
index dec1aa54f3b756b3d1ba147b74b8179e6c912cf0..c0810241116cb5e0d8572b5207c596169e58c435 100644 |
--- a/chrome/browser/extensions/extension_install_prompt.cc |
+++ b/chrome/browser/extensions/extension_install_prompt.cc |
@@ -16,6 +16,7 @@ |
#include "chrome/browser/extensions/bundle_installer.h" |
#include "chrome/browser/extensions/extension_install_ui.h" |
#include "chrome/browser/extensions/extension_util.h" |
+#include "chrome/browser/extensions/permissions_updater.h" |
#include "chrome/browser/profiles/profile.h" |
#include "chrome/browser/ui/browser.h" |
#include "chrome/browser/ui/browser_window.h" |
@@ -219,16 +220,28 @@ ExtensionInstallPrompt::Prompt::~Prompt() { |
} |
void ExtensionInstallPrompt::Prompt::SetPermissions( |
- const std::vector<base::string16>& permissions) { |
- permissions_ = permissions; |
+ const std::vector<base::string16>& permissions, |
+ bool withheld) { |
gpdavis
2014/08/29 01:12:16
Figured I'd add a parameter to these two methods,
|
+ if (withheld) |
+ withheld_permissions_ = permissions; |
+ else |
+ permissions_ = permissions; |
} |
void ExtensionInstallPrompt::Prompt::SetPermissionsDetails( |
- const std::vector<base::string16>& details) { |
- details_ = details; |
- is_showing_details_for_permissions_.clear(); |
- for (size_t i = 0; i < details.size(); ++i) |
- is_showing_details_for_permissions_.push_back(false); |
+ const std::vector<base::string16>& details, |
+ bool withheld) { |
+ if (withheld) { |
+ withheld_details_ = details; |
+ is_showing_details_for_withheld_permissions_.clear(); |
+ for (size_t i = 0; i < details.size(); ++i) |
+ is_showing_details_for_withheld_permissions_.push_back(false); |
+ } else { |
+ details_ = details; |
+ is_showing_details_for_permissions_.clear(); |
+ for (size_t i = 0; i < details.size(); ++i) |
+ is_showing_details_for_permissions_.push_back(false); |
+ } |
} |
void ExtensionInstallPrompt::Prompt::SetIsShowingDetails( |
@@ -239,6 +252,9 @@ void ExtensionInstallPrompt::Prompt::SetIsShowingDetails( |
case PERMISSIONS_DETAILS: |
is_showing_details_for_permissions_[index] = is_showing_details; |
break; |
+ case WITHHELD_PERMISSIONS_DETAILS: |
gpdavis
2014/08/29 01:12:16
This is necessary for the cocoa implementation, wh
|
+ is_showing_details_for_withheld_permissions_[index] = is_showing_details; |
+ break; |
case RETAINED_FILES_DETAILS: |
is_showing_details_for_retained_files_ = is_showing_details; |
break; |
@@ -301,6 +317,10 @@ base::string16 ExtensionInstallPrompt::Prompt::GetHeading() const { |
} |
} |
+base::string16 ExtensionInstallPrompt::Prompt::GetWithheldHeading() const { |
+ return l10n_util::GetStringUTF16(IDS_EXTENSION_PROMPT_WITHHELD); |
+} |
+ |
int ExtensionInstallPrompt::Prompt::GetDialogButtons() const { |
if (type_ == POST_INSTALL_PERMISSIONS_PROMPT && |
ShouldDisplayRevokeFilesButton()) { |
@@ -443,12 +463,36 @@ base::string16 ExtensionInstallPrompt::Prompt::GetPermissionsDetails( |
return details_[index]; |
} |
+size_t ExtensionInstallPrompt::Prompt::GetWithheldPermissionCount() const { |
+ return withheld_permissions_.size(); |
+} |
+ |
+size_t ExtensionInstallPrompt::Prompt::GetWithheldPermissionsDetailsCount() |
+ const { |
+ return withheld_details_.size(); |
+} |
+ |
+base::string16 ExtensionInstallPrompt::Prompt::GetWithheldPermission( |
+ size_t index) const { |
+ CHECK_LT(index, withheld_permissions_.size()); |
+ return withheld_permissions_[index]; |
+} |
+ |
+base::string16 ExtensionInstallPrompt::Prompt::GetWithheldPermissionsDetails( |
+ size_t index) const { |
+ CHECK_LT(index, withheld_details_.size()); |
+ return withheld_details_[index]; |
+} |
+ |
bool ExtensionInstallPrompt::Prompt::GetIsShowingDetails( |
DetailsType type, size_t index) const { |
switch (type) { |
case PERMISSIONS_DETAILS: |
CHECK_LT(index, is_showing_details_for_permissions_.size()); |
return is_showing_details_for_permissions_[index]; |
+ case WITHHELD_PERMISSIONS_DETAILS: |
+ CHECK_LT(index, is_showing_details_for_withheld_permissions_.size()); |
+ return is_showing_details_for_withheld_permissions_[index]; |
case RETAINED_FILES_DETAILS: |
return is_showing_details_for_retained_files_; |
} |
@@ -747,10 +791,32 @@ void ExtensionInstallPrompt::ShowConfirmation() { |
extension_ ? extension_->GetType() : Manifest::TYPE_UNKNOWN; |
const extensions::PermissionMessageProvider* message_provider = |
extensions::PermissionMessageProvider::Get(); |
+ |
+ // Initialize permissions so that withheld permissions don't end up in the |
+ // install prompt. |
+ if (extension_) { |
+ extensions::PermissionsUpdater(install_ui_->profile()) |
+ .InitializePermissions( |
+ extension_, extensions::PermissionsUpdater::INIT_FLAG_TRANSIENT); |
+ permissions_ = extension_->permissions_data()->active_permissions(); |
+ } |
prompt_->SetPermissions( |
- message_provider->GetWarningMessages(permissions_.get(), type)); |
+ message_provider->GetWarningMessages(permissions_.get(), type), |
+ false); // withheld |
prompt_->SetPermissionsDetails( |
- message_provider->GetWarningMessagesDetails(permissions_.get(), type)); |
+ message_provider->GetWarningMessagesDetails(permissions_.get(), type), |
+ false); // withheld |
+ |
+ scoped_refptr<const extensions::PermissionSet> withheld = |
+ extension_->permissions_data()->withheld_permissions(); |
+ if (!withheld->IsEmpty()) { |
+ prompt_->SetPermissions( |
+ message_provider->GetWarningMessages(withheld.get(), type), |
+ true); // withheld |
+ prompt_->SetPermissionsDetails( |
+ message_provider->GetWarningMessagesDetails(withheld.get(), type), |
+ true); // withheld |
+ } |
} |
switch (prompt_->type()) { |