diff options
author | xiyuan@chromium.org <xiyuan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-10-06 19:32:15 +0000 |
---|---|---|
committer | xiyuan@chromium.org <xiyuan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-10-06 19:32:15 +0000 |
commit | 4ccc05e1856d25351903b8a1c30724c2db493573 (patch) | |
tree | d07125bb0a1816d88e2fc518c85d6e3b250dbb4c /chrome/browser | |
parent | 89587d8e7a6ce9032160f26877dcf41b322563be (diff) | |
download | chromium_src-4ccc05e1856d25351903b8a1c30724c2db493573.zip chromium_src-4ccc05e1856d25351903b8a1c30724c2db493573.tar.gz chromium_src-4ccc05e1856d25351903b8a1c30724c2db493573.tar.bz2 |
Add a pref checkbox to enable/disable screen lock for ChromeOs.
- Add an "Account" section to personal options page that has an account
picture and a checkbox to enable/disable screen lock;
- Add CrosPersonalOptionsHandler to serve the section;
- Add a kEnableScreenLock prefs;
- Add a EnableScreenLock method to PowerLibrary to update power manager config;
BUG=chromium-os:6546
TEST=This is chrome part change for chromium-os:6546. Verify that account picture shows up correctly and /var/lib/power_manager/lock_on_idle_suspend is updated correctly based on the prefs checkbox after login.
Review URL: http://codereview.chromium.org/3532010
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@61689 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser')
-rw-r--r-- | chrome/browser/chromeos/cros/cros_mock.cc | 8 | ||||
-rw-r--r-- | chrome/browser/chromeos/cros/cros_mock.h | 1 | ||||
-rw-r--r-- | chrome/browser/chromeos/cros/mock_power_library.h | 2 | ||||
-rw-r--r-- | chrome/browser/chromeos/cros/power_library.cc | 17 | ||||
-rw-r--r-- | chrome/browser/chromeos/cros/power_library.h | 3 | ||||
-rw-r--r-- | chrome/browser/chromeos/dom_ui/cros_personal_options_handler.cc | 48 | ||||
-rw-r--r-- | chrome/browser/chromeos/dom_ui/cros_personal_options_handler.h | 29 | ||||
-rw-r--r-- | chrome/browser/chromeos/preferences.cc | 12 | ||||
-rw-r--r-- | chrome/browser/chromeos/preferences.h | 2 | ||||
-rw-r--r-- | chrome/browser/dom_ui/options/options_ui.cc | 3 | ||||
-rw-r--r-- | chrome/browser/resources/options.html | 1 | ||||
-rw-r--r-- | chrome/browser/resources/options/personal_options.css | 6 | ||||
-rw-r--r-- | chrome/browser/resources/options/personal_options.html | 16 | ||||
-rw-r--r-- | chrome/browser/resources/options/personal_options.js | 8 |
14 files changed, 156 insertions, 0 deletions
diff --git a/chrome/browser/chromeos/cros/cros_mock.cc b/chrome/browser/chromeos/cros/cros_mock.cc index 58e4720..168bf03 100644 --- a/chrome/browser/chromeos/cros/cros_mock.cc +++ b/chrome/browser/chromeos/cros/cros_mock.cc @@ -188,6 +188,7 @@ void CrosMock::SetStatusAreaMocksExpectations() { SetInputMethodLibraryStatusAreaExpectations(); SetNetworkLibraryStatusAreaExpectations(); SetPowerLibraryStatusAreaExpectations(); + SetPowerLibraryExpectations(); SetTouchpadLibraryExpectations(); SetSystemLibraryStatusAreaExpectations(); } @@ -336,6 +337,13 @@ void CrosMock::SetPowerLibraryStatusAreaExpectations() { .RetiresOnSaturation(); } +void CrosMock::SetPowerLibraryExpectations() { + // EnableScreenLock is currently bounded with a prefs value and thus is + // always called when loading + EXPECT_CALL(*mock_power_library_, EnableScreenLock(_)) + .Times(AnyNumber()); +} + void CrosMock::SetSpeechSynthesisLibraryExpectations() { EXPECT_CALL(*mock_speech_synthesis_library_, Speak(_)) .Times(1) diff --git a/chrome/browser/chromeos/cros/cros_mock.h b/chrome/browser/chromeos/cros/cros_mock.h index 5770140..d0818a0 100644 --- a/chrome/browser/chromeos/cros/cros_mock.h +++ b/chrome/browser/chromeos/cros/cros_mock.h @@ -77,6 +77,7 @@ class CrosMock { void SetInputMethodLibraryStatusAreaExpectations(); void SetNetworkLibraryStatusAreaExpectations(); void SetPowerLibraryStatusAreaExpectations(); + void SetPowerLibraryExpectations(); void SetSpeechSynthesisLibraryExpectations(); void SetSystemLibraryStatusAreaExpectations(); void SetSystemLibraryExpectations(); diff --git a/chrome/browser/chromeos/cros/mock_power_library.h b/chrome/browser/chromeos/cros/mock_power_library.h index fae5521..07f32e3 100644 --- a/chrome/browser/chromeos/cros/mock_power_library.h +++ b/chrome/browser/chromeos/cros/mock_power_library.h @@ -24,6 +24,8 @@ class MockPowerLibrary : public PowerLibrary { MOCK_CONST_METHOD0(battery_is_present, bool(void)); MOCK_CONST_METHOD0(battery_time_to_empty, base::TimeDelta(void)); MOCK_CONST_METHOD0(battery_time_to_full, base::TimeDelta(void)); + + MOCK_METHOD1(EnableScreenLock, void(bool)); }; } // namespace chromeos diff --git a/chrome/browser/chromeos/cros/power_library.cc b/chrome/browser/chromeos/cros/power_library.cc index 220cd4e..85c5e9a 100644 --- a/chrome/browser/chromeos/cros/power_library.cc +++ b/chrome/browser/chromeos/cros/power_library.cc @@ -59,6 +59,22 @@ class PowerLibraryImpl : public PowerLibrary { return base::TimeDelta::FromSeconds(status_.battery_time_to_full); } + virtual void EnableScreenLock(bool enable) { + if (!CrosLibrary::Get()->EnsureLoaded()) + return; + + // Make sure we run on FILE thread becuase chromeos::EnableScreenLock + // would write power manager config file to disk. + if (!ChromeThread::CurrentlyOn(ChromeThread::FILE)) { + ChromeThread::PostTask( + ChromeThread::FILE, FROM_HERE, + NewRunnableMethod(this, &PowerLibraryImpl::EnableScreenLock, enable)); + return; + } + + chromeos::EnableScreenLock(enable); + } + private: static void PowerStatusChangedHandler(void* object, const chromeos::PowerStatus& status) { @@ -119,6 +135,7 @@ class PowerLibraryStubImpl : public PowerLibrary { base::TimeDelta battery_time_to_full() const { return base::TimeDelta::FromSeconds(0); } + virtual void EnableScreenLock(bool enable) {} }; // static diff --git a/chrome/browser/chromeos/cros/power_library.h b/chrome/browser/chromeos/cros/power_library.h index 10e6df4..9a5c308 100644 --- a/chrome/browser/chromeos/cros/power_library.h +++ b/chrome/browser/chromeos/cros/power_library.h @@ -43,6 +43,9 @@ class PowerLibrary { // The amount of time until battery is full. virtual base::TimeDelta battery_time_to_full() const = 0; + // Enable/disable screen lock for current session. + virtual void EnableScreenLock(bool enable) = 0; + // Factory function, creates a new instance and returns ownership. // For normal usage, access the singleton via CrosLibrary::Get(). static PowerLibrary* GetImpl(bool stub); diff --git a/chrome/browser/chromeos/dom_ui/cros_personal_options_handler.cc b/chrome/browser/chromeos/dom_ui/cros_personal_options_handler.cc new file mode 100644 index 0000000..67f2c3a --- /dev/null +++ b/chrome/browser/chromeos/dom_ui/cros_personal_options_handler.cc @@ -0,0 +1,48 @@ +// 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/chromeos/dom_ui/cros_personal_options_handler.h" + +#include "app/l10n_util.h" +#include "base/values.h" +#include "chrome/browser/chromeos/login/user_manager.h" +#include "chrome/browser/dom_ui/dom_ui_util.h" +#include "grit/generated_resources.h" +#include "third_party/skia/include/core/SkBitmap.h" + +namespace chromeos { + +CrosPersonalOptionsHandler::CrosPersonalOptionsHandler() { +} + +CrosPersonalOptionsHandler::~CrosPersonalOptionsHandler() { +} + +void CrosPersonalOptionsHandler::GetLocalizedValues( + DictionaryValue* localized_strings) { + localized_strings->SetString("account", + l10n_util::GetStringUTF16(IDS_OPTIONS_PERSONAL_ACCOUNT_GROUP_NAME)); + localized_strings->SetString("enable_screenlock", + l10n_util::GetStringUTF16(IDS_OPTIONS_ENABLE_SCREENLOCKER_CHECKBOX)); +} + +void CrosPersonalOptionsHandler::RegisterMessages() { + dom_ui_->RegisterMessageCallback( + "loadAccountPicture", + NewCallback(this, &CrosPersonalOptionsHandler::LoadAccountPicture)); +} + +void CrosPersonalOptionsHandler::LoadAccountPicture(const ListValue* args) { + const SkBitmap& account_picture = + UserManager::Get()->logged_in_user().image(); + + if (!account_picture.isNull()) { + StringValue data_url(dom_ui_util::GetImageDataUrl(account_picture)); + dom_ui_->CallJavascriptFunction(L"PersonalOptions.setAccountPicture", + data_url); + } +} + +} // namespace chromeos + diff --git a/chrome/browser/chromeos/dom_ui/cros_personal_options_handler.h b/chrome/browser/chromeos/dom_ui/cros_personal_options_handler.h new file mode 100644 index 0000000..d286461 --- /dev/null +++ b/chrome/browser/chromeos/dom_ui/cros_personal_options_handler.h @@ -0,0 +1,29 @@ +// 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. + +#ifndef CHROME_BROWSER_CHROMEOS_DOM_UI_CROS_PERSONAL_OPTIONS_HANDLER_H_ +#define CHROME_BROWSER_CHROMEOS_DOM_UI_CROS_PERSONAL_OPTIONS_HANDLER_H_ + +#include "chrome/browser/dom_ui/options/options_ui.h" + +namespace chromeos { + +class CrosPersonalOptionsHandler : public OptionsPageUIHandler { + public: + CrosPersonalOptionsHandler(); + virtual ~CrosPersonalOptionsHandler(); + + // Overridden from PersonalOptionsHandler: + virtual void GetLocalizedValues(DictionaryValue* localized_strings); + virtual void RegisterMessages(); + + private: + void LoadAccountPicture(const ListValue* args); + + DISALLOW_COPY_AND_ASSIGN(CrosPersonalOptionsHandler); +}; + +} // namespace chromeos + +#endif // CHROME_BROWSER_CHROMEOS_DOM_UI_CROS_PERSONAL_OPTIONS_HANDLER_H_ diff --git a/chrome/browser/chromeos/preferences.cc b/chrome/browser/chromeos/preferences.cc index 0779a81..b9aff33 100644 --- a/chrome/browser/chromeos/preferences.cc +++ b/chrome/browser/chromeos/preferences.cc @@ -11,6 +11,7 @@ #include "chrome/browser/chromeos/cros/cros_library.h" #include "chrome/browser/chromeos/cros/input_method_library.h" #include "chrome/browser/chromeos/cros/keyboard_library.h" +#include "chrome/browser/chromeos/cros/power_library.h" #include "chrome/browser/chromeos/cros/touchpad_library.h" #include "chrome/browser/chromeos/input_method/input_method_util.h" #include "chrome/browser/extensions/extensions_service.h" @@ -115,6 +116,9 @@ void Preferences::RegisterUserPrefs(PrefService* prefs) { language_prefs::kXkbAutoRepeatDelayInMs); prefs->RegisterIntegerPref(prefs::kLanguageXkbAutoRepeatInterval, language_prefs::kXkbAutoRepeatIntervalInMs); + + // Screen lock default to off. + prefs->RegisterBooleanPref(prefs::kEnableScreenLock, false); } void Preferences::Init(PrefService* prefs) { @@ -182,6 +186,8 @@ void Preferences::Init(PrefService* prefs) { labs_talk_enabled_.Init(prefs::kLabsTalkEnabled, prefs, this); + enable_screen_lock_.Init(prefs::kEnableScreenLock, prefs, this); + // Initialize touchpad settings to what's saved in user preferences. NotifyPrefChanged(NULL); } @@ -343,6 +349,12 @@ void Preferences::NotifyPrefChanged(const std::string* pref_name) { if (pref_name && *pref_name == prefs::kLabsTalkEnabled) { UpdateTalkApp(); } + + // Init or update power manager config. + if (!pref_name || *pref_name == prefs::kEnableScreenLock) { + CrosLibrary::Get()->GetPowerLibrary()->EnableScreenLock( + enable_screen_lock_.GetValue()); + } } void Preferences::SetLanguageConfigBoolean(const char* section, diff --git a/chrome/browser/chromeos/preferences.h b/chrome/browser/chromeos/preferences.h index 2226a3a..9269915 100644 --- a/chrome/browser/chromeos/preferences.h +++ b/chrome/browser/chromeos/preferences.h @@ -129,6 +129,8 @@ class Preferences : public NotificationObserver { // Labs preferences. IntegerPrefMember labs_talk_enabled_; + BooleanPrefMember enable_screen_lock_; + DISALLOW_COPY_AND_ASSIGN(Preferences); }; diff --git a/chrome/browser/dom_ui/options/options_ui.cc b/chrome/browser/dom_ui/options/options_ui.cc index 7bae9ab..384ae3b 100644 --- a/chrome/browser/dom_ui/options/options_ui.cc +++ b/chrome/browser/dom_ui/options/options_ui.cc @@ -53,6 +53,7 @@ #if defined(OS_CHROMEOS) #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/cros_personal_options_handler.h" #include "chrome/browser/chromeos/dom_ui/internet_options_handler.h" #include "chrome/browser/chromeos/dom_ui/labs_handler.h" #include "chrome/browser/chromeos/dom_ui/language_chewing_options_handler.h" @@ -168,6 +169,8 @@ OptionsUI::OptionsUI(TabContents* contents) : DOMUI(contents) { AddOptionsPageUIHandler(localized_strings, new chromeos::StatsOptionsHandler()); AddOptionsPageUIHandler(localized_strings, new SystemOptionsHandler()); + AddOptionsPageUIHandler(localized_strings, + new chromeos::CrosPersonalOptionsHandler()); #endif #if defined(USE_NSS) AddOptionsPageUIHandler(localized_strings, new CertificateManagerHandler()); diff --git a/chrome/browser/resources/options.html b/chrome/browser/resources/options.html index d54b1af..686a17c 100644 --- a/chrome/browser/resources/options.html +++ b/chrome/browser/resources/options.html @@ -24,6 +24,7 @@ <link rel="stylesheet" href="options/cookies_view.css"> <link rel="stylesheet" href="options/edit_search_engine_overlay.css"> <link rel="stylesheet" href="options/passwords_exceptions_list.css"> +<link rel="stylesheet" href="options/personal_options.css"> <link rel="stylesheet" href="options/import_data_overlay.css"> <link rel="stylesheet" href="options/search_engine_manager.css"> <link rel="stylesheet" href="options/subpages_tab_controls.css"> diff --git a/chrome/browser/resources/options/personal_options.css b/chrome/browser/resources/options/personal_options.css new file mode 100644 index 0000000..d23e2c5 --- /dev/null +++ b/chrome/browser/resources/options/personal_options.css @@ -0,0 +1,6 @@ +#account-picture { + border-radius: 3px; + border: 1px solid rgba(0, 0, 0, 0.5); + width: 70px; + height: 70px; +} diff --git a/chrome/browser/resources/options/personal_options.html b/chrome/browser/resources/options/personal_options.html index 53e850e..39fb745 100644 --- a/chrome/browser/resources/options/personal_options.html +++ b/chrome/browser/resources/options/personal_options.html @@ -1,6 +1,22 @@ <div class="page hidden" id="personalPage"> <h1 i18n-content="personalPage"></h1> +<if expr="pp_ifdef('chromeos')"> + <section> + <h3 i18n-content="account"></h3> + <div> + <table class="option-control-table"> + <tr><td> + <img id='account-picture' src='chrome://theme/IDR_LOGIN_DEFAULT_USER'> + </td><td> + <label><input id="enable-screen-lock" + pref="settings.enable_screen_lock" type="checkbox"><span + i18n-content="enable_screenlock"></span></label> + </td></tr> + </table> + </div> + </section> +</if> <section> <h3 i18n-content="sync_section"></h3> <div> diff --git a/chrome/browser/resources/options/personal_options.js b/chrome/browser/resources/options/personal_options.js index c0871ce..357f5af 100644 --- a/chrome/browser/resources/options/personal_options.js +++ b/chrome/browser/resources/options/personal_options.js @@ -94,6 +94,10 @@ cr.define('options', function() { chrome.send('themesGallery'); } } + + if (cr.isChromeOS) { + chrome.send('loadAccountPicture'); + } }, syncStatusCallback_: function(statusString) { @@ -148,6 +152,10 @@ cr.define('options', function() { PersonalOptions.getInstance().setClassicThemeButtonEnabled_(enabled); }; + PersonalOptions.setAccountPicture = function(image) { + $('account-picture').src = image; + } + // Export return { PersonalOptions: PersonalOptions |