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

Unified Diff: chrome/browser/ui/content_settings/content_setting_bubble_model.cc

Issue 2561673003: Handle per-tab AUTOMATIC_DOWNLOADS setting in DownloadRequestLimiter. (Closed)
Patch Set: Get HostContentSettingsMap directly in DRL tests Created 3 years, 10 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/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 ce97047fda26b4cbdff20e096e5cf482d29d4eed..b4f858e79265e416a00cecf26752fda9e9df9e23 100644
--- a/chrome/browser/ui/content_settings/content_setting_bubble_model.cc
+++ b/chrome/browser/ui/content_settings/content_setting_bubble_model.cc
@@ -20,6 +20,7 @@
#include "chrome/browser/content_settings/tab_specific_content_settings.h"
#include "chrome/browser/custom_handlers/protocol_handler_registry.h"
#include "chrome/browser/custom_handlers/protocol_handler_registry_factory.h"
+#include "chrome/browser/download/download_request_limiter.h"
#include "chrome/browser/infobars/infobar_service.h"
#include "chrome/browser/media/webrtc/media_capture_devices_dispatcher.h"
#include "chrome/browser/permissions/permission_uma_util.h"
@@ -148,13 +149,11 @@ void ContentSettingSimpleBubbleModel::SetTitle() {
IDS_BLOCKED_DISPLAYING_INSECURE_CONTENT},
{CONTENT_SETTINGS_TYPE_PPAPI_BROKER,
IDS_BLOCKED_PPAPI_BROKER_TITLE},
- {CONTENT_SETTINGS_TYPE_AUTOMATIC_DOWNLOADS, IDS_BLOCKED_DOWNLOAD_TITLE},
};
// Fields as for kBlockedTitleIDs, above.
static const ContentSettingsTypeIdEntry kAccessedTitleIDs[] = {
{CONTENT_SETTINGS_TYPE_COOKIES, IDS_ACCESSED_COOKIES_TITLE},
{CONTENT_SETTINGS_TYPE_PPAPI_BROKER, IDS_ALLOWED_PPAPI_BROKER_TITLE},
- {CONTENT_SETTINGS_TYPE_AUTOMATIC_DOWNLOADS, IDS_ALLOWED_DOWNLOAD_TITLE},
};
const ContentSettingsTypeIdEntry* title_ids = kBlockedTitleIDs;
size_t num_title_ids = arraysize(kBlockedTitleIDs);
@@ -179,7 +178,6 @@ void ContentSettingSimpleBubbleModel::SetManageText() {
{CONTENT_SETTINGS_TYPE_MIXEDSCRIPT, IDS_LEARN_MORE},
{CONTENT_SETTINGS_TYPE_PROTOCOL_HANDLERS, IDS_HANDLERS_BUBBLE_MANAGE_LINK},
{CONTENT_SETTINGS_TYPE_PPAPI_BROKER, IDS_PPAPI_BROKER_BUBBLE_MANAGE_LINK},
- {CONTENT_SETTINGS_TYPE_AUTOMATIC_DOWNLOADS, IDS_BLOCKED_DOWNLOADS_LINK},
{CONTENT_SETTINGS_TYPE_MIDI_SYSEX, IDS_MIDI_SYSEX_BUBBLE_MANAGE_LINK},
};
set_manage_text(l10n_util::GetStringUTF8(
@@ -292,13 +290,11 @@ void ContentSettingSingleRadioGroup::SetRadioGroup() {
{CONTENT_SETTINGS_TYPE_PLUGINS, IDS_BLOCKED_PLUGINS_UNBLOCK_ALL},
{CONTENT_SETTINGS_TYPE_POPUPS, IDS_BLOCKED_POPUPS_UNBLOCK},
{CONTENT_SETTINGS_TYPE_PPAPI_BROKER, IDS_BLOCKED_PPAPI_BROKER_UNBLOCK},
- {CONTENT_SETTINGS_TYPE_AUTOMATIC_DOWNLOADS, IDS_BLOCKED_DOWNLOAD_UNBLOCK},
};
// Fields as for kBlockedAllowIDs, above.
static const ContentSettingsTypeIdEntry kAllowedAllowIDs[] = {
{CONTENT_SETTINGS_TYPE_COOKIES, IDS_ALLOWED_COOKIES_NO_ACTION},
{CONTENT_SETTINGS_TYPE_PPAPI_BROKER, IDS_ALLOWED_PPAPI_BROKER_NO_ACTION},
- {CONTENT_SETTINGS_TYPE_AUTOMATIC_DOWNLOADS, IDS_ALLOWED_DOWNLOAD_NO_ACTION},
};
std::string radio_allow_label;
@@ -321,12 +317,10 @@ void ContentSettingSingleRadioGroup::SetRadioGroup() {
{CONTENT_SETTINGS_TYPE_PLUGINS, IDS_BLOCKED_PLUGINS_NO_ACTION},
{CONTENT_SETTINGS_TYPE_POPUPS, IDS_BLOCKED_POPUPS_NO_ACTION},
{CONTENT_SETTINGS_TYPE_PPAPI_BROKER, IDS_BLOCKED_PPAPI_BROKER_NO_ACTION},
- {CONTENT_SETTINGS_TYPE_AUTOMATIC_DOWNLOADS, IDS_BLOCKED_DOWNLOAD_NO_ACTION},
};
static const ContentSettingsTypeIdEntry kAllowedBlockIDs[] = {
{CONTENT_SETTINGS_TYPE_COOKIES, IDS_ALLOWED_COOKIES_BLOCK},
{CONTENT_SETTINGS_TYPE_PPAPI_BROKER, IDS_ALLOWED_PPAPI_BROKER_BLOCK},
- {CONTENT_SETTINGS_TYPE_AUTOMATIC_DOWNLOADS, IDS_ALLOWED_DOWNLOAD_BLOCK},
};
std::string radio_block_label;
@@ -1361,6 +1355,120 @@ void ContentSettingMidiSysExBubbleModel::OnCustomLinkClicked() {
}
}
+// ContentSettingDownloadsBubbleModel ------------------------------------------
+
+ContentSettingDownloadsBubbleModel::ContentSettingDownloadsBubbleModel(
+ Delegate* delegate,
+ WebContents* web_contents,
+ Profile* profile)
+ : ContentSettingBubbleModel(delegate, web_contents, profile) {
+ SetTitle();
+ SetManageText();
+ SetRadioGroup();
+}
+
+ContentSettingDownloadsBubbleModel::~ContentSettingDownloadsBubbleModel() {
+ if (profile() &&
+ selected_item_ != bubble_content().radio_group.default_item) {
+ ContentSetting setting = selected_item_ == kAllowButtonIndex
+ ? CONTENT_SETTING_ALLOW
+ : CONTENT_SETTING_BLOCK;
+ auto* map = HostContentSettingsMapFactory::GetForProfile(profile());
+ map->SetNarrowestContentSetting(
+ bubble_content().radio_group.url, bubble_content().radio_group.url,
+ CONTENT_SETTINGS_TYPE_AUTOMATIC_DOWNLOADS, setting);
+ }
+}
+
+ContentSettingDownloadsBubbleModel*
+ContentSettingDownloadsBubbleModel::AsDownloadsBubbleModel() {
+ return this;
+}
+
+// Initialize the radio group by setting the appropriate labels for the
+// content type and setting the default value based on the content setting.
+void ContentSettingDownloadsBubbleModel::SetRadioGroup() {
+ GURL url = web_contents()->GetURL();
+ base::string16 display_host = url_formatter::FormatUrlForSecurityDisplay(url);
+ if (display_host.empty())
+ display_host = base::ASCIIToUTF16(url.spec());
+
+ DownloadRequestLimiter* download_request_limiter =
+ g_browser_process->download_request_limiter();
+ DCHECK(download_request_limiter);
+
+ RadioGroup radio_group;
+ radio_group.url = url;
+ switch (download_request_limiter->GetDownloadStatus(web_contents())) {
+ case DownloadRequestLimiter::ALLOW_ALL_DOWNLOADS:
+ radio_group.radio_items.push_back(
+ l10n_util::GetStringUTF8(IDS_ALLOWED_DOWNLOAD_NO_ACTION));
+ radio_group.radio_items.push_back(
+ l10n_util::GetStringFUTF8(IDS_ALLOWED_DOWNLOAD_BLOCK, display_host));
+ radio_group.default_item = kAllowButtonIndex;
+ break;
+ case DownloadRequestLimiter::DOWNLOADS_NOT_ALLOWED:
+ radio_group.radio_items.push_back(l10n_util::GetStringFUTF8(
+ IDS_BLOCKED_DOWNLOAD_UNBLOCK, display_host));
+ radio_group.radio_items.push_back(
+ l10n_util::GetStringUTF8(IDS_BLOCKED_DOWNLOAD_NO_ACTION));
+ radio_group.default_item = 1;
+ break;
+ default:
+ NOTREACHED();
+ return;
+ }
+ set_radio_group(radio_group);
+ selected_item_ = radio_group.default_item;
+
+ SettingInfo info;
+ HostContentSettingsMap* map =
+ HostContentSettingsMapFactory::GetForProfile(profile());
+ map->GetWebsiteSetting(url, url, CONTENT_SETTINGS_TYPE_AUTOMATIC_DOWNLOADS,
+ std::string(), &info);
+
+ // Prevent creation of content settings for illegal urls like about:blank
+ bool is_valid = map->CanSetNarrowestContentSetting(
+ url, url, CONTENT_SETTINGS_TYPE_AUTOMATIC_DOWNLOADS);
+
+ set_radio_group_enabled(is_valid && info.source == SETTING_SOURCE_USER);
+}
+
+void ContentSettingDownloadsBubbleModel::OnRadioClicked(int radio_index) {
+ selected_item_ = radio_index;
+}
+
+void ContentSettingDownloadsBubbleModel::SetTitle() {
+ if (!web_contents())
+ return;
+
+ DownloadRequestLimiter* download_request_limiter =
+ g_browser_process->download_request_limiter();
+ DCHECK(download_request_limiter);
+
+ switch (download_request_limiter->GetDownloadStatus(web_contents())) {
+ case DownloadRequestLimiter::ALLOW_ALL_DOWNLOADS:
+ set_title(l10n_util::GetStringUTF16(IDS_ALLOWED_DOWNLOAD_TITLE));
+ return;
+ case DownloadRequestLimiter::DOWNLOADS_NOT_ALLOWED:
+ set_title(l10n_util::GetStringUTF16(IDS_BLOCKED_DOWNLOAD_TITLE));
+ return;
+ default:
+ // No title otherwise.
+ return;
+ }
+}
+
+void ContentSettingDownloadsBubbleModel::SetManageText() {
+ set_manage_text(l10n_util::GetStringUTF8(IDS_BLOCKED_DOWNLOADS_LINK));
+}
+
+void ContentSettingDownloadsBubbleModel::OnManageLinkClicked() {
+ if (delegate())
+ delegate()->ShowContentSettingsPage(
+ CONTENT_SETTINGS_TYPE_AUTOMATIC_DOWNLOADS);
+}
+
// ContentSettingBubbleModel ---------------------------------------------------
// static
@@ -1400,11 +1508,14 @@ ContentSettingBubbleModel*
}
if (content_type == CONTENT_SETTINGS_TYPE_IMAGES ||
content_type == CONTENT_SETTINGS_TYPE_JAVASCRIPT ||
- content_type == CONTENT_SETTINGS_TYPE_PPAPI_BROKER ||
- content_type == CONTENT_SETTINGS_TYPE_AUTOMATIC_DOWNLOADS) {
+ content_type == CONTENT_SETTINGS_TYPE_PPAPI_BROKER) {
return new ContentSettingSingleRadioGroup(delegate, web_contents, profile,
content_type);
}
+ if (content_type == CONTENT_SETTINGS_TYPE_AUTOMATIC_DOWNLOADS) {
+ return new ContentSettingDownloadsBubbleModel(delegate, web_contents,
+ profile);
+ }
NOTREACHED() << "No bubble for the content type " << content_type << ".";
return nullptr;
}
@@ -1481,3 +1592,8 @@ ContentSettingSubresourceFilterBubbleModel*
ContentSettingBubbleModel::AsSubresourceFilterBubbleModel() {
return nullptr;
}
+
+ContentSettingDownloadsBubbleModel*
+ContentSettingBubbleModel::AsDownloadsBubbleModel() {
+ return nullptr;
+}

Powered by Google App Engine
This is Rietveld 408576698