summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authortbarzic@chromium.org <tbarzic@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-05-29 20:19:12 +0000
committertbarzic@chromium.org <tbarzic@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-05-29 20:19:12 +0000
commit1fb417c16fd7b1600103ab569f63185a171d66c7 (patch)
tree5cb6206998ffd431f3e771da44b6f993167915a4
parenta00d41308b36209c36ccd624eef1e70556a75037 (diff)
downloadchromium_src-1fb417c16fd7b1600103ab569f63185a171d66c7.zip
chromium_src-1fb417c16fd7b1600103ab569f63185a171d66c7.tar.gz
chromium_src-1fb417c16fd7b1600103ab569f63185a171d66c7.tar.bz2
Show a UI explaining that an a11y preference is controlled by an extension
(a11y preferences may be changed by chrome.accessibilityFeatures API, which is curently enabled on dev channel) BUG=378014 TEST=Change some accessibility settings using chrome.accessibilityFeatures API and verify the 'extension-controlled' box is shown Review URL: https://codereview.chromium.org/305483008 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@273570 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/ui/webui/options/core_options_handler.cc46
1 files changed, 42 insertions, 4 deletions
diff --git a/chrome/browser/ui/webui/options/core_options_handler.cc b/chrome/browser/ui/webui/options/core_options_handler.cc
index 926224d..99e9f3a 100644
--- a/chrome/browser/ui/webui/options/core_options_handler.cc
+++ b/chrome/browser/ui/webui/options/core_options_handler.cc
@@ -25,7 +25,11 @@
#include "content/public/browser/notification_types.h"
#include "content/public/browser/user_metrics.h"
#include "content/public/browser/web_ui.h"
+#include "extensions/browser/extension_pref_value_map.h"
+#include "extensions/browser/extension_pref_value_map_factory.h"
+#include "extensions/browser/extension_registry.h"
#include "extensions/browser/extension_system.h"
+#include "extensions/common/extension.h"
#include "grit/chromium_strings.h"
#include "grit/generated_resources.h"
#include "grit/locale_settings.h"
@@ -51,6 +55,24 @@ bool AllowMetricsReportingChange(const base::Value* to_value) {
return enable == OptionsUtil::ResolveMetricsReportingEnabled(enable);
}
+// Whether "controlledBy" property of pref value sent to options web UI needs to
+// be set to "extension" when the preference is controlled by an extension.
+bool CanSetExtensionControlledPrefValue(
+ const PrefService::Preference* preference) {
+#if defined(OS_WIN)
+ // These have more obvious UI than the standard one for extension controlled
+ // values (an extension puzzle piece) on the settings page. To avoiding
+ // showing the extension puzzle piece for these settings, their "controlledBy"
+ // value should never be set to "extension".
+ return preference->name() != prefs::kURLsToRestoreOnStartup &&
+ preference->name() != prefs::kRestoreOnStartup &&
+ preference->name() != prefs::kHomePage &&
+ preference->name() != prefs::kHomePageIsNewTabPage;
+#else
+ return true;
+#endif
+}
+
} // namespace
CoreOptionsHandler::CoreOptionsHandler()
@@ -356,14 +378,30 @@ base::Value* CoreOptionsHandler::CreateValueForPref(
if (!controlling_pref)
controlling_pref = pref;
- // We don't show a UI here for extension controlled values because we opted to
- // show a more obvious UI than an extension puzzle piece on the settings page.
base::DictionaryValue* dict = new base::DictionaryValue;
dict->Set("value", pref->GetValue()->DeepCopy());
- if (controlling_pref->IsManaged())
+ if (controlling_pref->IsManaged()) {
dict->SetString("controlledBy", "policy");
- else if (controlling_pref->IsRecommended())
+ } else if (controlling_pref->IsExtensionControlled() &&
+ CanSetExtensionControlledPrefValue(controlling_pref)) {
+ Profile* profile = Profile::FromWebUI(web_ui());
+ ExtensionPrefValueMap* extension_pref_value_map =
+ ExtensionPrefValueMapFactory::GetForBrowserContext(profile);
+ std::string extension_id =
+ extension_pref_value_map->GetExtensionControllingPref(
+ controlling_pref->name());
+
+ const extensions::Extension* extension =
+ extensions::ExtensionRegistry::Get(profile)->GetExtensionById(
+ extension_id, extensions::ExtensionRegistry::EVERYTHING);
+ if (extension) {
+ dict->SetString("controlledBy", "extension");
+ dict->Set("extension",
+ extensions::util::GetExtensionInfo(extension).release());
+ }
+ } else if (controlling_pref->IsRecommended()) {
dict->SetString("controlledBy", "recommended");
+ }
const base::Value* recommended_value =
controlling_pref->GetRecommendedValue();