Commit d6e136ad authored by Devlin Cronin's avatar Devlin Cronin Committed by Commit Bot

[Extensions] Remove withheld permissions from install prompt

We no longer need to display withheld permissions in the
extension install prompt, even with the runtime host permissions
feature enabled. Clean up the relevant code.

Bug: 841099

Change-Id: If295d36859f8664928c83923a010057f2fb4d1c1
Reviewed-on: https://chromium-review.googlesource.com/1053178Reviewed-by: default avatarAvi Drissman <avi@chromium.org>
Reviewed-by: default avatarScott Violet <sky@chromium.org>
Reviewed-by: default avatarKaran Bhatia <karandeepb@chromium.org>
Commit-Queue: Devlin <rdevlin.cronin@chromium.org>
Cr-Commit-Position: refs/heads/master@{#558882}
parent cba49619
...@@ -3459,9 +3459,6 @@ are declared in build/common.gypi. ...@@ -3459,9 +3459,6 @@ are declared in build/common.gypi.
<message name="IDS_EXTENSION_PROMPT_CAN_ACCESS" desc="Second line in the content area of the extension or app permissions view dialog. Note that the exact wording is important. This should mean that the extension _can now_ access the listed privileges, because it has already been installed. This message appeared because the user must approve new permissions of the extension or app."> <message name="IDS_EXTENSION_PROMPT_CAN_ACCESS" desc="Second line in the content area of the extension or app permissions view dialog. Note that the exact wording is important. This should mean that the extension _can now_ access the listed privileges, because it has already been installed. This message appeared because the user must approve new permissions of the extension or app.">
It can: It can:
</message> </message>
<message name="IDS_EXTENSION_PROMPT_WITHHELD" desc="Header for withheld permissions warning on extension install.">
Warning: You've enabled the --scripts-require-action flag on this computer, which limits the capabilities of this extension. However, other devices may not support this flag or have it enabled. On these devices, this extension can also:
</message>
<message name="IDS_EXTENSION_NO_SPECIAL_PERMISSIONS" desc="Shown when the app/extension requires no special permission"> <message name="IDS_EXTENSION_NO_SPECIAL_PERMISSIONS" desc="Shown when the app/extension requires no special permission">
Has no special permissions. Has no special permissions.
</message> </message>
......
...@@ -150,8 +150,7 @@ bool PublicSessionPermissionHelper::HandlePermissionRequestImpl( ...@@ -150,8 +150,7 @@ bool PublicSessionPermissionHelper::HandlePermissionRequestImpl(
messages.push_back(PermissionMessage( messages.push_back(PermissionMessage(
l10n_util::GetStringUTF16(IDS_EXTENSION_PROMPT_WARNING_CURRENT_HOST), l10n_util::GetStringUTF16(IDS_EXTENSION_PROMPT_WARNING_CURRENT_HOST),
extensions::PermissionIDSet())); extensions::PermissionIDSet()));
permissions_prompt->AddPermissions( permissions_prompt->AddPermissions(messages);
messages, ExtensionInstallPrompt::REGULAR_PERMISSIONS);
} }
// This Unretained is safe because the lifetime of this object is until // This Unretained is safe because the lifetime of this object is until
......
...@@ -131,13 +131,9 @@ ExtensionInstallPrompt::Prompt::~Prompt() { ...@@ -131,13 +131,9 @@ ExtensionInstallPrompt::Prompt::~Prompt() {
} }
void ExtensionInstallPrompt::Prompt::AddPermissions( void ExtensionInstallPrompt::Prompt::AddPermissions(
const PermissionMessages& permissions, const PermissionMessages& permissions) {
PermissionsType permissions_type) {
InstallPromptPermissions& install_permissions =
GetPermissionsForType(permissions_type);
for (const PermissionMessage& msg : permissions) { for (const PermissionMessage& msg : permissions) {
install_permissions.permissions.push_back(msg.message()); prompt_permissions_.permissions.push_back(msg.message());
// Add a dash to the front of each permission detail. // Add a dash to the front of each permission detail.
base::string16 details; base::string16 details;
if (!msg.submessages().empty()) { if (!msg.submessages().empty()) {
...@@ -150,8 +146,8 @@ void ExtensionInstallPrompt::Prompt::AddPermissions( ...@@ -150,8 +146,8 @@ void ExtensionInstallPrompt::Prompt::AddPermissions(
details = base::JoinString(detail_lines_with_bullets, details = base::JoinString(detail_lines_with_bullets,
base::ASCIIToUTF16("\n")); base::ASCIIToUTF16("\n"));
} }
install_permissions.details.push_back(details); prompt_permissions_.details.push_back(details);
install_permissions.is_showing_details.push_back(false); prompt_permissions_.is_showing_details.push_back(false);
} }
} }
...@@ -163,10 +159,6 @@ void ExtensionInstallPrompt::Prompt::SetIsShowingDetails( ...@@ -163,10 +159,6 @@ void ExtensionInstallPrompt::Prompt::SetIsShowingDetails(
case PERMISSIONS_DETAILS: case PERMISSIONS_DETAILS:
prompt_permissions_.is_showing_details[index] = is_showing_details; prompt_permissions_.is_showing_details[index] = is_showing_details;
break; break;
case WITHHELD_PERMISSIONS_DETAILS:
withheld_prompt_permissions_.is_showing_details[index] =
is_showing_details;
break;
case RETAINED_FILES_DETAILS: case RETAINED_FILES_DETAILS:
is_showing_details_for_retained_files_ = is_showing_details; is_showing_details_for_retained_files_ = is_showing_details;
break; break;
...@@ -333,43 +325,31 @@ base::string16 ExtensionInstallPrompt::Prompt::GetAbortButtonLabel() const { ...@@ -333,43 +325,31 @@ base::string16 ExtensionInstallPrompt::Prompt::GetAbortButtonLabel() const {
return l10n_util::GetStringUTF16(id); return l10n_util::GetStringUTF16(id);
} }
base::string16 ExtensionInstallPrompt::Prompt::GetPermissionsHeading( base::string16 ExtensionInstallPrompt::Prompt::GetPermissionsHeading() const {
PermissionsType permissions_type) const { int id = -1;
switch (permissions_type) { switch (type_) {
case REGULAR_PERMISSIONS: { case INSTALL_PROMPT:
int id = -1; case INLINE_INSTALL_PROMPT:
switch (type_) { case EXTERNAL_INSTALL_PROMPT:
case INSTALL_PROMPT: case REMOTE_INSTALL_PROMPT:
case INLINE_INSTALL_PROMPT: case DELEGATED_PERMISSIONS_PROMPT:
case EXTERNAL_INSTALL_PROMPT: id = IDS_EXTENSION_PROMPT_WILL_HAVE_ACCESS_TO;
case REMOTE_INSTALL_PROMPT: break;
case DELEGATED_PERMISSIONS_PROMPT: case RE_ENABLE_PROMPT:
id = IDS_EXTENSION_PROMPT_WILL_HAVE_ACCESS_TO; id = IDS_EXTENSION_PROMPT_WILL_NOW_HAVE_ACCESS_TO;
break; break;
case RE_ENABLE_PROMPT: case PERMISSIONS_PROMPT:
id = IDS_EXTENSION_PROMPT_WILL_NOW_HAVE_ACCESS_TO; id = IDS_EXTENSION_PROMPT_WANTS_ACCESS_TO;
break; break;
case PERMISSIONS_PROMPT: case POST_INSTALL_PERMISSIONS_PROMPT:
id = IDS_EXTENSION_PROMPT_WANTS_ACCESS_TO; case REPAIR_PROMPT:
break; id = IDS_EXTENSION_PROMPT_CAN_ACCESS;
case POST_INSTALL_PERMISSIONS_PROMPT: break;
case REPAIR_PROMPT: case UNSET_PROMPT_TYPE:
id = IDS_EXTENSION_PROMPT_CAN_ACCESS; case NUM_PROMPT_TYPES:
break;
case UNSET_PROMPT_TYPE:
case NUM_PROMPT_TYPES:
NOTREACHED();
}
return l10n_util::GetStringUTF16(id);
}
case WITHHELD_PERMISSIONS:
return l10n_util::GetStringUTF16(IDS_EXTENSION_PROMPT_WITHHELD);
case ALL_PERMISSIONS:
NOTREACHED(); NOTREACHED();
return base::string16();
} }
NOTREACHED(); return l10n_util::GetStringUTF16(id);
return base::string16();
} }
base::string16 ExtensionInstallPrompt::Prompt::GetRetainedFilesHeading() const { base::string16 ExtensionInstallPrompt::Prompt::GetRetainedFilesHeading() const {
...@@ -384,8 +364,7 @@ base::string16 ExtensionInstallPrompt::Prompt::GetRetainedDevicesHeading() ...@@ -384,8 +364,7 @@ base::string16 ExtensionInstallPrompt::Prompt::GetRetainedDevicesHeading()
} }
bool ExtensionInstallPrompt::Prompt::ShouldShowPermissions() const { bool ExtensionInstallPrompt::Prompt::ShouldShowPermissions() const {
return GetPermissionCount(ALL_PERMISSIONS) > 0 || return GetPermissionCount() > 0 || type_ == POST_INSTALL_PERMISSIONS_PROMPT;
type_ == POST_INSTALL_PERMISSIONS_PROMPT;
} }
bool ExtensionInstallPrompt::Prompt::ShouldUseTabModalDialog() const { bool ExtensionInstallPrompt::Prompt::ShouldUseTabModalDialog() const {
...@@ -440,54 +419,24 @@ base::string16 ExtensionInstallPrompt::Prompt::GetUserCount() const { ...@@ -440,54 +419,24 @@ base::string16 ExtensionInstallPrompt::Prompt::GetUserCount() const {
return base::string16(); return base::string16();
} }
size_t ExtensionInstallPrompt::Prompt::GetPermissionCount( size_t ExtensionInstallPrompt::Prompt::GetPermissionCount() const {
PermissionsType permissions_type) const { return prompt_permissions_.permissions.size();
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();
default:
NOTREACHED();
return 0u;
}
} }
size_t ExtensionInstallPrompt::Prompt::GetPermissionsDetailsCount( size_t ExtensionInstallPrompt::Prompt::GetPermissionsDetailsCount() const {
PermissionsType permissions_type) const { return prompt_permissions_.details.size();
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();
default:
NOTREACHED();
return 0u;
}
} }
base::string16 ExtensionInstallPrompt::Prompt::GetPermission( base::string16 ExtensionInstallPrompt::Prompt::GetPermission(
size_t index, size_t index) const {
PermissionsType permissions_type) const { CHECK_LT(index, prompt_permissions_.permissions.size());
const InstallPromptPermissions& install_permissions = return prompt_permissions_.permissions[index];
GetPermissionsForType(permissions_type);
CHECK_LT(index, install_permissions.permissions.size());
return install_permissions.permissions[index];
} }
base::string16 ExtensionInstallPrompt::Prompt::GetPermissionsDetails( base::string16 ExtensionInstallPrompt::Prompt::GetPermissionsDetails(
size_t index, size_t index) const {
PermissionsType permissions_type) const { CHECK_LT(index, prompt_permissions_.details.size());
const InstallPromptPermissions& install_permissions = return prompt_permissions_.details[index];
GetPermissionsForType(permissions_type);
CHECK_LT(index, install_permissions.details.size());
return install_permissions.details[index];
} }
bool ExtensionInstallPrompt::Prompt::GetIsShowingDetails( bool ExtensionInstallPrompt::Prompt::GetIsShowingDetails(
...@@ -496,9 +445,6 @@ bool ExtensionInstallPrompt::Prompt::GetIsShowingDetails( ...@@ -496,9 +445,6 @@ bool ExtensionInstallPrompt::Prompt::GetIsShowingDetails(
case PERMISSIONS_DETAILS: case PERMISSIONS_DETAILS:
CHECK_LT(index, prompt_permissions_.is_showing_details.size()); CHECK_LT(index, prompt_permissions_.is_showing_details.size());
return prompt_permissions_.is_showing_details[index]; 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: case RETAINED_FILES_DETAILS:
return is_showing_details_for_retained_files_; return is_showing_details_for_retained_files_;
case RETAINED_DEVICES_DETAILS: case RETAINED_DEVICES_DETAILS:
...@@ -531,22 +477,6 @@ bool ExtensionInstallPrompt::Prompt::ShouldDisplayRevokeButton() const { ...@@ -531,22 +477,6 @@ bool ExtensionInstallPrompt::Prompt::ShouldDisplayRevokeButton() const {
return !retained_files_.empty() || !retained_device_messages_.empty(); return !retained_files_.empty() || !retained_device_messages_.empty();
} }
ExtensionInstallPrompt::Prompt::InstallPromptPermissions&
ExtensionInstallPrompt::Prompt::GetPermissionsForType(
PermissionsType permissions_type) {
DCHECK_NE(ALL_PERMISSIONS, permissions_type);
return permissions_type == REGULAR_PERMISSIONS ? prompt_permissions_
: withheld_prompt_permissions_;
}
const ExtensionInstallPrompt::Prompt::InstallPromptPermissions&
ExtensionInstallPrompt::Prompt::GetPermissionsForType(
PermissionsType permissions_type) const {
DCHECK_NE(ALL_PERMISSIONS, permissions_type);
return permissions_type == REGULAR_PERMISSIONS ? prompt_permissions_
: withheld_prompt_permissions_;
}
bool ExtensionInstallPrompt::Prompt::ShouldDisplayRevokeFilesButton() const { bool ExtensionInstallPrompt::Prompt::ShouldDisplayRevokeFilesButton() const {
return !retained_files_.empty(); return !retained_files_.empty();
} }
...@@ -731,7 +661,7 @@ void ExtensionInstallPrompt::ShowConfirmation() { ...@@ -731,7 +661,7 @@ void ExtensionInstallPrompt::ShowConfirmation() {
permissions_to_display = custom_permissions_.get(); permissions_to_display = custom_permissions_.get();
} else if (extension_) { } else if (extension_) {
// Initialize permissions if they have not already been set so that // Initialize permissions if they have not already been set so that
// withheld permissions are displayed properly in the install prompt. // any transformations are correctly reflected in the install prompt.
extensions::PermissionsUpdater( extensions::PermissionsUpdater(
profile_, extensions::PermissionsUpdater::INIT_FLAG_TRANSIENT) profile_, extensions::PermissionsUpdater::INIT_FLAG_TRANSIENT)
.InitializePermissions(extension_); .InitializePermissions(extension_);
...@@ -758,19 +688,7 @@ void ExtensionInstallPrompt::ShowConfirmation() { ...@@ -758,19 +688,7 @@ void ExtensionInstallPrompt::ShowConfirmation() {
extensions::PermissionMessageProvider::Get(); extensions::PermissionMessageProvider::Get();
prompt_->AddPermissions(message_provider->GetPermissionMessages( prompt_->AddPermissions(message_provider->GetPermissionMessages(
message_provider->GetAllPermissionIDs( message_provider->GetAllPermissionIDs(*permissions_to_display, type)));
*permissions_to_display, type)),
REGULAR_PERMISSIONS);
const PermissionSet* withheld =
extension_ ? &extension_->permissions_data()->withheld_permissions()
: nullptr;
if (withheld && !withheld->IsEmpty()) {
prompt_->AddPermissions(
message_provider->GetPermissionMessages(
message_provider->GetAllPermissionIDs(*withheld, type)),
WITHHELD_PERMISSIONS);
}
} }
prompt_->set_extension(extension_); prompt_->set_extension(extension_);
......
...@@ -75,19 +75,10 @@ class ExtensionInstallPrompt { ...@@ -75,19 +75,10 @@ class ExtensionInstallPrompt {
// Enumeration for permissions and retained files details. // Enumeration for permissions and retained files details.
enum DetailsType { enum DetailsType {
PERMISSIONS_DETAILS = 0, PERMISSIONS_DETAILS = 0,
WITHHELD_PERMISSIONS_DETAILS,
RETAINED_FILES_DETAILS, RETAINED_FILES_DETAILS,
RETAINED_DEVICES_DETAILS, RETAINED_DEVICES_DETAILS,
}; };
// This enum is used to differentiate regular and withheld permissions for
// segregation in the install prompt.
enum PermissionsType {
REGULAR_PERMISSIONS = 0,
WITHHELD_PERMISSIONS,
ALL_PERMISSIONS,
};
// Extra information needed to display an installation or uninstallation // Extra information needed to display an installation or uninstallation
// prompt. Gets populated with raw data and exposes getters for formatted // prompt. Gets populated with raw data and exposes getters for formatted
// strings so that the GTK/views/Cocoa install dialogs don't have to repeat // strings so that the GTK/views/Cocoa install dialogs don't have to repeat
...@@ -97,8 +88,7 @@ class ExtensionInstallPrompt { ...@@ -97,8 +88,7 @@ class ExtensionInstallPrompt {
explicit Prompt(PromptType type); explicit Prompt(PromptType type);
~Prompt(); ~Prompt();
void AddPermissions(const extensions::PermissionMessages& permissions, void AddPermissions(const extensions::PermissionMessages& permissions);
PermissionsType permissions_type);
void SetIsShowingDetails(DetailsType type, void SetIsShowingDetails(DetailsType type,
size_t index, size_t index,
bool is_showing_details); bool is_showing_details);
...@@ -115,8 +105,7 @@ class ExtensionInstallPrompt { ...@@ -115,8 +105,7 @@ class ExtensionInstallPrompt {
// Returns the empty string when there should be no "accept" button. // Returns the empty string when there should be no "accept" button.
base::string16 GetAcceptButtonLabel() const; base::string16 GetAcceptButtonLabel() const;
base::string16 GetAbortButtonLabel() const; base::string16 GetAbortButtonLabel() const;
base::string16 GetPermissionsHeading( base::string16 GetPermissionsHeading() const;
PermissionsType permissions_type) const;
base::string16 GetRetainedFilesHeading() const; base::string16 GetRetainedFilesHeading() const;
base::string16 GetRetainedDevicesHeading() const; base::string16 GetRetainedDevicesHeading() const;
...@@ -135,13 +124,10 @@ class ExtensionInstallPrompt { ...@@ -135,13 +124,10 @@ class ExtensionInstallPrompt {
void AppendRatingStars(StarAppender appender, void* data) const; void AppendRatingStars(StarAppender appender, void* data) const;
base::string16 GetRatingCount() const; base::string16 GetRatingCount() const;
base::string16 GetUserCount() const; base::string16 GetUserCount() const;
size_t GetPermissionCount(PermissionsType permissions_type) const; size_t GetPermissionCount() const;
size_t GetPermissionsDetailsCount(PermissionsType permissions_type) const; size_t GetPermissionsDetailsCount() const;
base::string16 GetPermission(size_t index, base::string16 GetPermission(size_t index) const;
PermissionsType permissions_type) const; base::string16 GetPermissionsDetails(size_t index) const;
base::string16 GetPermissionsDetails(
size_t index,
PermissionsType permissions_type) const;
bool GetIsShowingDetails(DetailsType type, size_t index) const; bool GetIsShowingDetails(DetailsType type, size_t index) const;
size_t GetRetainedFileCount() const; size_t GetRetainedFileCount() const;
base::string16 GetRetainedFile(size_t index) const; base::string16 GetRetainedFile(size_t index) const;
...@@ -191,13 +177,6 @@ class ExtensionInstallPrompt { ...@@ -191,13 +177,6 @@ class ExtensionInstallPrompt {
bool ShouldDisplayRevokeButton() const; bool ShouldDisplayRevokeButton() const;
// Returns the InstallPromptPermissions corresponding to
// |permissions_type|.
InstallPromptPermissions& GetPermissionsForType(
PermissionsType permissions_type);
const InstallPromptPermissions& GetPermissionsForType(
PermissionsType permissions_type) const;
bool ShouldDisplayRevokeFilesButton() const; bool ShouldDisplayRevokeFilesButton() const;
const PromptType type_; const PromptType type_;
...@@ -205,8 +184,6 @@ class ExtensionInstallPrompt { ...@@ -205,8 +184,6 @@ class ExtensionInstallPrompt {
// Permissions that are being requested (may not be all of an extension's // Permissions that are being requested (may not be all of an extension's
// permissions if only additional ones are being requested) // permissions if only additional ones are being requested)
InstallPromptPermissions prompt_permissions_; InstallPromptPermissions prompt_permissions_;
// Permissions that will be withheld upon install.
InstallPromptPermissions withheld_prompt_permissions_;
bool is_showing_details_for_retained_files_; bool is_showing_details_for_retained_files_;
bool is_showing_details_for_retained_devices_; bool is_showing_details_for_retained_devices_;
......
...@@ -54,17 +54,11 @@ void VerifyPromptIconCallback( ...@@ -54,17 +54,11 @@ void VerifyPromptIconCallback(
void VerifyPromptPermissionsCallback( void VerifyPromptPermissionsCallback(
const base::Closure& quit_closure, const base::Closure& quit_closure,
size_t regular_permissions_count, size_t regular_permissions_count,
size_t withheld_permissions_count,
ExtensionInstallPromptShowParams* params, ExtensionInstallPromptShowParams* params,
const ExtensionInstallPrompt::DoneCallback& done_callback, const ExtensionInstallPrompt::DoneCallback& done_callback,
std::unique_ptr<ExtensionInstallPrompt::Prompt> install_prompt) { std::unique_ptr<ExtensionInstallPrompt::Prompt> install_prompt) {
ASSERT_TRUE(install_prompt.get()); ASSERT_TRUE(install_prompt.get());
EXPECT_EQ(regular_permissions_count, EXPECT_EQ(regular_permissions_count, install_prompt->GetPermissionCount());
install_prompt->GetPermissionCount(
ExtensionInstallPrompt::REGULAR_PERMISSIONS));
EXPECT_EQ(withheld_permissions_count,
install_prompt->GetPermissionCount(
ExtensionInstallPrompt::WITHHELD_PERMISSIONS));
quit_closure.Run(); quit_closure.Run();
} }
...@@ -124,8 +118,7 @@ TEST_F(ExtensionInstallPromptUnitTest, PromptShowsPermissionWarnings) { ...@@ -124,8 +118,7 @@ TEST_F(ExtensionInstallPromptUnitTest, PromptShowsPermissionWarnings) {
ExtensionInstallPrompt::PERMISSIONS_PROMPT), ExtensionInstallPrompt::PERMISSIONS_PROMPT),
std::move(permission_set), std::move(permission_set),
base::Bind(&VerifyPromptPermissionsCallback, run_loop.QuitClosure(), base::Bind(&VerifyPromptPermissionsCallback, run_loop.QuitClosure(),
1u, // |regular_permissions_count|. 1u)); // |regular_permissions_count|.
0u)); // |withheld_permissions_count|.
run_loop.Run(); run_loop.Run();
} }
...@@ -157,8 +150,7 @@ TEST_F(ExtensionInstallPromptUnitTest, ...@@ -157,8 +150,7 @@ TEST_F(ExtensionInstallPromptUnitTest,
ExtensionInstallPrompt::DoneCallback(), extension.get(), nullptr, ExtensionInstallPrompt::DoneCallback(), extension.get(), nullptr,
std::move(sub_prompt), std::move(sub_prompt),
base::Bind(&VerifyPromptPermissionsCallback, run_loop.QuitClosure(), base::Bind(&VerifyPromptPermissionsCallback, run_loop.QuitClosure(),
2u, // |regular_permissions_count|. 2u)); // |regular_permissions_count|.
0u)); // |withheld_permissions_count|.
run_loop.Run(); run_loop.Run();
} }
......
...@@ -243,11 +243,6 @@ base::string16 ExternalInstallBubbleAlert::GetBubbleViewTitle() { ...@@ -243,11 +243,6 @@ base::string16 ExternalInstallBubbleAlert::GetBubbleViewTitle() {
std::vector<base::string16> std::vector<base::string16>
ExternalInstallBubbleAlert::GetBubbleViewMessages() { ExternalInstallBubbleAlert::GetBubbleViewMessages() {
ExtensionInstallPrompt::PermissionsType regular_permissions =
ExtensionInstallPrompt::PermissionsType::REGULAR_PERMISSIONS;
ExtensionInstallPrompt::PermissionsType withheld_permissions =
ExtensionInstallPrompt::PermissionsType::WITHHELD_PERMISSIONS;
std::vector<base::string16> messages; std::vector<base::string16> messages;
int heading_id = int heading_id =
IDS_EXTENSION_EXTERNAL_INSTALL_ALERT_BUBBLE_HEADING_EXTENSION; IDS_EXTENSION_EXTERNAL_INSTALL_ALERT_BUBBLE_HEADING_EXTENSION;
...@@ -257,22 +252,11 @@ ExternalInstallBubbleAlert::GetBubbleViewMessages() { ...@@ -257,22 +252,11 @@ ExternalInstallBubbleAlert::GetBubbleViewMessages() {
heading_id = IDS_EXTENSION_EXTERNAL_INSTALL_ALERT_BUBBLE_HEADING_THEME; heading_id = IDS_EXTENSION_EXTERNAL_INSTALL_ALERT_BUBBLE_HEADING_THEME;
messages.push_back(l10n_util::GetStringUTF16(heading_id)); messages.push_back(l10n_util::GetStringUTF16(heading_id));
if (prompt_->GetPermissionCount(regular_permissions)) { if (prompt_->GetPermissionCount()) {
messages.push_back(prompt_->GetPermissionsHeading(regular_permissions)); messages.push_back(prompt_->GetPermissionsHeading());
for (size_t i = 0; i < prompt_->GetPermissionCount(regular_permissions); for (size_t i = 0; i < prompt_->GetPermissionCount(); ++i) {
++i) {
messages.push_back(l10n_util::GetStringFUTF16(
IDS_EXTENSION_PERMISSION_LINE,
prompt_->GetPermission(i, regular_permissions)));
}
}
if (prompt_->GetPermissionCount(withheld_permissions)) {
messages.push_back(prompt_->GetPermissionsHeading(withheld_permissions));
for (size_t i = 0; i < prompt_->GetPermissionCount(withheld_permissions);
++i) {
messages.push_back(l10n_util::GetStringFUTF16( messages.push_back(l10n_util::GetStringFUTF16(
IDS_EXTENSION_PERMISSION_LINE, IDS_EXTENSION_PERMISSION_LINE, prompt_->GetPermission(i)));
prompt_->GetPermission(i, withheld_permissions)));
} }
} }
// TODO(yoz): OAuth issue advice? // TODO(yoz): OAuth issue advice?
......
...@@ -68,7 +68,6 @@ typedef NSUInteger CellAttributes; ...@@ -68,7 +68,6 @@ typedef NSUInteger CellAttributes;
// returned. // returned.
- (NSString*) - (NSString*)
appendPermissionsForPrompt:(const ExtensionInstallPrompt::Prompt&)prompt appendPermissionsForPrompt:(const ExtensionInstallPrompt::Prompt&)prompt
withType:(ExtensionInstallPrompt::PermissionsType)type
children:(NSMutableArray*)children; children:(NSMutableArray*)children;
- (void)updateViewFrame:(NSRect)frame; - (void)updateViewFrame:(NSRect)frame;
@end @end
...@@ -641,7 +640,6 @@ bool HasAttribute(id item, CellAttributesMask attributeMask) { ...@@ -641,7 +640,6 @@ bool HasAttribute(id item, CellAttributesMask attributeMask) {
- (NSArray*)buildWarnings:(const ExtensionInstallPrompt::Prompt&)prompt { - (NSArray*)buildWarnings:(const ExtensionInstallPrompt::Prompt&)prompt {
NSMutableArray* warnings = [NSMutableArray array]; NSMutableArray* warnings = [NSMutableArray array];
NSString* heading = nil; NSString* heading = nil;
NSString* withheldHeading = nil;
bool hasPermissions = prompt.GetPermissionCount( bool hasPermissions = prompt.GetPermissionCount(
ExtensionInstallPrompt::PermissionsType::ALL_PERMISSIONS); ExtensionInstallPrompt::PermissionsType::ALL_PERMISSIONS);
...@@ -649,18 +647,10 @@ bool HasAttribute(id item, CellAttributesMask attributeMask) { ...@@ -649,18 +647,10 @@ bool HasAttribute(id item, CellAttributesMask attributeMask) {
kBoldText | kAutoExpandCell | kNoExpandMarker; kBoldText | kAutoExpandCell | kNoExpandMarker;
if (prompt.ShouldShowPermissions()) { if (prompt.ShouldShowPermissions()) {
NSMutableArray* children = [NSMutableArray array]; NSMutableArray* children = [NSMutableArray array];
NSMutableArray* withheldChildren = [NSMutableArray array];
heading = heading =
[self appendPermissionsForPrompt:prompt [self appendPermissionsForPrompt:prompt
withType:ExtensionInstallPrompt::PermissionsType
::REGULAR_PERMISSIONS
children:children]; children:children];
withheldHeading =
[self appendPermissionsForPrompt:prompt
withType:ExtensionInstallPrompt::PermissionsType
::WITHHELD_PERMISSIONS
children:withheldChildren];
if (!hasPermissions) { if (!hasPermissions) {
[children addObject: [children addObject:
...@@ -676,13 +666,6 @@ bool HasAttribute(id item, CellAttributesMask attributeMask) { ...@@ -676,13 +666,6 @@ bool HasAttribute(id item, CellAttributesMask attributeMask) {
cellAttributes:warningCellAttributes cellAttributes:warningCellAttributes
children:children]]; children:children]];
} }
// Add withheld permissions to the prompt if they exist.
if (withheldHeading) {
[warnings addObject:[self buildItemWithTitle:withheldHeading
cellAttributes:warningCellAttributes
children:withheldChildren]];
}
} }
if (prompt.GetRetainedFileCount() > 0) { if (prompt.GetRetainedFileCount() > 0) {
...@@ -741,28 +724,26 @@ bool HasAttribute(id item, CellAttributesMask attributeMask) { ...@@ -741,28 +724,26 @@ bool HasAttribute(id item, CellAttributesMask attributeMask) {
- (NSString*) - (NSString*)
appendPermissionsForPrompt:(const ExtensionInstallPrompt::Prompt&)prompt appendPermissionsForPrompt:(const ExtensionInstallPrompt::Prompt&)prompt
withType:(ExtensionInstallPrompt::PermissionsType)type
children:(NSMutableArray*)children { children:(NSMutableArray*)children {
size_t permissionsCount = prompt.GetPermissionCount(type); size_t permissionsCount = prompt.GetPermissionCount();
if (permissionsCount == 0) if (permissionsCount == 0)
return NULL; return NULL;
for (size_t i = 0; i < permissionsCount; ++i) { for (size_t i = 0; i < permissionsCount; ++i) {
NSDictionary* item = [self NSDictionary* item =
buildItemWithTitle:SysUTF16ToNSString(prompt.GetPermission(i, type)) [self buildItemWithTitle:SysUTF16ToNSString(prompt.GetPermission(i))
cellAttributes:kUseBullet cellAttributes:kUseBullet
children:nil]; children:nil];
[children addObject:item]; [children addObject:item];
// If there are additional details, add them below this item. // If there are additional details, add them below this item.
if (!prompt.GetPermissionsDetails(i, type).empty()) { if (!prompt.GetPermissionsDetails(i).empty()) {
if (prompt.GetIsShowingDetails( if (prompt.GetIsShowingDetails(
ExtensionInstallPrompt::PERMISSIONS_DETAILS, i)) { ExtensionInstallPrompt::PERMISSIONS_DETAILS, i)) {
item = item = [self buildItemWithTitle:SysUTF16ToNSString(
[self buildItemWithTitle:SysUTF16ToNSString( prompt.GetPermissionsDetails(i))
prompt.GetPermissionsDetails(i, type)) cellAttributes:kNoExpandMarker
cellAttributes:kNoExpandMarker children:nil];
children:nil];
[children addObject:item]; [children addObject:item];
} }
...@@ -772,7 +753,7 @@ appendPermissionsForPrompt:(const ExtensionInstallPrompt::Prompt&)prompt ...@@ -772,7 +753,7 @@ appendPermissionsForPrompt:(const ExtensionInstallPrompt::Prompt&)prompt
} }
} }
return SysUTF16ToNSString(prompt.GetPermissionsHeading(type)); return SysUTF16ToNSString(prompt.GetPermissionsHeading());
} }
- (void)updateViewFrame:(NSRect)frame { - (void)updateViewFrame:(NSRect)frame {
......
...@@ -215,20 +215,18 @@ struct ExtensionInfoSection { ...@@ -215,20 +215,18 @@ struct ExtensionInfoSection {
// Adds a section to |sections| for permissions of |perm_type| if there are any. // Adds a section to |sections| for permissions of |perm_type| if there are any.
void AddPermissions(ExtensionInstallPrompt::Prompt* prompt, void AddPermissions(ExtensionInstallPrompt::Prompt* prompt,
std::vector<ExtensionInfoSection>& sections, std::vector<ExtensionInfoSection>& sections,
int available_width, int available_width) {
ExtensionInstallPrompt::PermissionsType perm_type) { DCHECK_GT(prompt->GetPermissionCount(), 0u);
if (prompt->GetPermissionCount(perm_type) == 0)
return;
auto permissions_view = std::make_unique<PermissionsView>(available_width); auto permissions_view = std::make_unique<PermissionsView>(available_width);
for (size_t i = 0; i < prompt->GetPermissionCount(perm_type); ++i) { for (size_t i = 0; i < prompt->GetPermissionCount(); ++i) {
permissions_view->AddItem(prompt->GetPermission(i, perm_type), permissions_view->AddItem(prompt->GetPermission(i),
prompt->GetPermissionsDetails(i, perm_type)); prompt->GetPermissionsDetails(i));
} }
sections.push_back( sections.push_back(
{prompt->GetPermissionsHeading(perm_type), std::move(permissions_view)}); {prompt->GetPermissionsHeading(), std::move(permissions_view)});
} }
} // namespace } // namespace
...@@ -276,16 +274,9 @@ void ExtensionInstallDialogView::CreateContents() { ...@@ -276,16 +274,9 @@ void ExtensionInstallDialogView::CreateContents() {
std::vector<ExtensionInfoSection> sections; std::vector<ExtensionInfoSection> sections;
if (prompt_->ShouldShowPermissions()) { if (prompt_->ShouldShowPermissions()) {
bool has_permissions = bool has_permissions = prompt_->GetPermissionCount() > 0;
prompt_->GetPermissionCount(
ExtensionInstallPrompt::PermissionsType::ALL_PERMISSIONS) > 0;
if (has_permissions) { if (has_permissions) {
AddPermissions( AddPermissions(prompt_.get(), sections, content_width);
prompt_.get(), sections, content_width,
ExtensionInstallPrompt::PermissionsType::REGULAR_PERMISSIONS);
AddPermissions(
prompt_.get(), sections, content_width,
ExtensionInstallPrompt::PermissionsType::WITHHELD_PERMISSIONS);
} else { } else {
sections.push_back( sections.push_back(
{l10n_util::GetStringUTF16(IDS_EXTENSION_NO_SPECIAL_PERMISSIONS), {l10n_util::GetStringUTF16(IDS_EXTENSION_NO_SPECIAL_PERMISSIONS),
......
...@@ -129,8 +129,7 @@ IN_PROC_BROWSER_TEST_F(ScrollbarTest, LongPromptScrollbar) { ...@@ -129,8 +129,7 @@ IN_PROC_BROWSER_TEST_F(ScrollbarTest, LongPromptScrollbar) {
} }
std::unique_ptr<ExtensionInstallPrompt::Prompt> prompt = std::unique_ptr<ExtensionInstallPrompt::Prompt> prompt =
CreatePrompt(ExtensionInstallPrompt::PERMISSIONS_PROMPT); CreatePrompt(ExtensionInstallPrompt::PERMISSIONS_PROMPT);
prompt->AddPermissions(permissions, prompt->AddPermissions(permissions);
ExtensionInstallPrompt::REGULAR_PERMISSIONS);
ASSERT_TRUE(IsScrollbarVisible(std::move(prompt))) ASSERT_TRUE(IsScrollbarVisible(std::move(prompt)))
<< "Scrollbar is not visible"; << "Scrollbar is not visible";
} }
...@@ -145,8 +144,7 @@ IN_PROC_BROWSER_TEST_F(ScrollbarTest, ScrollbarRegression) { ...@@ -145,8 +144,7 @@ IN_PROC_BROWSER_TEST_F(ScrollbarTest, ScrollbarRegression) {
PermissionIDSet())); PermissionIDSet()));
std::unique_ptr<ExtensionInstallPrompt::Prompt> prompt = std::unique_ptr<ExtensionInstallPrompt::Prompt> prompt =
CreatePrompt(ExtensionInstallPrompt::PERMISSIONS_PROMPT); CreatePrompt(ExtensionInstallPrompt::PERMISSIONS_PROMPT);
prompt->AddPermissions(permissions, prompt->AddPermissions(permissions);
ExtensionInstallPrompt::REGULAR_PERMISSIONS);
ASSERT_FALSE(IsScrollbarVisible(std::move(prompt))) << "Scrollbar is visible"; ASSERT_FALSE(IsScrollbarVisible(std::move(prompt))) << "Scrollbar is visible";
} }
...@@ -247,10 +245,7 @@ class ExtensionInstallDialogViewInteractiveBrowserTest ...@@ -247,10 +245,7 @@ class ExtensionInstallDialogViewInteractiveBrowserTest
icon.eraseARGB(255, 128, 255, 128); icon.eraseARGB(255, 128, 255, 128);
auto prompt = std::make_unique<ExtensionInstallPrompt::Prompt>(type_); auto prompt = std::make_unique<ExtensionInstallPrompt::Prompt>(type_);
prompt->AddPermissions(permissions_, prompt->AddPermissions(permissions_);
ExtensionInstallPrompt::REGULAR_PERMISSIONS);
prompt->AddPermissions(withheld_permissions_,
ExtensionInstallPrompt::WITHHELD_PERMISSIONS);
prompt->set_retained_files(retained_files_); prompt->set_retained_files(retained_files_);
prompt->set_retained_device_messages(retained_devices_); prompt->set_retained_device_messages(retained_devices_);
...@@ -274,11 +269,6 @@ class ExtensionInstallDialogViewInteractiveBrowserTest ...@@ -274,11 +269,6 @@ class ExtensionInstallDialogViewInteractiveBrowserTest
PermissionMessage(base::ASCIIToUTF16(permission), PermissionIDSet())); PermissionMessage(base::ASCIIToUTF16(permission), PermissionIDSet()));
} }
void AddWithheldPermission(std::string permission) {
withheld_permissions_.push_back(
PermissionMessage(base::ASCIIToUTF16(permission), PermissionIDSet()));
}
void AddRetainedFile(const base::FilePath& path) { void AddRetainedFile(const base::FilePath& path) {
retained_files_.push_back(path); retained_files_.push_back(path);
} }
...@@ -300,7 +290,6 @@ class ExtensionInstallDialogViewInteractiveBrowserTest ...@@ -300,7 +290,6 @@ class ExtensionInstallDialogViewInteractiveBrowserTest
ExtensionInstallPrompt::INLINE_INSTALL_PROMPT; ExtensionInstallPrompt::INLINE_INSTALL_PROMPT;
bool from_webstore_ = false; bool from_webstore_ = false;
PermissionMessages permissions_; PermissionMessages permissions_;
PermissionMessages withheld_permissions_;
std::vector<base::FilePath> retained_files_; std::vector<base::FilePath> retained_files_;
std::vector<base::string16> retained_devices_; std::vector<base::string16> retained_devices_;
...@@ -372,12 +361,6 @@ IN_PROC_BROWSER_TEST_F(ExtensionInstallDialogViewInteractiveBrowserTest, ...@@ -372,12 +361,6 @@ IN_PROC_BROWSER_TEST_F(ExtensionInstallDialogViewInteractiveBrowserTest,
ShowAndVerifyUi(); ShowAndVerifyUi();
} }
IN_PROC_BROWSER_TEST_F(ExtensionInstallDialogViewInteractiveBrowserTest,
InvokeUi_WithheldPermission) {
AddWithheldPermission("Example permission");
ShowAndVerifyUi();
}
IN_PROC_BROWSER_TEST_F(ExtensionInstallDialogViewInteractiveBrowserTest, IN_PROC_BROWSER_TEST_F(ExtensionInstallDialogViewInteractiveBrowserTest,
InvokeUi_WithRetainedFiles) { InvokeUi_WithRetainedFiles) {
AddRetainedFile(base::FilePath(FILE_PATH_LITERAL("/dev/null"))); AddRetainedFile(base::FilePath(FILE_PATH_LITERAL("/dev/null")));
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment