diff options
-rw-r--r-- | chrome/app/generated_resources.grd | 6 | ||||
-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 | ||||
-rw-r--r-- | chrome/chrome_browser.gypi | 14 | ||||
-rw-r--r-- | chrome/common/pref_names.cc | 3 | ||||
-rw-r--r-- | chrome/common/pref_names.h | 1 |
18 files changed, 174 insertions, 6 deletions
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd index d7d39ec..c9212b4 100644 --- a/chrome/app/generated_resources.grd +++ b/chrome/app/generated_resources.grd @@ -8664,6 +8664,12 @@ Keep your key file in a safe place. You will need it to create new versions of y <message name="IDS_OPTIONS_ACCOUNTS_ADD_USERS" desc="In the Accounts settings tab, the label text above the user name edit box."> Add users </message> + <message name="IDS_OPTIONS_PERSONAL_ACCOUNT_GROUP_NAME" desc="In the Personal Stuff settings tab, the title text for Account section."> + Account + </message> + <message name="IDS_OPTIONS_ENABLE_SCREENLOCKER_CHECKBOX" desc="In the Personal Stuff settings tab, the text on the checkbox to enable screenlocker for current user."> + Require password to wake from sleep + </message> <message name="IDS_OPTIONS_SETTINGS_INTERNET_OPTIONS_NETWORK_ID" desc="In settings internet options, the label for the network id."> Network id: </message> 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 diff --git a/chrome/chrome_browser.gypi b/chrome/chrome_browser.gypi index 4d8dd01..5aba25e 100644 --- a/chrome/chrome_browser.gypi +++ b/chrome/chrome_browser.gypi @@ -438,6 +438,8 @@ 'browser/chromeos/dom_ui/core_chromeos_options_handler.h', 'browser/chromeos/dom_ui/cros_options_page_ui_handler.cc', 'browser/chromeos/dom_ui/cros_options_page_ui_handler.h', + 'browser/chromeos/dom_ui/cros_personal_options_handler.cc', + 'browser/chromeos/dom_ui/cros_personal_options_handler.h', 'browser/chromeos/dom_ui/imageburner_ui.cc', 'browser/chromeos/dom_ui/imageburner_ui.h', 'browser/chromeos/dom_ui/internet_options_handler.cc', @@ -3291,10 +3293,10 @@ ], }], ['touchui==1', { - 'sources/': [ - ['exclude', '^browser/renderer_host/render_widget_host_view_gtk.cc'], - ['exclude', '^browser/renderer_host/render_widget_host_view_gtk.h'], - ], + 'sources/': [ + ['exclude', '^browser/renderer_host/render_widget_host_view_gtk.cc'], + ['exclude', '^browser/renderer_host/render_widget_host_view_gtk.h'], + ], }], ['OS=="linux"', { 'dependencies': [ @@ -3561,8 +3563,8 @@ 'browser/importer/nss_decryptor_system_nss.cc', 'browser/importer/nss_decryptor_system_nss.h', 'browser/power_save_blocker_stub.cc', - 'browser/renderer_host/render_widget_host_view_views.cc', - 'browser/renderer_host/render_widget_host_view_views.h', + 'browser/renderer_host/render_widget_host_view_views.cc', + 'browser/renderer_host/render_widget_host_view_views.h', 'browser/views/select_file_dialog.cc', ], 'conditions': [ diff --git a/chrome/common/pref_names.cc b/chrome/common/pref_names.cc index 4fc8d8d..2b54561 100644 --- a/chrome/common/pref_names.cc +++ b/chrome/common/pref_names.cc @@ -380,6 +380,9 @@ const char kLabsMediaplayerEnabled[] = "settings.labs.mediaplayer"; const char kLabsTalkEnabled[] = "extensions.settings.ggnioahjipcehijkhpdjekioddnjoben.state"; +// A boolean pref that turns on screen locker. +const char kEnableScreenLock[] = "settings.enable_screen_lock"; + #endif // defined(OS_CHROMEOS) // The disabled messages in IPC logging. diff --git a/chrome/common/pref_names.h b/chrome/common/pref_names.h index 14e0f40..c88998c 100644 --- a/chrome/common/pref_names.h +++ b/chrome/common/pref_names.h @@ -141,6 +141,7 @@ extern const char kAccessibilityEnabled[]; extern const char kLabsAdvancedFilesystemEnabled[]; extern const char kLabsMediaplayerEnabled[]; extern const char kLabsTalkEnabled[]; +extern const char kEnableScreenLock[]; #endif extern const char kIpcDisabledMessages[]; extern const char kShowHomeButton[]; |