summaryrefslogtreecommitdiffstats
path: root/chrome/browser/dom_ui
diff options
context:
space:
mode:
authorxiyuan@chromium.org <xiyuan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-07-16 16:00:09 +0000
committerxiyuan@chromium.org <xiyuan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-07-16 16:00:09 +0000
commit73bd67befcb568d52b04984ec9cb75bf216df6c1 (patch)
treeea81be9a4c8036cbe04e8cc28f05f145eb63d70f /chrome/browser/dom_ui
parent99739afe82bfcda375aca9c95ab1f69f483b240d (diff)
downloadchromium_src-73bd67befcb568d52b04984ec9cb75bf216df6c1.zip
chromium_src-73bd67befcb568d52b04984ec9cb75bf216df6c1.tar.gz
chromium_src-73bd67befcb568d52b04984ec9cb75bf216df6c1.tar.bz2
Initial accounts options page.
- Add a "Accounts" subpage for ChromeOS; - Two checkboxes for allowing BWSI and allowing guest signin; - Make measureItem in list.js returns 0 instead of -1. The itemHeight is -1 when the list is not visible. And 0 will let redraw to call measureItem again; - Add an onVisibilityChanged callback that is called when "visible" property is changed; And use that to trigger user list's redraw; - Use a mock settings object so that the UI flow could be tested; - Update options_page.css to add a few css missed from dhg's overlay cl; BUG=chromium-os:4734 TEST=None. This is a draft version and will be changed after UX feedbacks. Review URL: http://codereview.chromium.org/2935011 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@52676 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/dom_ui')
-rw-r--r--chrome/browser/dom_ui/core_options_handler.cc96
-rw-r--r--chrome/browser/dom_ui/core_options_handler.h16
-rw-r--r--chrome/browser/dom_ui/options_ui.cc14
3 files changed, 82 insertions, 44 deletions
diff --git a/chrome/browser/dom_ui/core_options_handler.cc b/chrome/browser/dom_ui/core_options_handler.cc
index 45e9a81..c162335 100644
--- a/chrome/browser/dom_ui/core_options_handler.cc
+++ b/chrome/browser/dom_ui/core_options_handler.cc
@@ -72,19 +72,61 @@ void CoreOptionsHandler::RegisterMessages() {
dom_ui_->RegisterMessageCallback("fetchPrefs",
NewCallback(this, &CoreOptionsHandler::HandleFetchPrefs));
dom_ui_->RegisterMessageCallback("observePrefs",
- NewCallback(this, &CoreOptionsHandler::HandleObservePefs));
+ NewCallback(this, &CoreOptionsHandler::HandleObservePrefs));
dom_ui_->RegisterMessageCallback("setBooleanPref",
NewCallback(this, &CoreOptionsHandler::HandleSetBooleanPref));
dom_ui_->RegisterMessageCallback("setIntegerPref",
NewCallback(this, &CoreOptionsHandler::HandleSetIntegerPref));
dom_ui_->RegisterMessageCallback("setStringPref",
NewCallback(this, &CoreOptionsHandler::HandleSetStringPref));
+ dom_ui_->RegisterMessageCallback("setObjectPref",
+ NewCallback(this, &CoreOptionsHandler::HandleSetObjectPref));
}
void CoreOptionsHandler::HandleInitialize(const Value* value) {
(static_cast<OptionsUI*>(dom_ui_))->InitializeHandlers();
}
+Value* CoreOptionsHandler::FetchPref(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());
+
+ return pref ? pref->GetValue()->DeepCopy() : Value::CreateNullValue();
+}
+
+void CoreOptionsHandler::ObservePref(const std::wstring& pref_name) {
+ DCHECK(dom_ui_);
+ PrefService* pref_service = dom_ui_->GetProfile()->GetPrefs();
+
+ pref_service->AddPrefObserver(pref_name.c_str(), this);
+}
+
+void CoreOptionsHandler::SetPref(const std::wstring& pref_name,
+ Value::ValueType pref_type,
+ const std::string& value_string) {
+ DCHECK(dom_ui_);
+ PrefService* pref_service = dom_ui_->GetProfile()->GetPrefs();
+
+ switch (pref_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(), value_string);
+ break;
+ default:
+ NOTREACHED();
+ }
+}
+
void CoreOptionsHandler::HandleFetchPrefs(const Value* value) {
if (!value || !value->IsType(Value::TYPE_LIST))
return;
@@ -111,8 +153,6 @@ void CoreOptionsHandler::HandleFetchPrefs(const Value* value) {
// 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 = 1; i < param_values->GetSize(); i++) {
if (!param_values->Get(i, &list_member))
@@ -125,20 +165,15 @@ void CoreOptionsHandler::HandleFetchPrefs(const Value* value) {
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());
+ result_value.Set(pref_name.c_str(), FetchPref(pref_name));
}
dom_ui_->CallJavascriptFunction(callback_function.c_str(), result_value);
}
-void CoreOptionsHandler::HandleObservePefs(const Value* value) {
+void CoreOptionsHandler::HandleObservePrefs(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);
@@ -150,14 +185,12 @@ void CoreOptionsHandler::HandleObservePefs(const Value* value) {
// Get preference change callback function name.
std::wstring callback_func_name;
- Value* list_member = 0;
- if (!list_value->Get(0, &list_member) ||
- !list_member->IsType(Value::TYPE_STRING) ||
- !list_member->GetAsString(&callback_func_name))
+ if (!list_value->GetString(0, &callback_func_name))
return;
// Get all other parameters - pref identifiers.
for (size_t i = 1; i < list_value->GetSize(); i++) {
+ Value* list_member;
if (!list_value->Get(i, &list_member))
break;
@@ -168,7 +201,7 @@ void CoreOptionsHandler::HandleObservePefs(const Value* value) {
continue;
if (pref_callback_map_.find(pref_name) == pref_callback_map_.end())
- pref_service->AddPrefObserver(pref_name.c_str(), this);
+ ObservePref(pref_name);
pref_callback_map_.insert(
PreferenceCallbackMap::value_type(pref_name, callback_func_name));
@@ -187,6 +220,10 @@ void CoreOptionsHandler::HandleSetStringPref(const Value* value) {
HandleSetPref(value, Value::TYPE_STRING);
}
+void CoreOptionsHandler::HandleSetObjectPref(const Value* value) {
+ HandleSetPref(value, Value::TYPE_NULL);
+}
+
void CoreOptionsHandler::HandleSetPref(const Value* value,
Value::ValueType type) {
if (!value || !value->IsType(Value::TYPE_LIST))
@@ -197,38 +234,15 @@ void CoreOptionsHandler::HandleSetPref(const Value* value,
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))
+ if (!param_values->GetString(0, &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))
+ if (!param_values->GetString(1, &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(), value_string);
- break;
- default:
- NOTREACHED();
- }
+ SetPref(pref_name, type, value_string);
}
void CoreOptionsHandler::NotifyPrefChanged(const std::wstring* pref_name) {
diff --git a/chrome/browser/dom_ui/core_options_handler.h b/chrome/browser/dom_ui/core_options_handler.h
index 12d35a7..ed6d2f1 100644
--- a/chrome/browser/dom_ui/core_options_handler.h
+++ b/chrome/browser/dom_ui/core_options_handler.h
@@ -29,6 +29,19 @@ class CoreOptionsHandler : public OptionsPageUIHandler {
// DOMMessageHandler implementation.
virtual void RegisterMessages();
+ protected:
+ // Fetches a pref value of given |pref_name|.
+ // Note that caller owns the returned Value.
+ virtual Value* FetchPref(const std::wstring& pref_name);
+
+ // Observes a pref of given |pref_name|.
+ virtual void ObservePref(const std::wstring& pref_name);
+
+ // Sets a pref value |value_string| of |pref_type| to given |pref_name|.
+ virtual void SetPref(const std::wstring& pref_name,
+ Value::ValueType pref_type,
+ const std::string& value_string);
+
private:
typedef std::multimap<std::wstring, std::wstring> PreferenceCallbackMap;
// Callback for the "coreOptionsInitialize" message. This message will
@@ -44,7 +57,7 @@ class CoreOptionsHandler : public OptionsPageUIHandler {
// Callback for the "observePrefs" message. This message initiates
// notification observing for given array of preference names.
- void HandleObservePefs(const Value* value);
+ void HandleObservePrefs(const Value* value);
// Callbacks for the "set<type>Pref" message. This message saves the new
// preference value. The input value is an array of strings representing
@@ -52,6 +65,7 @@ class CoreOptionsHandler : public OptionsPageUIHandler {
void HandleSetBooleanPref(const Value* value);
void HandleSetIntegerPref(const Value* value);
void HandleSetStringPref(const Value* value);
+ void HandleSetObjectPref(const Value* value);
void HandleSetPref(const Value* value, Value::ValueType type);
diff --git a/chrome/browser/dom_ui/options_ui.cc b/chrome/browser/dom_ui/options_ui.cc
index d10868b..7a6f3a4 100644
--- a/chrome/browser/dom_ui/options_ui.cc
+++ b/chrome/browser/dom_ui/options_ui.cc
@@ -40,10 +40,12 @@
#include "grit/theme_resources.h"
#if defined(OS_CHROMEOS)
-#include "chrome/browser/chromeos/dom_ui/sync_options_handler.h"
+#include "chrome/browser/chromeos/dom_ui/accounts_options_handler.h"
+#include "chrome/browser/chromeos/dom_ui/core_chromeos_options_handler.h"
#include "chrome/browser/chromeos/dom_ui/labs_handler.h"
#include "chrome/browser/chromeos/dom_ui/language_hangul_options_handler.h"
#include "chrome/browser/chromeos/dom_ui/language_options_handler.h"
+#include "chrome/browser/chromeos/dom_ui/sync_options_handler.h"
#include "chrome/browser/chromeos/dom_ui/system_options_handler.h"
#endif
@@ -105,8 +107,14 @@ void OptionsPageUIHandler::UserMetricsRecordAction(
OptionsUI::OptionsUI(TabContents* contents) : DOMUI(contents) {
DictionaryValue* localized_strings = new DictionaryValue();
- // TODO(zelidrag): Add all other page handlers here as we implement them.
+#if defined(OS_CHROMEOS)
+ AddOptionsPageUIHandler(localized_strings,
+ new chromeos::CoreChromeOSOptionsHandler());
+#else
AddOptionsPageUIHandler(localized_strings, new CoreOptionsHandler());
+#endif
+
+ // TODO(zelidrag): Add all other page handlers here as we implement them.
AddOptionsPageUIHandler(localized_strings, new BrowserOptionsHandler());
AddOptionsPageUIHandler(localized_strings, new PersonalOptionsHandler());
AddOptionsPageUIHandler(localized_strings, new AdvancedOptionsHandler());
@@ -117,6 +125,8 @@ OptionsUI::OptionsUI(TabContents* contents) : DOMUI(contents) {
AddOptionsPageUIHandler(localized_strings,
new LanguageHangulOptionsHandler());
AddOptionsPageUIHandler(localized_strings, new LanguageOptionsHandler());
+ AddOptionsPageUIHandler(localized_strings,
+ new chromeos::AccountsOptionsHandler());
#endif
AddOptionsPageUIHandler(localized_strings, new ContentSettingsHandler());