Commit 8536af27 authored by achuith@chromium.org's avatar achuith@chromium.org

autotestPrivate.loginStatus returns a dictionary instead of a string.

BUG=225911
TEST=manual + browser test ExtensionApi.AutotestPrivate

Review URL: https://chromiumcodereview.appspot.com/13520005

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@192655 0039d316-1c4b-4281-b951-d872f2087c98
parent ef69f053
......@@ -4,56 +4,18 @@
#include "chrome/browser/extensions/api/autotest_private/autotest_private_api.h"
#include "base/strings/string_number_conversions.h"
#include "chrome/browser/extensions/api/autotest_private/autotest_private_api_factory.h"
#include "chrome/browser/extensions/extension_function_registry.h"
#include "chrome/browser/lifetime/application_lifetime.h"
#include "chrome/common/extensions/api/autotest_private.h"
#if defined(OS_CHROMEOS)
#include "ash/shell.h"
#include "ash/system/tray/system_tray_delegate.h"
#include "chrome/browser/chromeos/login/screen_locker.h"
#include "chrome/browser/chromeos/login/user_manager.h"
#endif
namespace extensions {
namespace {
std::string GetUserLoginStatus() {
#if defined(OS_CHROMEOS)
const ash::user::LoginStatus status =
ash::Shell::GetInstance()->system_tray_delegate() ?
ash::Shell::GetInstance()->system_tray_delegate()->GetUserLoginStatus() :
ash::user::LOGGED_IN_NONE;
switch (status) {
case ash::user::LOGGED_IN_LOCKED:
return std::string("locked");
case ash::user::LOGGED_IN_USER:
return std::string("user");
case ash::user::LOGGED_IN_OWNER:
return std::string("owner");
case ash::user::LOGGED_IN_GUEST:
return std::string("guest");
case ash::user::LOGGED_IN_RETAIL_MODE:
return std::string("retail");
case ash::user::LOGGED_IN_PUBLIC:
return std::string("public");
case ash::user::LOGGED_IN_LOCALLY_MANAGED:
return std::string("local");
case ash::user::LOGGED_IN_KIOSK_APP:
return std::string("kiosk");
case ash::user::LOGGED_IN_NONE:
return std::string("none");
// Intentionally leaves out default so that compiler catches missing
// branches when new login status is added.
}
NOTREACHED();
#endif
return std::string("none");
}
} // namespace
bool AutotestPrivateLogoutFunction::RunImpl() {
DVLOG(1) << "AutotestPrivateLogoutFunction";
......@@ -90,7 +52,47 @@ bool AutotestPrivateShutdownFunction::RunImpl() {
bool AutotestPrivateLoginStatusFunction::RunImpl() {
DVLOG(1) << "AutotestPrivateLoginStatusFunction";
SetResult(base::Value::CreateStringValue(GetUserLoginStatus()));
DictionaryValue* result(new DictionaryValue);
#if defined(OS_CHROMEOS)
const chromeos::UserManager* user_manager = chromeos::UserManager::Get();
const bool is_screen_locked =
!!chromeos::ScreenLocker::default_screen_locker();
if (user_manager) {
result->SetBoolean("isLoggedIn", user_manager->IsUserLoggedIn());
result->SetBoolean("isOwner", user_manager->IsCurrentUserOwner());
result->SetBoolean("isScreenLocked", is_screen_locked);
if (user_manager->IsUserLoggedIn()) {
result->SetBoolean("isRegularUser",
user_manager->IsLoggedInAsRegularUser());
result->SetBoolean("isGuest", user_manager->IsLoggedInAsGuest());
result->SetBoolean("isKiosk", user_manager->IsLoggedInAsKioskApp());
const chromeos::User* user = user_manager->GetLoggedInUser();
result->SetString("email", user->email());
result->SetString("displayEmail", user->display_email());
std::string user_image;
switch (user->image_index()) {
case chromeos::User::kExternalImageIndex:
user_image = "file";
break;
case chromeos::User::kProfileImageIndex:
user_image = "profile";
break;
default:
user_image = base::IntToString(user->image_index());
break;
}
result->SetString("userImage", user_image);
}
}
#endif
SetResult(result);
return true;
}
......
......@@ -6,15 +6,11 @@
#include "chrome/browser/extensions/api/autotest_private/autotest_private_api_factory.h"
#include "chrome/browser/extensions/extension_apitest.h"
// Times out on win asan, http://crbug.com/166026
#if defined(OS_WIN) && defined(ADDRESS_SANITIZER)
#define MAYBE_AutotestPrivate DISABLED_AutotestPrivate
#else
#define MAYBE_AutotestPrivate AutotestPrivate
#endif
IN_PROC_BROWSER_TEST_F(ExtensionApiTest, MAYBE_AutotestPrivate) {
#if defined(OS_CHROMEOS)
IN_PROC_BROWSER_TEST_F(ExtensionApiTest, AutotestPrivate) {
// Turn on testing mode so we don't kill the browser.
extensions::AutotestPrivateAPIFactory::GetForProfile(
browser()->profile())->set_test_mode(true);
ASSERT_TRUE(RunComponentExtensionTest("autotest_private")) << message_;
}
#endif
......@@ -6,7 +6,27 @@
// extension.
[nodoc] namespace autotestPrivate {
callback LoginStatusCallback = void (DOMString status);
dictionary LoginStatusDict {
// Are we logged in?
boolean isLoggedIn;
// Is the logged-in user the owner?
boolean isOwner;
// Is the screen locked?
boolean isScreenLocked;
// Is the logged-in user a regular user?
boolean isRegularUser;
// Are we logged into the guest account?
boolean isGuest;
// Are we logged into kiosk-app mode?
boolean isKiosk;
DOMString email;
DOMString displayEmail;
// User image: 'file', 'profile' or a number.
DOMString userImage;
};
callback LoginStatusCallback = void (LoginStatusDict status);
interface Functions {
// Logout of a user session.
......
......@@ -20,9 +20,16 @@ chrome.test.runTests([
function loginStatus() {
chrome.autotestPrivate.loginStatus(
chrome.test.callbackPass(function(status) {
chrome.test.assertEq(typeof(status), 'string');
chrome.test.assertTrue(status != "");
// TODO(achuith): Add tests for various login states.
chrome.test.assertEq(typeof(status), 'object');
chrome.test.assertTrue(status.hasOwnProperty("isLoggedIn"));
chrome.test.assertTrue(status.hasOwnProperty("isOwner"));
chrome.test.assertTrue(status.hasOwnProperty("isScreenLocked"));
chrome.test.assertTrue(status.hasOwnProperty("isRegularUser"));
chrome.test.assertTrue(status.hasOwnProperty("isGuest"));
chrome.test.assertTrue(status.hasOwnProperty("isKiosk"));
chrome.test.assertTrue(status.hasOwnProperty("email"));
chrome.test.assertTrue(status.hasOwnProperty("displayEmail"));
chrome.test.assertTrue(status.hasOwnProperty("userImage"));
}));
}
]);
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment