(Views only) Disable drop-down buttons for managed permissions and display the...

(Views only) Disable drop-down buttons for managed permissions and display the source of the managed setting (e.g. policy, extension).


BUG=113688
TEST=none

Review URL: https://chromiumcodereview.appspot.com/10831128

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@149981 0039d316-1c4b-4281-b951-d872f2087c98
parent c66f88be
......@@ -209,6 +209,33 @@ are declared in build/common.gypi.
<message name="IDS_WEBSITE_SETTINGS_INFOBAR_BUTTON" desc="The string used in the infobar button allowing the user to reload the page directly from the infobar.">
Reload
</message>
<message name="IDS_WEBSITE_SETTINGS_BUTTON_TEXT_ALLOWED_BY_POLICY" desc="The Website Settings popup contains several buttons for opening dropdown menus and changing site permissions. This is the text of such a button if the permission controlled by the button is set to allow and managed by policy.">
Allowed by policy
</message>
<message name="IDS_WEBSITE_SETTINGS_BUTTON_TEXT_BLOCKED_BY_POLICY" desc="The Website Settings popup contains several buttons for opening dropdown menus and changing site permissions. This is the text of such a button if the permission controlled by the button is set to block and managed by policy.">
Blocked by policy
</message>
<message name="IDS_WEBSITE_SETTINGS_BUTTON_TEXT_ALLOWED_BY_EXTENSION" desc="The Website Settings popup contains several buttons for opening dropdown menus and changing site permissions. This is the text of such a button if the permission controlled by the button is set to allow and managed by an extension.">
Allowed by extension
</message>
<message name="IDS_WEBSITE_SETTINGS_BUTTON_TEXT_BLOCKED_BY_EXTENSION" desc="The Website Settings popup contains several buttons for opening dropdown menus and changing site permissions. This is the text of such a button if the permission controlled by the button is set to block and managed by an extension.">
Blocked by extension
</message>
<message name="IDS_WEBSITE_SETTINGS_BUTTON_TEXT_ALLOWED_BY_USER" desc="The Website Settings popup contains several buttons for opening dropdown menus and changing site permissions. This is the text of such a button if the permission controlled by the button was explicitly set to allow by the user.">
Allowed by you
</message>
<message name="IDS_WEBSITE_SETTINGS_BUTTON_TEXT_BLOCKED_BY_USER" desc="The Website Settings popup contains several buttons for opening dropdown menus and changing site permissions. This is the text of such a button if the permission controlled by the button was explicitly set to block by the user.">
Blocked by you
</message>
<message name="IDS_WEBSITE_SETTINGS_BUTTON_TEXT_ALLOWED_BY_DEFAULT" desc="The Website Settings popup contains several buttons for opening dropdown menus and changing site permissions. This is the text of such a button if the permission controlled by the button is set to the default setting and the default settings is allow.">
Allowed by default
</message>
<message name="IDS_WEBSITE_SETTINGS_BUTTON_TEXT_BLOCKED_BY_DEFAULT" desc="The Website Settings popup contains several buttons for opening dropdown menus and changing site permissions. This is the text of such a button if the permission controlled by the button is set to the default setting and the default settings is block.">
Blocked by default
</message>
<message name="IDS_WEBSITE_SETTINGS_BUTTON_TEXT_ASK_BY_DEFAULT" desc="The Website Settings popup contains several buttons for opening dropdown menus and changing site permissions. This is the text of such a button if the permission controlled by the button is set to the default setting and the default settings is ask.">
Ask by default
</message>
<message name="IDS_WEBSITE_SETTINGS_TITLE_SITE_PERMISSIONS" desc="Title of the permissions section of the website settings popup.">
Permissions
</message>
......
......@@ -404,8 +404,8 @@ const ContentSetting kPermissionsMenuSettings[] = {
// Update the title to match the current permission setting.
scoped_nsobject<NSMenuItem> titleItem([[NSMenuItem alloc] init]);
[titleItem setTitle:base::SysUTF16ToNSString(
WebsiteSettingsUI::PermissionActionToUIString(setting,
defaultSetting))];
WebsiteSettingsUI::PermissionActionToUIString(
setting, defaultSetting, content_settings::SETTING_SOURCE_USER))];
[[button cell] setUsesItemFromMenu:NO];
[[button cell] setMenuItem:titleItem.get()];
[button sizeToFit];
......
......@@ -89,9 +89,12 @@ class PermissionMenuButton : public views::MenuButton,
public:
// Creates a new |PermissionMenuButton| with the passed |text|. The ownership
// of the |model| remains with the caller and is not transfered to the
// |PermissionMenuButton|.
// |PermissionMenuButton|. If the |show_menu_marker| flag is true, then a
// small icon is be displayed next to the button |text|, indicating that the
// button opens a drop down menu.
PermissionMenuButton(const string16& text,
PermissionMenuModel* model);
PermissionMenuModel* model,
bool show_menu_marker);
virtual ~PermissionMenuButton();
// Overridden from views::MenuButton.
......@@ -168,8 +171,10 @@ void PermissionMenuModel::ExecuteCommand(int command_id) {
///////////////////////////////////////////////////////////////////////////////
PermissionMenuButton::PermissionMenuButton(const string16& text,
PermissionMenuModel* model)
: ALLOW_THIS_IN_INITIALIZER_LIST(MenuButton(NULL, text, this, true)),
PermissionMenuModel* model,
bool show_menu_marker)
: ALLOW_THIS_IN_INITIALIZER_LIST(MenuButton(NULL, text, this,
show_menu_marker)),
menu_model_(model) {
}
......@@ -219,9 +224,11 @@ void PermissionMenuButton::OnMenuButtonClicked(View* source,
// PermissionSelectorView
///////////////////////////////////////////////////////////////////////////////
PermissionSelectorView::PermissionSelectorView(ContentSettingsType type,
ContentSetting default_setting,
ContentSetting current_setting)
PermissionSelectorView::PermissionSelectorView(
ContentSettingsType type,
ContentSetting default_setting,
ContentSetting current_setting,
content_settings::SettingSource source)
: icon_(NULL),
menu_button_(NULL) {
views::GridLayout* layout = new views::GridLayout(this);
......@@ -274,10 +281,14 @@ PermissionSelectorView::PermissionSelectorView(ContentSettingsType type,
// Create the permission menu button.
menu_button_model_.reset(new internal::PermissionMenuModel(
type, default_setting, current_setting, this));
bool button_enabled = source == content_settings::SETTING_SOURCE_USER;
menu_button_ = new internal::PermissionMenuButton(
WebsiteSettingsUI::PermissionActionToUIString(current_setting,
default_setting),
menu_button_model_.get());
default_setting,
source),
menu_button_model_.get(),
button_enabled);
menu_button_->SetEnabled(button_enabled);
layout->AddView(menu_button_);
}
......@@ -298,7 +309,9 @@ void PermissionSelectorView::SelectionChanged() {
// Update the menu button text to reflect the new setting.
menu_button_->SetText(WebsiteSettingsUI::PermissionActionToUIString(
menu_button_model_->current_setting(),
menu_button_model_->default_setting()));
menu_button_model_->default_setting(),
content_settings::SETTING_SOURCE_USER));
FOR_EACH_OBSERVER(PermissionSelectorViewObserver,
observer_list_,
......
......@@ -32,7 +32,8 @@ class PermissionSelectorView : public views::View {
public:
PermissionSelectorView(ContentSettingsType type,
ContentSetting default_setting,
ContentSetting current_setting);
ContentSetting current_setting,
content_settings::SettingSource source);
void AddObserver(PermissionSelectorViewObserver* observer);
......
......@@ -462,7 +462,8 @@ void WebsiteSettingsPopupView::SetPermissionInfo(
PermissionSelectorView* selector = new PermissionSelectorView(
permission->type,
permission->default_setting,
permission->setting);
permission->setting,
permission->source);
selector->AddObserver(this);
layout->AddView(selector,
1,
......
......@@ -426,6 +426,7 @@ void WebsiteSettings::PresentSitePermissions() {
DCHECK(value.get());
permission_info.setting =
content_settings::ValueToContentSetting(value.get());
permission_info.source = info.source;
if (info.primary_pattern == ContentSettingsPattern::Wildcard() &&
info.secondary_pattern == ContentSettingsPattern::Wildcard()) {
......
......@@ -12,8 +12,62 @@
#include "ui/gfx/image/image.h"
namespace {
const int kInvalidResourceID = -1;
}
// The resource id's for the strings that are displayed on the permissions
// button if the permission setting is managed by policy.
const int kPermissionButtonTextIDPolicyManaged[] = {
kInvalidResourceID,
IDS_WEBSITE_SETTINGS_BUTTON_TEXT_ALLOWED_BY_POLICY,
IDS_WEBSITE_SETTINGS_BUTTON_TEXT_BLOCKED_BY_POLICY,
kInvalidResourceID,
kInvalidResourceID
};
COMPILE_ASSERT(arraysize(kPermissionButtonTextIDPolicyManaged) ==
CONTENT_SETTING_NUM_SETTINGS,
button_text_id_array_size_incorrect);
// The resource id's for the strings that are displayed on the permissions
// button if the permission setting is managed by an extension.
const int kPermissionButtonTextIDExtensionManaged[] = {
kInvalidResourceID,
IDS_WEBSITE_SETTINGS_BUTTON_TEXT_ALLOWED_BY_EXTENSION,
IDS_WEBSITE_SETTINGS_BUTTON_TEXT_BLOCKED_BY_EXTENSION,
kInvalidResourceID,
kInvalidResourceID
};
COMPILE_ASSERT(arraysize(kPermissionButtonTextIDExtensionManaged) ==
CONTENT_SETTING_NUM_SETTINGS,
button_text_id_array_size_incorrect);
// The resource id's for the strings that are displayed on the permissions
// button if the permission setting is managed by the user.
const int kPermissionButtonTextIDUserManaged[] = {
kInvalidResourceID,
IDS_WEBSITE_SETTINGS_BUTTON_TEXT_ALLOWED_BY_USER,
IDS_WEBSITE_SETTINGS_BUTTON_TEXT_BLOCKED_BY_USER,
kInvalidResourceID,
kInvalidResourceID
};
COMPILE_ASSERT(arraysize(kPermissionButtonTextIDUserManaged) ==
CONTENT_SETTING_NUM_SETTINGS,
button_text_id_array_size_incorrect);
// The resource id's for the strings that are displayed on the permissions
// button if the permission setting is the global default setting.
const int kPermissionButtonTextIDDefaultSetting[] = {
kInvalidResourceID,
IDS_WEBSITE_SETTINGS_BUTTON_TEXT_ALLOWED_BY_DEFAULT,
IDS_WEBSITE_SETTINGS_BUTTON_TEXT_BLOCKED_BY_DEFAULT,
IDS_WEBSITE_SETTINGS_BUTTON_TEXT_ASK_BY_DEFAULT,
kInvalidResourceID
};
COMPILE_ASSERT(arraysize(kPermissionButtonTextIDDefaultSetting) ==
CONTENT_SETTING_NUM_SETTINGS,
button_text_id_array_size_incorrect);
} // namespace
WebsiteSettingsUI::CookieInfo::CookieInfo()
: allowed(-1), blocked(-1) {
......@@ -22,7 +76,8 @@ WebsiteSettingsUI::CookieInfo::CookieInfo()
WebsiteSettingsUI::PermissionInfo::PermissionInfo()
: type(CONTENT_SETTINGS_TYPE_DEFAULT),
setting(CONTENT_SETTING_DEFAULT),
default_setting(CONTENT_SETTING_DEFAULT) {
default_setting(CONTENT_SETTING_DEFAULT),
source(content_settings::SETTING_SOURCE_NONE) {
}
WebsiteSettingsUI::IdentityInfo::IdentityInfo()
......@@ -89,37 +144,36 @@ string16 WebsiteSettingsUI::PermissionValueToUIString(ContentSetting value) {
// static
string16 WebsiteSettingsUI::PermissionActionToUIString(
ContentSetting setting, ContentSetting default_setting) {
ContentSetting setting_value;
int setting_description_id = kInvalidResourceID;
int action_description_id = kInvalidResourceID;
// Check whether or not the default setting was used.
if (setting == CONTENT_SETTING_DEFAULT) {
setting_value = default_setting;
setting_description_id = IDS_WEBSITE_SETTINGS_DEFAULT_SETTING;
} else {
setting_value = setting;
setting_description_id = IDS_WEBSITE_SETTINGS_USER_SETTING;
}
ContentSetting setting,
ContentSetting default_setting,
content_settings::SettingSource source) {
ContentSetting effective_setting = setting;
if (effective_setting == CONTENT_SETTING_DEFAULT)
effective_setting = default_setting;
// Determine the string to use to describe the action that was taken, e.g.
// "Allowed", "Blocked", "Ask".
switch (setting_value) {
case CONTENT_SETTING_ALLOW:
action_description_id = IDS_WEBSITE_SETTINGS_PERMISSION_ACTION_ALLOWED;
const int* button_text_ids = NULL;
switch (source) {
case content_settings::SETTING_SOURCE_USER:
if (setting == CONTENT_SETTING_DEFAULT)
button_text_ids = kPermissionButtonTextIDDefaultSetting;
else
button_text_ids = kPermissionButtonTextIDUserManaged;
break;
case CONTENT_SETTING_BLOCK:
action_description_id = IDS_WEBSITE_SETTINGS_PERMISSION_ACTION_BLOCKED;
case content_settings::SETTING_SOURCE_POLICY:
button_text_ids = kPermissionButtonTextIDPolicyManaged;
break;
case CONTENT_SETTING_ASK:
action_description_id = IDS_WEBSITE_SETTINGS_PERMISSION_ACTION_ASK;
case content_settings::SETTING_SOURCE_EXTENSION:
button_text_ids = kPermissionButtonTextIDExtensionManaged;
break;
case content_settings::SETTING_SOURCE_WHITELIST:
case content_settings::SETTING_SOURCE_NONE:
default:
NOTREACHED();
return string16();
}
return l10n_util::GetStringFUTF16(setting_description_id,
l10n_util::GetStringUTF16(action_description_id));
int button_text_id = button_text_ids[effective_setting];
DCHECK_NE(button_text_id, kInvalidResourceID);
return l10n_util::GetStringUTF16(button_text_id);
}
// static
......
......@@ -58,6 +58,8 @@ class WebsiteSettingsUI {
ContentSetting setting;
// The global default settings for this permission |type|.
ContentSetting default_setting;
// The settings source e.g. user, extensions, policy, ... .
content_settings::SettingSource source;
};
// |IdentityInfo| contains information about the site's identity and
......@@ -99,8 +101,10 @@ class WebsiteSettingsUI {
// Returns the UI string describing the action taken for a permission,
// including why that action was taken. E.g. "Allowed by you",
// "Blocked by default".
static string16 PermissionActionToUIString(ContentSetting setting,
ContentSetting default_setting);
static string16 PermissionActionToUIString(
ContentSetting setting,
ContentSetting default_setting,
content_settings::SettingSource source);
// Returns the icon for the given permission |type| and |setting|.
static const gfx::Image& GetPermissionIcon(ContentSettingsType type,
......
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