Chromium Code Reviews| Index: chrome/browser/ui/webui/options/core_options_handler.cc |
| =================================================================== |
| --- chrome/browser/ui/webui/options/core_options_handler.cc (revision 106059) |
| +++ chrome/browser/ui/webui/options/core_options_handler.cc (working copy) |
| @@ -15,7 +15,6 @@ |
| #include "chrome/browser/browser_process.h" |
| #include "chrome/browser/google/google_util.h" |
| #include "chrome/browser/net/url_fixer_upper.h" |
| -#include "chrome/browser/prefs/pref_service.h" |
| #include "chrome/browser/profiles/profile.h" |
| #include "chrome/common/chrome_notification_types.h" |
| #include "chrome/common/pref_names.h" |
| @@ -30,33 +29,6 @@ |
| #include "grit/theme_resources.h" |
| #include "ui/base/l10n/l10n_util.h" |
| -namespace { |
| - |
| -DictionaryValue* CreateValueForPref(const PrefService* pref_service, |
| - const PrefService::Preference* pref) { |
| - DictionaryValue* dict = new DictionaryValue; |
| - dict->Set("value", pref->GetValue()->DeepCopy()); |
| - const PrefService::Preference* controlling_pref = pref; |
| -#if defined(OS_CHROMEOS) |
| - // For use-shared-proxies pref, the proxy pref determines if the former is |
| - // modifiable or managed by policy/extension. |
| - if (pref->name() == prefs::kUseSharedProxies) { |
| - controlling_pref = pref_service->FindPreference(prefs::kProxy); |
| - if (!controlling_pref) |
| - return dict; |
| - } |
| -#endif // defined(OS_CHROMEOS) |
| - if (controlling_pref->IsManaged()) { |
| - dict->SetString("controlledBy", "policy"); |
| - } else if (controlling_pref->IsExtensionControlled()) { |
| - dict->SetString("controlledBy", "extension"); |
| - } |
| - dict->SetBoolean("disabled", !controlling_pref->IsUserModifiable()); |
| - return dict; |
| -} |
| - |
| -} // namespace |
| - |
| CoreOptionsHandler::CoreOptionsHandler() |
| : handlers_host_(NULL) { |
| } |
| @@ -138,8 +110,15 @@ |
| void CoreOptionsHandler::Observe(int type, |
| const NotificationSource& source, |
| const NotificationDetails& details) { |
| - if (type == chrome::NOTIFICATION_PREF_CHANGED) |
| - NotifyPrefChanged(Details<std::string>(details).ptr()); |
| + if (type == chrome::NOTIFICATION_PREF_CHANGED) { |
| + std::string* pref_name = Details<std::string>(details).ptr(); |
| + if (*pref_name == prefs::kClearPluginLSODataEnabled) { |
| + // This preference is stored in Local State, not in the user preferences. |
| + UpdateClearPluginLSOData(); |
| + return; |
| + } |
| + NotifyPrefChanged(*pref_name, std::string()); |
| + } |
| } |
| void CoreOptionsHandler::RegisterMessages() { |
| @@ -191,7 +170,7 @@ |
| if (!pref) |
| return Value::CreateNullValue(); |
| - return CreateValueForPref(pref_service, pref); |
| + return CreateValueForPref(pref, NULL); |
| } |
| void CoreOptionsHandler::ObservePref(const std::string& pref_name) { |
| @@ -245,6 +224,46 @@ |
| UserMetrics::RecordComputedAction(metric_string); |
| } |
| +void CoreOptionsHandler::NotifyPrefChanged(const std::string& pref_name, |
| + const std::string& controlling_pref_name) { |
|
Mattias Nissler (ping if slow)
2011/10/19 19:27:36
parameters should be aligned
kuan
2011/10/20 00:41:11
Done.
|
| + const PrefService* pref_service = Profile::FromWebUI(web_ui_)->GetPrefs(); |
| + const PrefService::Preference* pref = |
| + pref_service->FindPreference(pref_name.c_str()); |
| + if (!pref) |
| + return; |
| + const PrefService::Preference* controlling_pref = |
| + !controlling_pref_name.empty() ? |
| + pref_service->FindPreference(controlling_pref_name.c_str()) : NULL; |
| + std::pair<PreferenceCallbackMap::const_iterator, |
| + PreferenceCallbackMap::const_iterator> range; |
| + range = pref_callback_map_.equal_range(pref_name); |
| + for (PreferenceCallbackMap::const_iterator iter = range.first; |
| + iter != range.second; ++iter) { |
| + const std::wstring& callback_function = iter->second; |
| + ListValue result_value; |
| + result_value.Append(Value::CreateStringValue(pref_name.c_str())); |
| + result_value.Append(CreateValueForPref(pref, controlling_pref)); |
| + web_ui_->CallJavascriptFunction(WideToASCII(callback_function), |
| + result_value); |
| + } |
| +} |
| + |
| +DictionaryValue* CoreOptionsHandler::CreateValueForPref( |
| + const PrefService::Preference* pref, |
| + const PrefService::Preference* controlling_pref) { |
| + DictionaryValue* dict = new DictionaryValue; |
| + dict->Set("value", pref->GetValue()->DeepCopy()); |
| + if (!controlling_pref) // No controlling pref is managing actual pref. |
| + controlling_pref = pref; // This means pref is controlling itself. |
| + if (controlling_pref->IsManaged()) { |
| + dict->SetString("controlledBy", "policy"); |
| + } else if (controlling_pref->IsExtensionControlled()) { |
| + dict->SetString("controlledBy", "extension"); |
| + } |
| + dict->SetBoolean("disabled", !controlling_pref->IsUserModifiable()); |
| + return dict; |
| +} |
| + |
| void CoreOptionsHandler::StopObservingPref(const std::string& path) { |
| registrar_.Remove(path.c_str(), this); |
| } |
| @@ -427,32 +446,3 @@ |
| web_ui_->CallJavascriptFunction( |
| "OptionsPage.setClearPluginLSODataEnabled", *enabled); |
| } |
| - |
| -void CoreOptionsHandler::NotifyPrefChanged(const std::string* pref_name) { |
| - if (*pref_name == prefs::kClearPluginLSODataEnabled) { |
| - // This preference is stored in Local State, not in the user preferences. |
| - UpdateClearPluginLSOData(); |
| - return; |
| - } |
| - |
| - PrefService* pref_service = Profile::FromWebUI(web_ui_)->GetPrefs(); |
| - const PrefService::Preference* pref = |
| - pref_service->FindPreference(pref_name->c_str()); |
| - if (!pref) |
| - return; |
| - |
| - std::pair<PreferenceCallbackMap::const_iterator, |
| - PreferenceCallbackMap::const_iterator> range; |
| - range = pref_callback_map_.equal_range(*pref_name); |
| - for (PreferenceCallbackMap::const_iterator iter = range.first; |
| - iter != range.second; ++iter) { |
| - const std::wstring& callback_function = iter->second; |
| - ListValue result_value; |
| - result_value.Append(Value::CreateStringValue(pref_name->c_str())); |
| - |
| - result_value.Append(CreateValueForPref(pref_service, pref)); |
| - |
| - web_ui_->CallJavascriptFunction(WideToASCII(callback_function), |
| - result_value); |
| - } |
| -} |