summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/app/generated_resources.grd6
-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
-rw-r--r--chrome/chrome_browser.gypi14
-rw-r--r--chrome/common/pref_names.cc3
-rw-r--r--chrome/common/pref_names.h1
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[];