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

Unified Diff: chrome/browser/dom_ui/core_options_handler.cc

Issue 2781005: Option dialog DOM UI - ChromeOS System page. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 10 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/dom_ui/core_options_handler.cc
===================================================================
--- chrome/browser/dom_ui/core_options_handler.cc (revision 0)
+++ chrome/browser/dom_ui/core_options_handler.cc (revision 0)
@@ -0,0 +1,213 @@
+// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/dom_ui/core_options_handler.h"
+
+#include "app/l10n_util.h"
+#include "app/resource_bundle.h"
+#include "base/utf_string_conversions.h"
+#include "base/values.h"
+#include "chrome/common/notification_service.h"
+#include "chrome/common/notification_type.h"
+#include "chrome/browser/pref_service.h"
+#include "chrome/browser/profile.h"
+#include "grit/browser_resources.h"
+#include "grit/chromium_strings.h"
+#include "grit/generated_resources.h"
+#include "grit/locale_settings.h"
+#include "grit/theme_resources.h"
+
+CoreOptionsHandler::CoreOptionsHandler() {
+}
+
+void CoreOptionsHandler::GetLocalizedValues(
+ DictionaryValue* localized_strings) {
+ DCHECK(localized_strings);
+ // Main
+ localized_strings->SetString(L"title",
+ l10n_util::GetStringF(IDS_OPTIONS_DIALOG_TITLE,
+ l10n_util::GetString(IDS_PRODUCT_NAME)));
+
+#if defined(OS_CHROMEOS)
+ localized_strings->SetString(L"systemPage",
+ l10n_util::GetString(IDS_OPTIONS_SYSTEM_TAB_LABEL));
+ localized_strings->SetString(L"internetPage",
+ l10n_util::GetString(IDS_OPTIONS_INTERNET_TAB_LABEL));
+#endif
+
+ localized_strings->SetString(L"basicsPage",
+ l10n_util::GetString(IDS_OPTIONS_GENERAL_TAB_LABEL));
+ localized_strings->SetString(L"personalStuffPage",
+ l10n_util::GetString(IDS_OPTIONS_CONTENT_TAB_LABEL));
+ localized_strings->SetString(L"underHoodPage",
+ l10n_util::GetString(IDS_OPTIONS_ADVANCED_TAB_LABEL));
+}
+
+void CoreOptionsHandler::Observe(NotificationType type,
+ const NotificationSource& source,
+ const NotificationDetails& details) {
+ if (type == NotificationType::PREF_CHANGED)
+ NotifyPrefChanged(Details<std::wstring>(details).ptr());
+}
+
+void CoreOptionsHandler::RegisterMessages() {
+ dom_ui_->RegisterMessageCallback("fetchPrefs",
+ NewCallback(this, &CoreOptionsHandler::HandleFetchPrefs));
+ dom_ui_->RegisterMessageCallback("observePrefs",
+ NewCallback(this, &CoreOptionsHandler::HandleFetchPrefs));
+ dom_ui_->RegisterMessageCallback("setBooleanPref",
+ NewCallback(this, &CoreOptionsHandler::HandleSetBooleanPref));
+ dom_ui_->RegisterMessageCallback("setIntegerPref",
+ NewCallback(this, &CoreOptionsHandler::HandleSetIntegerPref));
+ dom_ui_->RegisterMessageCallback("setStringPref",
+ NewCallback(this, &CoreOptionsHandler::HandleSetStringPref));
+}
+
+
+void CoreOptionsHandler::HandleFetchPrefs(const Value* value) {
+ if (!value || !value->IsType(Value::TYPE_LIST))
+ return;
+
+ const ListValue* param_values = static_cast<const ListValue*>(value);
+
+ // First param is name of callback function, the second one is the value of
+ // context that is just passed through - so, there needs to be at least one
+ // more for the actual preference identifier.
+ const size_t kMinFetchPrefsParamCount = 3;
+ if (param_values->GetSize() < kMinFetchPrefsParamCount)
+ return;
+
+ size_t idx = param_values->GetSize();
+ LOG(INFO) << "param_values->GetSize() = " << idx;
+ // Get callback JS function name.
+ Value* callback;
+ if (!param_values->Get(0, &callback) || !callback->IsType(Value::TYPE_STRING))
+ return;
+
+ std::wstring callback_function;
+ if (!callback->GetAsString(&callback_function))
+ return;
+
+ // Get context param (just passthrough value)
+ Value* context;
+ if (!param_values->Get(1, &context) || !context)
+ return;
+
+ // Get the list of name for prefs to build the response dictionary.
+ DictionaryValue result_value;
+ Value* list_member;
+ DCHECK(dom_ui_);
+ PrefService* pref_service = dom_ui_->GetProfile()->GetPrefs();
+
+ for (size_t i = 2; i < param_values->GetSize(); i++) {
+ if (!param_values->Get(i, &list_member))
+ break;
+
+ if (!list_member->IsType(Value::TYPE_STRING))
+ continue;
+
+ std::wstring pref_name;
+ if (!list_member->GetAsString(&pref_name))
+ continue;
+
+ const PrefService::Preference* pref =
+ pref_service->FindPreference(pref_name.c_str());
+ result_value.Set(pref_name.c_str(),
+ pref ? pref->GetValue()->DeepCopy() : Value::CreateNullValue());
+ }
+ dom_ui_->CallJavascriptFunction(callback_function.c_str(), *context,
+ result_value);
+}
+
+void CoreOptionsHandler::HandleObservePefs(const Value* value) {
+ if (!value || !value->IsType(Value::TYPE_LIST))
+ return;
+
+ DCHECK(dom_ui_);
+ PrefService* pref_service = dom_ui_->GetProfile()->GetPrefs();
+ DictionaryValue result_value;
+ const ListValue* list_value = static_cast<const ListValue*>(value);
+ Value* list_member;
+ for (size_t i = 0; i < list_value->GetSize(); i++) {
+ if (!list_value->Get(i, &list_member))
+ break;
+
+ if (!list_member->IsType(Value::TYPE_STRING))
+ continue;
+
+ std::wstring pref_name;
+ if (!list_member->GetAsString(&pref_name))
+ continue;
+
+ pref_service->AddPrefObserver(pref_name.c_str(), this);
+ }
+}
+
+void CoreOptionsHandler::HandleSetBooleanPref(const Value* value) {
+ HandleSetPref(value, Value::TYPE_BOOLEAN);
+}
+
+void CoreOptionsHandler::HandleSetIntegerPref(const Value* value) {
+ HandleSetPref(value, Value::TYPE_INTEGER);
+}
+
+void CoreOptionsHandler::HandleSetStringPref(const Value* value) {
+ HandleSetPref(value, Value::TYPE_STRING);
+}
+
+void CoreOptionsHandler::HandleSetPref(const Value* value,
+ Value::ValueType type) {
+ if (!value || !value->IsType(Value::TYPE_LIST))
+ return;
+ const ListValue* param_values = static_cast<const ListValue*>(value);
+ size_t size = param_values->GetSize();
+ LOG(INFO) << "Array size = " << size;
+ if (param_values->GetSize() != 2)
+ return;
+
+ DCHECK(dom_ui_);
+ PrefService* pref_service = dom_ui_->GetProfile()->GetPrefs();
+
+ Value* name_element;
+ std::wstring pref_name;
+ if (!param_values->Get(0, &name_element) ||
+ !name_element->IsType(Value::TYPE_STRING) ||
+ !name_element->GetAsString(&pref_name))
+ return;
+
+ Value* value_element;
+ std::string value_string;
+ if (!param_values->Get(1, &value_element) ||
+ !value_element->IsType(Value::TYPE_STRING) ||
+ !value_element->GetAsString(&value_string))
+ return;
+
+ switch (type) {
+ case Value::TYPE_BOOLEAN:
+ pref_service->SetBoolean(pref_name.c_str(), value_string == "true");
+ break;
+ case Value::TYPE_INTEGER:
+ int int_value;
+ if (StringToInt(value_string, &int_value))
+ pref_service->SetInteger(pref_name.c_str(), int_value);
+ break;
+ case Value::TYPE_STRING:
+ pref_service->SetString(pref_name.c_str(), UTF8ToWide(value_string));
+ break;
+ default:
+ NOTREACHED();
+ }
+}
+
+void CoreOptionsHandler::NotifyPrefChanged(const std::wstring* pref_name) {
+ DCHECK(dom_ui_);
+ PrefService* pref_service = dom_ui_->GetProfile()->GetPrefs();
+ const PrefService::Preference* pref =
+ pref_service->FindPreference(pref_name->c_str());
+ if (pref) {
+ DictionaryValue result_value;
+ result_value.Set(pref_name->c_str(), pref->GetValue()->DeepCopy());
+ dom_ui_->CallJavascriptFunction(L"prefsChanged", result_value);
+ }
+}
Property changes on: chrome/browser/dom_ui/core_options_handler.cc
___________________________________________________________________
Added: svn:eol-style
+ LF

Powered by Google App Engine
This is Rietveld 408576698