Index: chrome/browser/chromeos/extensions/screenlock_private_api.cc |
diff --git a/chrome/browser/chromeos/extensions/screenlock_private_api.cc b/chrome/browser/chromeos/extensions/screenlock_private_api.cc |
index c009fce65dd2142f6260c1ac887a017abaa431a0..a81e1d12e41fd065505241f695f0db625d0f747d 100644 |
--- a/chrome/browser/chromeos/extensions/screenlock_private_api.cc |
+++ b/chrome/browser/chromeos/extensions/screenlock_private_api.cc |
@@ -17,6 +17,45 @@ namespace screenlock = extensions::api::screenlock_private; |
namespace extensions { |
+namespace { |
+ |
+const char kNotLockedError[] = "Screen is not currently locked."; |
+ |
+chromeos::LoginDisplay::AuthType ToLoginDisplayAuthType( |
+ screenlock::AuthType auth_type) { |
+ switch (auth_type) { |
+ case screenlock::AUTH_TYPE_OFFLINEPASSWORD: |
+ return chromeos::LoginDisplay::OFFLINE_PASSWORD; |
+ case screenlock::AUTH_TYPE_NUMERICPIN: |
+ return chromeos::LoginDisplay::NUMERIC_PIN; |
+ case screenlock::AUTH_TYPE_USERCLICK: |
+ return chromeos::LoginDisplay::USER_CLICK; |
+ default: |
+ NOTREACHED(); |
+ return chromeos::LoginDisplay::OFFLINE_PASSWORD; |
+ } |
+} |
+ |
+screenlock::AuthType ToScreenlockPrivateAuthType( |
+ chromeos::LoginDisplay::AuthType auth_type) { |
+ switch (auth_type) { |
+ case chromeos::LoginDisplay::OFFLINE_PASSWORD: |
+ return screenlock::AUTH_TYPE_OFFLINEPASSWORD; |
+ case chromeos::LoginDisplay::NUMERIC_PIN: |
+ return screenlock::AUTH_TYPE_NUMERICPIN; |
+ case chromeos::LoginDisplay::USER_CLICK: |
+ return screenlock::AUTH_TYPE_USERCLICK; |
+ case chromeos::LoginDisplay::ONLINE_SIGN_IN: |
+ // Apps should treat forced online sign in same as system password. |
+ return screenlock::AUTH_TYPE_OFFLINEPASSWORD; |
+ default: |
+ NOTREACHED(); |
+ return screenlock::AUTH_TYPE_OFFLINEPASSWORD; |
+ } |
+} |
+ |
+} // namespace |
+ |
ScreenlockPrivateGetLockedFunction::ScreenlockPrivateGetLockedFunction() {} |
ScreenlockPrivateGetLockedFunction::~ScreenlockPrivateGetLockedFunction() {} |
@@ -85,7 +124,8 @@ bool ScreenlockPrivateShowButtonFunction::RunImpl() { |
chromeos::ScreenLocker* locker = |
chromeos::ScreenLocker::default_screen_locker(); |
if (!locker) { |
- SendResponse(error_.empty()); |
+ SetError(kNotLockedError); |
+ SendResponse(false); |
return true; |
} |
extensions::ImageLoader* loader = extensions::ImageLoader::Get(GetProfile()); |
@@ -103,13 +143,107 @@ void ScreenlockPrivateShowButtonFunction::OnImageLoaded( |
ScreenlockPrivateEventRouter* router = |
ScreenlockPrivateEventRouter::GetFactoryInstance()->GetForProfile( |
GetProfile()); |
+ const chromeos::User* user = |
+ chromeos::UserManager::Get()->GetUserByProfile(GetProfile()); |
locker->ShowUserPodButton( |
- GetProfile()->GetProfileName(), image, |
+ user->email(), |
+ image, |
base::Bind(&ScreenlockPrivateEventRouter::OnButtonClicked, |
base::Unretained(router))); |
SendResponse(error_.empty()); |
} |
+ScreenlockPrivateHideButtonFunction::ScreenlockPrivateHideButtonFunction() {} |
+ |
+ScreenlockPrivateHideButtonFunction::~ScreenlockPrivateHideButtonFunction() {} |
+ |
+bool ScreenlockPrivateHideButtonFunction::RunImpl() { |
+ chromeos::ScreenLocker* locker = |
+ chromeos::ScreenLocker::default_screen_locker(); |
+ if (locker) { |
+ const chromeos::User* user = |
+ chromeos::UserManager::Get()->GetUserByProfile(GetProfile()); |
+ locker->HideUserPodButton(user->email()); |
+ } else { |
+ SetError(kNotLockedError); |
+ } |
+ SendResponse(error_.empty()); |
+ return true; |
+} |
+ |
+ScreenlockPrivateSetAuthTypeFunction::ScreenlockPrivateSetAuthTypeFunction() {} |
+ |
+ScreenlockPrivateSetAuthTypeFunction::~ScreenlockPrivateSetAuthTypeFunction() {} |
+ |
+bool ScreenlockPrivateSetAuthTypeFunction::RunImpl() { |
+ scoped_ptr<screenlock::SetAuthType::Params> params( |
+ screenlock::SetAuthType::Params::Create(*args_)); |
+ EXTENSION_FUNCTION_VALIDATE(params.get()); |
+ |
+ chromeos::ScreenLocker* locker = |
+ chromeos::ScreenLocker::default_screen_locker(); |
+ if (locker) { |
+ std::string initial_value = |
+ params->initial_value.get() ? *(params->initial_value.get()) : ""; |
+ const chromeos::User* user = |
+ chromeos::UserManager::Get()->GetUserByProfile(GetProfile()); |
+ locker->SetAuthType(user->email(), |
+ ToLoginDisplayAuthType(params->auth_type), |
+ initial_value); |
+ } else { |
+ SetError(kNotLockedError); |
+ } |
+ SendResponse(error_.empty()); |
+ return true; |
+} |
+ |
+ScreenlockPrivateGetAuthTypeFunction::ScreenlockPrivateGetAuthTypeFunction() {} |
+ |
+ScreenlockPrivateGetAuthTypeFunction::~ScreenlockPrivateGetAuthTypeFunction() {} |
+ |
+bool ScreenlockPrivateGetAuthTypeFunction::RunImpl() { |
+ chromeos::ScreenLocker* locker = |
+ chromeos::ScreenLocker::default_screen_locker(); |
+ if (locker) { |
+ const chromeos::User* user = |
+ chromeos::UserManager::Get()->GetUserByProfile(GetProfile()); |
+ chromeos::LoginDisplay::AuthType auth_type = |
+ locker->GetAuthType(user->email()); |
+ std::string auth_type_name = |
+ screenlock::ToString(ToScreenlockPrivateAuthType(auth_type)); |
+ SetResult(new base::StringValue(auth_type_name)); |
+ } else { |
+ SetError(kNotLockedError); |
+ } |
+ SendResponse(error_.empty()); |
+ return true; |
+} |
+ |
+ScreenlockPrivateAcceptAuthAttemptFunction:: |
+ ScreenlockPrivateAcceptAuthAttemptFunction() {} |
+ |
+ScreenlockPrivateAcceptAuthAttemptFunction:: |
+ ~ScreenlockPrivateAcceptAuthAttemptFunction() {} |
+ |
+bool ScreenlockPrivateAcceptAuthAttemptFunction::RunImpl() { |
+ scoped_ptr<screenlock::AcceptAuthAttempt::Params> params( |
+ screenlock::AcceptAuthAttempt::Params::Create(*args_)); |
+ EXTENSION_FUNCTION_VALIDATE(params.get()); |
+ |
+ chromeos::ScreenLocker* locker = |
+ chromeos::ScreenLocker::default_screen_locker(); |
+ if (locker) { |
+ if (params->accept) |
+ chromeos::ScreenLocker::Hide(); |
+ else |
+ locker->EnableInput(); |
+ } else { |
+ SetError(kNotLockedError); |
+ } |
+ SendResponse(error_.empty()); |
+ return true; |
+} |
+ |
ScreenlockPrivateEventRouter::ScreenlockPrivateEventRouter(Profile* profile) |
: profile_(profile) { |
chromeos::SessionManagerClient* session_manager = |
@@ -163,4 +297,18 @@ void ScreenlockPrivateEventRouter::OnButtonClicked() { |
DispatchEvent(screenlock::OnButtonClicked::kEventName, NULL); |
} |
+void ScreenlockPrivateEventRouter::OnAuthAttempted( |
+ chromeos::LoginDisplay::AuthType auth_type, |
+ const std::string& value) { |
+ scoped_ptr<base::ListValue> args(new base::ListValue()); |
+ args->AppendString( |
+ screenlock::ToString(ToScreenlockPrivateAuthType(auth_type))); |
+ args->AppendString(value); |
+ |
+ scoped_ptr<extensions::Event> event(new extensions::Event( |
+ screenlock::OnAuthAttempted::kEventName, args.Pass())); |
+ extensions::ExtensionSystem::Get(profile_)->event_router()->BroadcastEvent( |
+ event.Pass()); |
+} |
+ |
} // namespace extensions |