Index: chrome/browser/ui/content_settings/content_setting_bubble_model.cc |
diff --git a/chrome/browser/ui/content_settings/content_setting_bubble_model.cc b/chrome/browser/ui/content_settings/content_setting_bubble_model.cc |
index 2acc49698b1cf1f11cbe5ec009093b2ccdbdab24..e7fd0373e44f0ff9db284767fdc1b20f02226664 100644 |
--- a/chrome/browser/ui/content_settings/content_setting_bubble_model.cc |
+++ b/chrome/browser/ui/content_settings/content_setting_bubble_model.cc |
@@ -50,6 +50,7 @@ using content_settings::SETTING_SOURCE_NONE; |
namespace { |
const int kAllowButtonIndex = 0; |
+const int kAllowOnceButtonIndex = 1; |
struct ContentSettingsTypeIdEntry { |
ContentSettingsType type; |
@@ -95,6 +96,7 @@ ContentSettingTitleAndLinkModel::ContentSettingTitleAndLinkModel( |
DCHECK_NE(content_type, CONTENT_SETTINGS_TYPE_NOTIFICATIONS); |
SetTitle(); |
SetManageLink(); |
+ SetLearnMoreLink(); |
} |
void ContentSettingTitleAndLinkModel::SetTitle() { |
@@ -156,6 +158,22 @@ void ContentSettingTitleAndLinkModel::OnManageLinkClicked() { |
delegate_->ShowContentSettingsPage(content_type()); |
} |
+void ContentSettingTitleAndLinkModel::SetLearnMoreLink() { |
+ static const ContentSettingsTypeIdEntry kLearnMoreLinkIDs[] = { |
+ {CONTENT_SETTINGS_TYPE_PLUGINS, IDS_LEARN_MORE}, |
+ }; |
+ int learn_more_link_id = |
+ GetIdForContentType(kLearnMoreLinkIDs, arraysize(kLearnMoreLinkIDs), |
+ content_type()); |
+ if (learn_more_link_id) |
+ set_learn_more_link(l10n_util::GetStringUTF8(learn_more_link_id)); |
+} |
+ |
+void ContentSettingTitleAndLinkModel::OnLearnMoreLinkClicked() { |
+ if (delegate_) |
+ delegate_->ShowLearnMorePage(content_type()); |
+} |
+ |
class ContentSettingTitleLinkAndCustomModel |
: public ContentSettingTitleAndLinkModel { |
public: |
@@ -183,7 +201,6 @@ ContentSettingTitleLinkAndCustomModel::ContentSettingTitleLinkAndCustomModel( |
void ContentSettingTitleLinkAndCustomModel::SetCustomLink() { |
static const ContentSettingsTypeIdEntry kCustomIDs[] = { |
{CONTENT_SETTINGS_TYPE_COOKIES, IDS_BLOCKED_COOKIES_INFO}, |
- {CONTENT_SETTINGS_TYPE_PLUGINS, IDS_BLOCKED_PLUGINS_LOAD_ALL}, |
{CONTENT_SETTINGS_TYPE_MIXEDSCRIPT, IDS_ALLOW_INSECURE_CONTENT_BUTTON}, |
}; |
int custom_link_id = |
@@ -228,16 +245,26 @@ ContentSettingSingleRadioGroup::ContentSettingSingleRadioGroup( |
ContentSettingSingleRadioGroup::~ContentSettingSingleRadioGroup() { |
if (settings_changed()) { |
- ContentSetting setting = |
- selected_item_ == kAllowButtonIndex ? |
- CONTENT_SETTING_ALLOW : |
- block_setting_; |
+ ContentSetting setting; |
+ if (content_type() == CONTENT_SETTINGS_TYPE_PLUGINS) { |
+ if (selected_item_ == kAllowButtonIndex) |
+ setting = CONTENT_SETTING_ALLOW; |
+ else if (selected_item_ == kAllowOnceButtonIndex) |
+ setting = CONTENT_SETTING_DEFAULT; |
+ else |
+ setting = block_setting_; |
+ TabSpecificContentSettings::FromWebContents(web_contents())-> |
+ set_plugin_bubble_setting(setting); |
+ } else { |
+ setting = selected_item_ == kAllowButtonIndex ? |
+ CONTENT_SETTING_ALLOW : block_setting_; |
+ } |
AddException(setting); |
} |
} |
bool ContentSettingSingleRadioGroup::settings_changed() const { |
- return selected_item_ != bubble_content().radio_group.default_item; |
+ return selected_item_ != bubble_content().radio_group.default_item; |
} |
// Initialize the radio group by setting the appropriate labels for the |
@@ -325,7 +352,18 @@ void ContentSettingSingleRadioGroup::SetRadioGroup() { |
content_type())); |
} |
+ static const ContentSettingsTypeIdEntry kBlockedAllowOnceIDs[] = { |
+ {CONTENT_SETTINGS_TYPE_PLUGINS, IDS_BLOCKED_PLUGINS_LOAD_ALL}, |
+ }; |
+ |
+ std::string radio_allow_once_label; |
+ radio_allow_once_label = l10n_util::GetStringUTF8( |
+ GetIdForContentType(kBlockedAllowOnceIDs, arraysize(kBlockedAllowOnceIDs), |
+ content_type())); |
+ |
radio_group.radio_items.push_back(radio_allow_label); |
+ if (content_type() == CONTENT_SETTINGS_TYPE_PLUGINS) |
+ radio_group.radio_items.push_back(radio_allow_once_label); |
radio_group.radio_items.push_back(radio_block_label); |
ContentSetting setting; |
SettingSource setting_source = SETTING_SOURCE_NONE; |
@@ -341,7 +379,10 @@ void ContentSettingSingleRadioGroup::SetRadioGroup() { |
HostContentSettingsMap* map = profile()->GetHostContentSettingsMap(); |
scoped_ptr<base::Value> value(map->GetWebsiteSetting( |
url, url, content_type(), std::string(), &info)); |
- setting = content_settings::ValueToContentSetting(value.get()); |
+ if (content_type() == CONTENT_SETTINGS_TYPE_PLUGINS) |
+ setting = content_settings->plugin_bubble_setting(); |
+ else |
+ setting = content_settings::ValueToContentSetting(value.get()); |
setting_source = info.source; |
setting_is_wildcard = |
info.primary_pattern == ContentSettingsPattern::Wildcard() && |
@@ -354,12 +395,17 @@ void ContentSettingSingleRadioGroup::SetRadioGroup() { |
// In the corner case of unrecognized plugins (which are now blocked by |
// default) we indicate the blocked state in the UI and allow the user to |
// whitelist. |
- radio_group.default_item = 1; |
+ radio_group.default_item = 2; |
+ } else if (content_type() == CONTENT_SETTINGS_TYPE_PLUGINS && |
+ setting == CONTENT_SETTING_DEFAULT) { |
+ radio_group.default_item = kAllowOnceButtonIndex; |
} else if (setting == CONTENT_SETTING_ALLOW) { |
radio_group.default_item = kAllowButtonIndex; |
// |block_setting_| is already set to |CONTENT_SETTING_BLOCK|. |
} else { |
- radio_group.default_item = 1; |
+ content_type() == CONTENT_SETTINGS_TYPE_PLUGINS ? |
+ radio_group.default_item = 2 : |
+ radio_group.default_item = 1; |
block_setting_ = setting; |
} |
@@ -455,6 +501,7 @@ ContentSettingPluginBubbleModel::ContentSettingPluginBubbleModel( |
// Disable the "Run all plugins this time" link if the setting is managed and |
// can't be controlled by the user or if the user already clicked on the link |
// and ran all plugins. |
+ // TODO(radhikabhar) this might not be needed if we switch to the new UI |
set_custom_link_enabled(!setting_is_managed() && |
web_contents && |
TabSpecificContentSettings::FromWebContents( |
@@ -464,8 +511,9 @@ ContentSettingPluginBubbleModel::ContentSettingPluginBubbleModel( |
ContentSettingPluginBubbleModel::~ContentSettingPluginBubbleModel() { |
if (settings_changed()) { |
// If the user elected to allow all plugins then run plugins at this time. |
- if (selected_item() == kAllowButtonIndex) |
- OnCustomLinkClicked(); |
+ if (selected_item() == kAllowButtonIndex |
+ || selected_item() == kAllowOnceButtonIndex) |
+ OnCustomLinkClicked(); |
} |
} |