Skip to content
Snippets Groups Projects
Commit 4ccc05e1 authored by xiyuan@chromium.org's avatar xiyuan@chromium.org
Browse files

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
parent 89587d8e
No related merge requests found
Showing
with 174 additions and 6 deletions
......@@ -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>
......
......@@ -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)
......
......@@ -77,6 +77,7 @@ class CrosMock {
void SetInputMethodLibraryStatusAreaExpectations();
void SetNetworkLibraryStatusAreaExpectations();
void SetPowerLibraryStatusAreaExpectations();
void SetPowerLibraryExpectations();
void SetSpeechSynthesisLibraryExpectations();
void SetSystemLibraryStatusAreaExpectations();
void SetSystemLibraryExpectations();
......
......@@ -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
......
......@@ -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
......
......@@ -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);
......
// 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
// 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_
......@@ -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,
......
......@@ -129,6 +129,8 @@ class Preferences : public NotificationObserver {
// Labs preferences.
IntegerPrefMember labs_talk_enabled_;
BooleanPrefMember enable_screen_lock_;
DISALLOW_COPY_AND_ASSIGN(Preferences);
};
......
......@@ -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());
......
......@@ -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">
......
#account-picture {
border-radius: 3px;
border: 1px solid rgba(0, 0, 0, 0.5);
width: 70px;
height: 70px;
}
<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>
......
......@@ -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
......
......@@ -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': [
......
......@@ -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.
......
......@@ -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[];
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment