summaryrefslogtreecommitdiffstats
path: root/chrome/browser
diff options
context:
space:
mode:
authorxiyuan@chromium.org <xiyuan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-10-06 19:32:15 +0000
committerxiyuan@chromium.org <xiyuan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-10-06 19:32:15 +0000
commit4ccc05e1856d25351903b8a1c30724c2db493573 (patch)
treed07125bb0a1816d88e2fc518c85d6e3b250dbb4c /chrome/browser
parent89587d8e7a6ce9032160f26877dcf41b322563be (diff)
downloadchromium_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.cc8
-rw-r--r--chrome/browser/chromeos/cros/cros_mock.h1
-rw-r--r--chrome/browser/chromeos/cros/mock_power_library.h2
-rw-r--r--chrome/browser/chromeos/cros/power_library.cc17
-rw-r--r--chrome/browser/chromeos/cros/power_library.h3
-rw-r--r--chrome/browser/chromeos/dom_ui/cros_personal_options_handler.cc48
-rw-r--r--chrome/browser/chromeos/dom_ui/cros_personal_options_handler.h29
-rw-r--r--chrome/browser/chromeos/preferences.cc12
-rw-r--r--chrome/browser/chromeos/preferences.h2
-rw-r--r--chrome/browser/dom_ui/options/options_ui.cc3
-rw-r--r--chrome/browser/resources/options.html1
-rw-r--r--chrome/browser/resources/options/personal_options.css6
-rw-r--r--chrome/browser/resources/options/personal_options.html16
-rw-r--r--chrome/browser/resources/options/personal_options.js8
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