Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(5004)

Unified Diff: chrome/browser/extensions/extension_install_prompt.cc

Issue 501273002: Update extension install prompt to reflect withheld permissions (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Removed rogue comment Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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..9e7726d2d0f81b1905903854329174480a25efd7 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"
@@ -172,6 +173,13 @@ gfx::NativeWindow NativeWindowForWebContents(content::WebContents* contents) {
} // namespace
+ExtensionInstallPrompt::Prompt::InstallPromptPermissions::
+ InstallPromptPermissions() {
+}
+ExtensionInstallPrompt::Prompt::InstallPromptPermissions::
+ ~InstallPromptPermissions() {
+}
+
// static
ExtensionInstallPrompt::AutoConfirmForTests
ExtensionInstallPrompt::g_auto_confirm_for_tests = ExtensionInstallPrompt::NONE;
@@ -219,16 +227,41 @@ ExtensionInstallPrompt::Prompt::~Prompt() {
}
void ExtensionInstallPrompt::Prompt::SetPermissions(
- const std::vector<base::string16>& permissions) {
- permissions_ = permissions;
+ const std::vector<base::string16>& permissions,
+ PermissionsType permissions_type) {
+ switch (permissions_type) {
+ case REGULAR_PERMISSIONS:
+ prompt_permissions_.permissions = permissions;
+ break;
+ case WITHHELD_PERMISSIONS:
+ withheld_prompt_permissions_.permissions = permissions;
+ break;
+ case ALL_PERMISSIONS:
+ NOTREACHED();
+ break;
+ }
}
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,
+ PermissionsType permissions_type) {
+ switch (permissions_type) {
Devlin 2014/09/08 16:09:22 Two improvements here: - reduce duplicate code by
gpdavis 2014/09/08 20:07:05 Done.
+ case REGULAR_PERMISSIONS:
+ prompt_permissions_.details = details;
+ prompt_permissions_.is_showing_details.clear();
+ for (size_t i = 0; i < details.size(); ++i)
+ prompt_permissions_.is_showing_details.push_back(false);
+ break;
+ case WITHHELD_PERMISSIONS:
+ withheld_prompt_permissions_.details = details;
+ withheld_prompt_permissions_.is_showing_details.clear();
+ for (size_t i = 0; i < details.size(); ++i)
+ withheld_prompt_permissions_.is_showing_details.push_back(false);
+ break;
+ case ALL_PERMISSIONS:
+ NOTREACHED();
+ break;
+ }
}
void ExtensionInstallPrompt::Prompt::SetIsShowingDetails(
@@ -237,7 +270,11 @@ void ExtensionInstallPrompt::Prompt::SetIsShowingDetails(
bool is_showing_details) {
switch (type) {
case PERMISSIONS_DETAILS:
- is_showing_details_for_permissions_[index] = is_showing_details;
+ prompt_permissions_.is_showing_details[index] = is_showing_details;
+ break;
+ case WITHHELD_PERMISSIONS_DETAILS:
+ withheld_prompt_permissions_.is_showing_details[index] =
+ is_showing_details;
break;
case RETAINED_FILES_DETAILS:
is_showing_details_for_retained_files_ = is_showing_details;
@@ -354,8 +391,17 @@ base::string16 ExtensionInstallPrompt::Prompt::GetAbortButtonLabel() const {
return l10n_util::GetStringUTF16(kAbortButtonIds[type_]);
}
-base::string16 ExtensionInstallPrompt::Prompt::GetPermissionsHeading() const {
- return l10n_util::GetStringUTF16(kPermissionsHeaderIds[type_]);
+base::string16 ExtensionInstallPrompt::Prompt::GetPermissionsHeading(
+ PermissionsType permissions_type) const {
+ switch (permissions_type) {
+ case REGULAR_PERMISSIONS:
+ return l10n_util::GetStringUTF16(kPermissionsHeaderIds[type_]);
+ case WITHHELD_PERMISSIONS:
+ return l10n_util::GetStringUTF16(IDS_EXTENSION_PROMPT_WITHHELD);
+ case ALL_PERMISSIONS:
+ NOTREACHED();
+ return base::string16();
+ }
}
base::string16 ExtensionInstallPrompt::Prompt::GetRetainedFilesHeading() const {
@@ -375,7 +421,9 @@ base::string16 ExtensionInstallPrompt::Prompt::GetRetainedFilesHeading() const {
}
bool ExtensionInstallPrompt::Prompt::ShouldShowPermissions() const {
- return GetPermissionCount() > 0 || type_ == POST_INSTALL_PERMISSIONS_PROMPT;
+ return GetPermissionCount(REGULAR_PERMISSIONS) > 0 ||
+ GetPermissionCount(WITHHELD_PERMISSIONS) > 0 ||
+ type_ == POST_INSTALL_PERMISSIONS_PROMPT;
}
void ExtensionInstallPrompt::Prompt::AppendRatingStars(
@@ -423,32 +471,73 @@ base::string16 ExtensionInstallPrompt::Prompt::GetUserCount() const {
return base::string16();
}
-size_t ExtensionInstallPrompt::Prompt::GetPermissionCount() const {
- return permissions_.size();
+size_t ExtensionInstallPrompt::Prompt::GetPermissionCount(
+ PermissionsType permissions_type) const {
+ switch (permissions_type) {
+ case REGULAR_PERMISSIONS:
+ return prompt_permissions_.permissions.size();
+ case WITHHELD_PERMISSIONS:
+ return withheld_prompt_permissions_.permissions.size();
+ case ALL_PERMISSIONS:
+ return prompt_permissions_.permissions.size() +
+ withheld_prompt_permissions_.permissions.size();
+ }
}
-size_t ExtensionInstallPrompt::Prompt::GetPermissionsDetailsCount() const {
- return details_.size();
+size_t ExtensionInstallPrompt::Prompt::GetPermissionsDetailsCount(
+ PermissionsType permissions_type) const {
+ switch (permissions_type) {
+ case REGULAR_PERMISSIONS:
+ return prompt_permissions_.details.size();
+ case WITHHELD_PERMISSIONS:
+ return withheld_prompt_permissions_.details.size();
+ case ALL_PERMISSIONS:
+ return prompt_permissions_.details.size() +
+ withheld_prompt_permissions_.details.size();
+ }
}
-base::string16 ExtensionInstallPrompt::Prompt::GetPermission(size_t index)
- const {
- CHECK_LT(index, permissions_.size());
- return permissions_[index];
+base::string16 ExtensionInstallPrompt::Prompt::GetPermission(
+ size_t index,
+ PermissionsType permissions_type) const {
+ switch (permissions_type) {
+ case REGULAR_PERMISSIONS:
+ CHECK_LT(index, prompt_permissions_.permissions.size());
+ return prompt_permissions_.permissions[index];
+ case WITHHELD_PERMISSIONS:
+ CHECK_LT(index, withheld_prompt_permissions_.permissions.size());
+ return withheld_prompt_permissions_.permissions[index];
+ case ALL_PERMISSIONS:
+ NOTREACHED();
Devlin 2014/09/08 16:09:22 Actually, let's even make a InstallPromptPermissi
gpdavis 2014/09/08 20:07:05 I like this idea, but we've got a const problem.
Devlin 2014/09/09 15:53:21 Hmm... Lame. I think I might opt for still making
gpdavis 2014/09/09 17:32:41 The file is six lines longer with the two helper m
Devlin 2014/09/09 17:46:22 I say go for it. Readability wins out.
gpdavis 2014/09/09 20:28:15 Sounds good!
+ return base::string16();
+ }
}
base::string16 ExtensionInstallPrompt::Prompt::GetPermissionsDetails(
- size_t index) const {
- CHECK_LT(index, details_.size());
- return details_[index];
+ size_t index,
+ PermissionsType permissions_type) const {
+ switch (permissions_type) {
+ case REGULAR_PERMISSIONS:
+ CHECK_LT(index, prompt_permissions_.details.size());
+ return prompt_permissions_.details[index];
+ case WITHHELD_PERMISSIONS:
+ CHECK_LT(index, withheld_prompt_permissions_.details.size());
+ return withheld_prompt_permissions_.details[index];
+ case ALL_PERMISSIONS:
+ NOTREACHED();
+ return base::string16();
+ }
}
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];
+ CHECK_LT(index, prompt_permissions_.is_showing_details.size());
+ return prompt_permissions_.is_showing_details[index];
+ case WITHHELD_PERMISSIONS_DETAILS:
+ CHECK_LT(index, withheld_prompt_permissions_.is_showing_details.size());
+ return withheld_prompt_permissions_.is_showing_details[index];
case RETAINED_FILES_DETAILS:
return is_showing_details_for_retained_files_;
}
@@ -543,7 +632,7 @@ void ExtensionInstallPrompt::ConfirmBundleInstall(
const PermissionSet* permissions) {
DCHECK(ui_loop_ == base::MessageLoop::current());
bundle_ = bundle;
- permissions_ = permissions;
+ custom_permissions_ = permissions;
delegate_ = bundle;
prompt_ = new Prompt(BUNDLE_INSTALL_PROMPT);
@@ -557,7 +646,6 @@ void ExtensionInstallPrompt::ConfirmStandaloneInstall(
scoped_refptr<Prompt> prompt) {
DCHECK(ui_loop_ == base::MessageLoop::current());
extension_ = extension;
- permissions_ = extension->permissions_data()->active_permissions();
delegate_ = delegate;
prompt_ = prompt;
@@ -583,7 +671,6 @@ void ExtensionInstallPrompt::ConfirmInstall(
const ShowDialogCallback& show_dialog_callback) {
DCHECK(ui_loop_ == base::MessageLoop::current());
extension_ = extension;
- permissions_ = extension->permissions_data()->active_permissions();
delegate_ = delegate;
prompt_ = new Prompt(INSTALL_PROMPT);
show_dialog_callback_ = show_dialog_callback;
@@ -610,7 +697,6 @@ void ExtensionInstallPrompt::ConfirmReEnable(Delegate* delegate,
const Extension* extension) {
DCHECK(ui_loop_ == base::MessageLoop::current());
extension_ = extension;
- permissions_ = extension->permissions_data()->active_permissions();
delegate_ = delegate;
bool is_remote_install =
install_ui_->profile() &&
@@ -638,7 +724,6 @@ void ExtensionInstallPrompt::ConfirmExternalInstall(
scoped_refptr<Prompt> prompt) {
DCHECK(ui_loop_ == base::MessageLoop::current());
extension_ = extension;
- permissions_ = extension->permissions_data()->active_permissions();
delegate_ = delegate;
prompt_ = prompt;
show_dialog_callback_ = show_dialog_callback;
@@ -652,7 +737,7 @@ void ExtensionInstallPrompt::ConfirmPermissions(
const PermissionSet* permissions) {
DCHECK(ui_loop_ == base::MessageLoop::current());
extension_ = extension;
- permissions_ = permissions;
+ custom_permissions_ = permissions;
delegate_ = delegate;
prompt_ = new Prompt(PERMISSIONS_PROMPT);
@@ -665,7 +750,6 @@ void ExtensionInstallPrompt::ReviewPermissions(
const std::vector<base::FilePath>& retained_file_paths) {
DCHECK(ui_loop_ == base::MessageLoop::current());
extension_ = extension;
- permissions_ = extension->permissions_data()->active_permissions();
prompt_ = new Prompt(POST_INSTALL_PERMISSIONS_PROMPT);
prompt_->set_retained_files(retained_file_paths);
delegate_ = delegate;
@@ -739,7 +823,20 @@ void ExtensionInstallPrompt::ShowConfirmation() {
else
prompt_->set_experiment(ExtensionInstallPromptExperiment::ControlGroup());
- if (permissions_.get() &&
+ scoped_refptr<const PermissionSet> permissions_to_display;
+ if (custom_permissions_.get()) {
+ permissions_to_display = custom_permissions_;
+ } else if (extension_) {
+ // Initialize permissions if they have not already been set so that
+ // withheld permissions don't end up in the install prompt.
+ extensions::PermissionsUpdater(install_ui_->profile())
+ .InitializePermissions(
+ extension_, extensions::PermissionsUpdater::INIT_FLAG_TRANSIENT);
+ permissions_to_display =
+ extension_->permissions_data()->active_permissions();
+ }
+
+ if (permissions_to_display.get() &&
(!extension_ ||
!extensions::PermissionsData::ShouldSkipPermissionWarnings(
extension_->id()))) {
@@ -747,10 +844,23 @@ void ExtensionInstallPrompt::ShowConfirmation() {
extension_ ? extension_->GetType() : Manifest::TYPE_UNKNOWN;
const extensions::PermissionMessageProvider* message_provider =
extensions::PermissionMessageProvider::Get();
- prompt_->SetPermissions(
- message_provider->GetWarningMessages(permissions_.get(), type));
- prompt_->SetPermissionsDetails(
- message_provider->GetWarningMessagesDetails(permissions_.get(), type));
+ prompt_->SetPermissions(message_provider->GetWarningMessages(
+ permissions_to_display.get(), type),
+ REGULAR_PERMISSIONS);
+ prompt_->SetPermissionsDetails(message_provider->GetWarningMessagesDetails(
+ permissions_to_display.get(), type),
+ REGULAR_PERMISSIONS);
+
+ scoped_refptr<const extensions::PermissionSet> withheld =
+ extension_->permissions_data()->withheld_permissions();
+ if (!withheld->IsEmpty()) {
+ prompt_->SetPermissions(
+ message_provider->GetWarningMessages(withheld.get(), type),
+ PermissionsType::WITHHELD_PERMISSIONS);
+ prompt_->SetPermissionsDetails(
+ message_provider->GetWarningMessagesDetails(withheld.get(), type),
+ PermissionsType::WITHHELD_PERMISSIONS);
+ }
}
switch (prompt_->type()) {

Powered by Google App Engine
This is Rietveld 408576698