diff options
author | xiyuan@chromium.org <xiyuan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-07-16 16:00:09 +0000 |
---|---|---|
committer | xiyuan@chromium.org <xiyuan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-07-16 16:00:09 +0000 |
commit | 73bd67befcb568d52b04984ec9cb75bf216df6c1 (patch) | |
tree | ea81be9a4c8036cbe04e8cc28f05f145eb63d70f /chrome/browser/dom_ui | |
parent | 99739afe82bfcda375aca9c95ab1f69f483b240d (diff) | |
download | chromium_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.cc | 96 | ||||
-rw-r--r-- | chrome/browser/dom_ui/core_options_handler.h | 16 | ||||
-rw-r--r-- | chrome/browser/dom_ui/options_ui.cc | 14 |
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()); |