summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/app/theme/theme_resources.grd1
-rw-r--r--chrome/browser/content_settings/content_settings_extension_provider.h4
-rw-r--r--chrome/browser/content_settings/content_settings_pref_provider.cc1
-rw-r--r--chrome/browser/content_settings/host_content_settings_map.cc56
-rw-r--r--chrome/browser/content_settings/host_content_settings_map.h5
-rw-r--r--chrome/browser/plugin_exceptions_table_model.cc8
-rw-r--r--chrome/browser/resources/options/content_settings.css19
-rw-r--r--chrome/browser/resources/options/content_settings_exceptions_area.js8
-rw-r--r--chrome/browser/ui/webui/options/content_settings_handler.cc17
9 files changed, 79 insertions, 40 deletions
diff --git a/chrome/app/theme/theme_resources.grd b/chrome/app/theme/theme_resources.grd
index 91e3dbc..7a0b200 100644
--- a/chrome/app/theme/theme_resources.grd
+++ b/chrome/app/theme/theme_resources.grd
@@ -367,6 +367,7 @@
<include name="IDR_UPDATE_MENU4" file="update_menu4.png" type="BINDATA" />
<include name="IDR_UPDATE_UPTODATE" file="update_uptodate.png" type="BINDATA" />
<include name="IDR_WARNING" file="alert_small.png" type="BINDATA" />
+ <include name="IDR_MANAGED" file="managed_small.png" type="BINDATA" />
<if expr="pp_ifdef('_google_chrome')">
<include name="IDR_WEBSTORE_ICON" file="google_chrome/webstore_icon.png" type="BINDATA" />
<include name="IDR_WEBSTORE_ICON_16" file="google_chrome/webstore_icon_16.png" type="BINDATA" />
diff --git a/chrome/browser/content_settings/content_settings_extension_provider.h b/chrome/browser/content_settings/content_settings_extension_provider.h
index 2bc8e96..06c2569 100644
--- a/chrome/browser/content_settings/content_settings_extension_provider.h
+++ b/chrome/browser/content_settings/content_settings_extension_provider.h
@@ -5,6 +5,8 @@
#ifndef CHROME_BROWSER_CONTENT_SETTINGS_CONTENT_SETTINGS_EXTENSION_PROVIDER_H_
#define CHROME_BROWSER_CONTENT_SETTINGS_CONTENT_SETTINGS_EXTENSION_PROVIDER_H_
+#include <string>
+
#include "chrome/browser/content_settings/content_settings_provider.h"
#include "chrome/browser/extensions/extension_content_settings_store.h"
@@ -37,8 +39,6 @@ class ExtensionProvider : public ProviderInterface,
const ResourceIdentifier& resource_identifier,
ContentSetting content_setting) {}
- // TODO(markusheintz): The UI needs a way to discover that these rules are
- // managed by an extension.
virtual void GetAllContentSettingsRules(
ContentSettingsType content_type,
const ResourceIdentifier& resource_identifier,
diff --git a/chrome/browser/content_settings/content_settings_pref_provider.cc b/chrome/browser/content_settings/content_settings_pref_provider.cc
index 027718a..3474166 100644
--- a/chrome/browser/content_settings/content_settings_pref_provider.cc
+++ b/chrome/browser/content_settings/content_settings_pref_provider.cc
@@ -4,6 +4,7 @@
#include "chrome/browser/content_settings/content_settings_pref_provider.h"
+#include <list>
#include <string>
#include <utility>
#include <vector>
diff --git a/chrome/browser/content_settings/host_content_settings_map.cc b/chrome/browser/content_settings/host_content_settings_map.cc
index 0c6bf93..102c560 100644
--- a/chrome/browser/content_settings/host_content_settings_map.cc
+++ b/chrome/browser/content_settings/host_content_settings_map.cc
@@ -4,6 +4,8 @@
#include "chrome/browser/content_settings/host_content_settings_map.h"
+#include <list>
+
#include "base/command_line.h"
#include "base/string_util.h"
#include "base/utf_string_conversions.h"
@@ -58,6 +60,12 @@ typedef content_settings::ProviderInterface::Rules::iterator
typedef content_settings::ProviderInterface::Rules::const_iterator
const_rules_iterator;
+const char* kProviderNames[] = {
+ "policy",
+ "extension",
+ "preference"
+};
+
} // namespace
HostContentSettingsMap::HostContentSettingsMap(Profile* profile)
@@ -290,41 +298,35 @@ void HostContentSettingsMap::GetSettingsForOneType(
DCHECK_NE(content_settings::RequiresResourceIdentifier(content_type),
resource_identifier.empty());
DCHECK(settings);
- // Collect content_settings::Rules for the given content_type and
- // resource_identifier from the content settings providers.
- std::map<std::string, PatternSettingPair>
- pattern_str_pattern_setting_pair_map;
- for (ConstProviderIterator provider = content_settings_providers_.begin();
- provider != content_settings_providers_.end();
- ++provider) {
+
+ settings->clear();
+ for (size_t i = 0; i < content_settings_providers_.size(); ++i) {
+ // Get rules from the content settings provider.
Rules rules;
- (*provider)->GetAllContentSettingsRules(
+ content_settings_providers_[i]->GetAllContentSettingsRules(
content_type, resource_identifier, &rules);
- // TODO(markusheintz): Only the rules that are applied should be collected.
+
+ // Sort rules according to their primary pattern string using a map.
+ std::map<std::string, PatternSettingSourceTriple> settings_map;
for (Rules::iterator rule = rules.begin();
rule != rules.end();
++rule) {
- // As long as we don't support pattern pairs in the UI we display the
+ // We do not support pattern pairs in the UI, so we only display the
// primary pattern.
- ContentSettingsPattern pattern = rule->primary_pattern;
- std::string key = pattern.ToString();
- // Only add a rule if no provider with a higher priority has a rule with
- // an identical primary pattern.
- if (pattern_str_pattern_setting_pair_map.find(key) ==
- pattern_str_pattern_setting_pair_map.end()) {
- pattern_str_pattern_setting_pair_map[key] =
- PatternSettingPair(pattern, rule->content_setting);
- }
+ std::string sort_key = rule->primary_pattern.ToString();
+ settings_map[sort_key] = PatternSettingSourceTriple(
+ rule->primary_pattern,
+ rule->content_setting,
+ kProviderNames[i]);
}
- }
- settings->clear();
- // Rely on the maps iterator to sort the rules.
- for (std::map<std::string, PatternSettingPair>::iterator i(
- pattern_str_pattern_setting_pair_map.begin());
- i != pattern_str_pattern_setting_pair_map.end();
- ++i) {
- settings->push_back(i->second);
+ // TODO(markusheintz): Only the rules that are applied should be added.
+ for (std::map<std::string, PatternSettingSourceTriple>::iterator i(
+ settings_map.begin());
+ i != settings_map.end();
+ ++i) {
+ settings->push_back(i->second);
+ }
}
}
diff --git a/chrome/browser/content_settings/host_content_settings_map.h b/chrome/browser/content_settings/host_content_settings_map.h
index dcb48cf..a4ed56f 100644
--- a/chrome/browser/content_settings/host_content_settings_map.h
+++ b/chrome/browser/content_settings/host_content_settings_map.h
@@ -41,8 +41,9 @@ class HostContentSettingsMap
public base::RefCountedThreadSafe<HostContentSettingsMap,
BrowserThread::DeleteOnUIThread> {
public:
- typedef std::pair<ContentSettingsPattern, ContentSetting> PatternSettingPair;
- typedef std::vector<PatternSettingPair> SettingsForOneType;
+ typedef Tuple3<ContentSettingsPattern, ContentSetting, std::string>
+ PatternSettingSourceTriple;
+ typedef std::vector<PatternSettingSourceTriple> SettingsForOneType;
explicit HostContentSettingsMap(Profile* profile);
diff --git a/chrome/browser/plugin_exceptions_table_model.cc b/chrome/browser/plugin_exceptions_table_model.cc
index 365c538..1cf2a69 100644
--- a/chrome/browser/plugin_exceptions_table_model.cc
+++ b/chrome/browser/plugin_exceptions_table_model.cc
@@ -162,9 +162,9 @@ void PluginExceptionsTableModel::LoadSettings() {
settings.begin();
setting_it != settings.end(); ++setting_it) {
SettingsEntry entry = {
- setting_it->first,
+ setting_it->a,
group_id,
- setting_it->second,
+ setting_it->b,
false
};
settings_.push_back(entry);
@@ -173,9 +173,9 @@ void PluginExceptionsTableModel::LoadSettings() {
otr_settings.begin();
setting_it != otr_settings.end(); ++setting_it) {
SettingsEntry entry = {
- setting_it->first,
+ setting_it->a,
group_id,
- setting_it->second,
+ setting_it->b,
true
};
settings_.push_back(entry);
diff --git a/chrome/browser/resources/options/content_settings.css b/chrome/browser/resources/options/content_settings.css
index babbf17..d48c6a0 100644
--- a/chrome/browser/resources/options/content_settings.css
+++ b/chrome/browser/resources/options/content_settings.css
@@ -50,3 +50,22 @@ select.exception-setting {
display: block;
margin: 7px 0px;
}
+
+div[role="listitem"][managedby] {
+ color: #666;
+ font-style: italic;
+ position: relative;
+}
+
+div[role="listitem"][managedby="policy"][selected][lead],
+div[role="listitem"][managedby="policy"][selected],
+div[role="listitem"][managedby="policy"] {
+ background: -webkit-linear-gradient(#fff1b5, #fae692);
+ border-top: 0;
+ border-bottom: 1px solid #c9bd8d;
+}
+
+list div[role="listitem"][managedby="policy"] .close-button {
+ background-image: url("chrome://theme/IDR_MANAGED");
+ opacity: 1;
+}
diff --git a/chrome/browser/resources/options/content_settings_exceptions_area.js b/chrome/browser/resources/options/content_settings_exceptions_area.js
index 8609725..fcc3e7b 100644
--- a/chrome/browser/resources/options/content_settings_exceptions_area.js
+++ b/chrome/browser/resources/options/content_settings_exceptions_area.js
@@ -115,6 +115,14 @@ cr.define('options.contentSettings', function() {
this.editable = false;
}
+ // If the source of the content setting exception is a policy, then the
+ // content settings exception is managed and the user can't edit it.
+ if (this.dataItem.source == 'policy') {
+ this.setAttribute('managedby', this.dataItem.source);
+ this.deletable = false;
+ this.editable = false;
+ }
+
var listItem = this;
// Handle events on the editable nodes.
input.oninput = function(event) {
diff --git a/chrome/browser/ui/webui/options/content_settings_handler.cc b/chrome/browser/ui/webui/options/content_settings_handler.cc
index 35f4461..9047d97 100644
--- a/chrome/browser/ui/webui/options/content_settings_handler.cc
+++ b/chrome/browser/ui/webui/options/content_settings_handler.cc
@@ -42,6 +42,7 @@ struct ContentSettingsTypeNameEntry {
const char* kDisplayPattern = "displayPattern";
const char* kSetting = "setting";
const char* kOrigin = "origin";
+const char* kSource = "source";
const char* kEmbeddingOrigin = "embeddingOrigin";
const ContentSettingsTypeNameEntry kContentSettingsTypeGroupNames[] = {
@@ -124,7 +125,8 @@ std::string GeolocationExceptionToString(const GURL& origin,
// Ownership of the pointer is passed to the caller.
DictionaryValue* GetExceptionForPage(
const ContentSettingsPattern& pattern,
- ContentSetting setting) {
+ ContentSetting setting,
+ std::string provider_name) {
DictionaryValue* exception = new DictionaryValue();
exception->Set(
kDisplayPattern,
@@ -132,6 +134,9 @@ DictionaryValue* GetExceptionForPage(
exception->Set(
kSetting,
new StringValue(ContentSettingToString(setting)));
+ exception->Set(
+ kSource,
+ new StringValue(provider_name));
return exception;
}
@@ -402,7 +407,7 @@ void ContentSettingsHandler::UpdateHandlersEnabledRadios() {
web_ui_->CallJavascriptFunction("ContentSettings.updateHandlersEnabledRadios",
handlers_enabled);
-#endif // defined(ENABLE_REGISTER_PROTOCOL_HANDLER)
+#endif // defined(ENABLE_REGISTER_PROTOCOL_HANDLER)
}
void ContentSettingsHandler::UpdateAllExceptionsViewsFromModel() {
@@ -524,7 +529,8 @@ void ContentSettingsHandler::UpdateExceptionsViewFromHostContentSettingsMap(
ListValue exceptions;
for (size_t i = 0; i < entries.size(); ++i) {
- exceptions.Append(GetExceptionForPage(entries[i].first, entries[i].second));
+ exceptions.Append(
+ GetExceptionForPage(entries[i].a, entries[i].b, entries[i].c));
}
StringValue type_string(ContentSettingsTypeToGroupName(type));
@@ -549,8 +555,9 @@ void ContentSettingsHandler::UpdateExceptionsViewFromOTRHostContentSettingsMap(
ListValue otr_exceptions;
for (size_t i = 0; i < otr_entries.size(); ++i) {
- otr_exceptions.Append(GetExceptionForPage(otr_entries[i].first,
- otr_entries[i].second));
+ otr_exceptions.Append(GetExceptionForPage(otr_entries[i].a,
+ otr_entries[i].b,
+ otr_entries[i].c));
}
StringValue type_string(ContentSettingsTypeToGroupName(type));