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

Unified Diff: chrome/browser/ui/webui/options2/content_settings_handler2.cc

Issue 10537099: add "always allow" option to the mediastream infobar and allow user to allow/not allow acces to devi (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: use only content settings, added a device controller, addressed all the comments Created 8 years, 6 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/webui/options2/content_settings_handler2.cc
diff --git a/chrome/browser/ui/webui/options2/content_settings_handler2.cc b/chrome/browser/ui/webui/options2/content_settings_handler2.cc
index 1e27409db825e8f04ec5d4183aa9471479896527..a28d73fbcf01384d8736fbfb45e4cd9e0f6c2abe 100644
--- a/chrome/browser/ui/webui/options2/content_settings_handler2.cc
+++ b/chrome/browser/ui/webui/options2/content_settings_handler2.cc
@@ -80,6 +80,7 @@ const ContentSettingsTypeNameEntry kContentSettingsTypeGroupNames[] = {
{CONTENT_SETTINGS_TYPE_AUTO_SELECT_CERTIFICATE, "auto-select-certificate"},
{CONTENT_SETTINGS_TYPE_FULLSCREEN, "fullscreen"},
{CONTENT_SETTINGS_TYPE_MOUSELOCK, "mouselock"},
+ {CONTENT_SETTINGS_TYPE_MEDIASTREAM, "mediastream"},
};
COMPILE_ASSERT(arraysize(kContentSettingsTypeGroupNames) ==
CONTENT_SETTINGS_NUM_TYPES,
@@ -197,6 +198,19 @@ DictionaryValue* GetNotificationExceptionForPage(
return exception;
}
+// Create a DictionaryValue* that will act as a data source for a single row
+// in the mediastream exceptions table. Ownership of the pointer is
+// passed to the caller.
+DictionaryValue* GetMediaStreamExceptionForPage(
+ const ContentSettingsPattern& pattern) {
+ DictionaryValue* exception = new DictionaryValue();
+ exception->SetString(kDisplayPattern, pattern.ToString());
+ exception->SetString(kSetting, ContentSettingToString(CONTENT_SETTING_ALLOW));
+ exception->SetString(kOrigin, pattern.ToString());
+ exception->SetString(kSource, std::string());
+ return exception;
+}
+
// Add an "Allow"-entry to the list of |exceptions| for a |url_pattern| from
// the web extent of a hosted |app|.
void AddExceptionForHostedApp(const std::string& url_pattern,
@@ -334,6 +348,11 @@ void ContentSettingsHandler::GetLocalizedValues(
{ "protectedContentInfo", IDS_PROTECTED_CONTENT_INFO },
{ "protectedContentEnable", IDS_PROTECTED_CONTENT_ENABLE},
#endif // defined(OS_CHROMEOS)
+ // Media stream capture device filter.
+ { "mediastream_tab_label", IDS_MEDIA_STREAM_TAB_LABEL },
+ { "mediastream_header", IDS_MEDIA_STREAM_HEADER },
+ { "mediastream_ask", IDS_MEDIA_STREAM_ASK_RADIO },
+ { "mediastream_block", IDS_MEDIA_STREAM_BLOCK_RADIO },
};
RegisterStrings(localized_strings, resources, arraysize(resources));
@@ -360,6 +379,8 @@ void ContentSettingsHandler::GetLocalizedValues(
IDS_FULLSCREEN_TAB_LABEL);
RegisterTitle(localized_strings, "mouselock",
IDS_MOUSE_LOCK_TAB_LABEL);
+ RegisterTitle(localized_strings, "mediastream",
+ IDS_MEDIA_STREAM_TAB_LABEL);
Profile* profile = Profile::FromWebUI(web_ui());
localized_strings->SetBoolean(
@@ -536,6 +557,9 @@ void ContentSettingsHandler::UpdateExceptionsViewFromModel(
case CONTENT_SETTINGS_TYPE_NOTIFICATIONS:
UpdateNotificationExceptionsView();
break;
+ case CONTENT_SETTINGS_TYPE_MEDIASTREAM:
+ UpdateMediaStreamExceptionsView();
+ break;
default:
UpdateExceptionsViewFromHostContentSettingsMap(type);
break;
@@ -549,6 +573,8 @@ void ContentSettingsHandler::UpdateOTRExceptionsViewFromModel(
case CONTENT_SETTINGS_TYPE_NOTIFICATIONS:
case CONTENT_SETTINGS_TYPE_INTENTS:
case CONTENT_SETTINGS_TYPE_AUTO_SELECT_CERTIFICATE:
+ case CONTENT_SETTINGS_TYPE_MEDIASTREAM:
+ // TODO(xians): Add MediaStream support to OTRExceptionsView.
break;
default:
UpdateExceptionsViewFromOTRHostContentSettingsMap(type);
@@ -663,6 +689,34 @@ void ContentSettingsHandler::UpdateNotificationExceptionsView() {
UpdateSettingDefaultFromModel(CONTENT_SETTINGS_TYPE_NOTIFICATIONS);
}
+void ContentSettingsHandler::UpdateMediaStreamExceptionsView() {
+ ContentSettingsForOneType entries;
+ GetContentSettingsMap()->GetSettingsForOneType(
+ CONTENT_SETTINGS_TYPE_MEDIASTREAM, "", &entries);
+
+ ListValue exceptions;
+ for (size_t i = 0; i < entries.size(); ++i) {
+ // Don't add default settings.
+ if (entries[i].primary_pattern == ContentSettingsPattern::Wildcard() &&
+ entries[i].secondary_pattern == ContentSettingsPattern::Wildcard() &&
+ entries[i].source != "preference") {
+ continue;
+ }
+
+ exceptions.Append(
+ GetMediaStreamExceptionForPage(entries[i].primary_pattern));
+ }
+
+ StringValue type_string(ContentSettingsTypeToGroupName(
+ CONTENT_SETTINGS_TYPE_MEDIASTREAM));
+ web_ui()->CallJavascriptFunction("ContentSettings.setExceptions", type_string,
+ exceptions);
+
+ // This is mainly here to keep this function ideologically parallel to
+ // UpdateExceptionsViewFromHostContentSettingsMap().
+ UpdateSettingDefaultFromModel(CONTENT_SETTINGS_TYPE_MEDIASTREAM);
+}
+
void ContentSettingsHandler::UpdateExceptionsViewFromHostContentSettingsMap(
ContentSettingsType type) {
ContentSettingsForOneType entries;
@@ -857,6 +911,10 @@ void ContentSettingsHandler::SetContentFilter(const ListValue* args) {
content::RecordAction(
UserMetricsAction("Options_DefaultMouseLockSettingChanged"));
break;
+ case CONTENT_SETTINGS_TYPE_MEDIASTREAM:
+ content::RecordAction(
+ UserMetricsAction("Options_DefaultMediaStreamSettingChanged"));
+ break;
default:
break;
}
@@ -911,12 +969,23 @@ void ContentSettingsHandler::RemoveException(const ListValue* args) {
// The settings map could be null if the mode was OTR but the OTR profile
// got destroyed before we received this message.
if (settings_map) {
- settings_map->SetContentSetting(
- ContentSettingsPattern::FromString(pattern),
- ContentSettingsPattern::Wildcard(),
- ContentSettingsTypeFromGroupName(type_string),
- "",
- CONTENT_SETTING_DEFAULT);
+ // MediaStream is using compound value, so we need to use
+ // SetWebsiteSetting instead of SetContentSetting.
+ if (type == CONTENT_SETTINGS_TYPE_MEDIASTREAM) {
+ settings_map->SetWebsiteSetting(
+ ContentSettingsPattern::FromString(pattern),
+ ContentSettingsPattern::Wildcard(),
+ ContentSettingsTypeFromGroupName(type_string),
+ "",
+ NULL);
+ } else {
+ settings_map->SetContentSetting(
+ ContentSettingsPattern::FromString(pattern),
+ ContentSettingsPattern::Wildcard(),
+ ContentSettingsTypeFromGroupName(type_string),
+ "",
+ CONTENT_SETTING_DEFAULT);
+ }
}
}
}
@@ -934,7 +1003,8 @@ void ContentSettingsHandler::SetException(const ListValue* args) {
ContentSettingsType type = ContentSettingsTypeFromGroupName(type_string);
if (type == CONTENT_SETTINGS_TYPE_GEOLOCATION ||
- type == CONTENT_SETTINGS_TYPE_NOTIFICATIONS) {
+ type == CONTENT_SETTINGS_TYPE_NOTIFICATIONS ||
+ type == CONTENT_SETTINGS_TYPE_MEDIASTREAM) {
NOTREACHED();
return;
}

Powered by Google App Engine
This is Rietveld 408576698