1// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "chrome/browser/extensions/api/autotest_private/autotest_private_api.h" 6 7#include "base/strings/string_number_conversions.h" 8#include "chrome/browser/extensions/api/autotest_private/autotest_private_api_factory.h" 9#include "chrome/browser/extensions/extension_function_registry.h" 10#include "chrome/browser/lifetime/application_lifetime.h" 11#include "chrome/common/extensions/api/autotest_private.h" 12 13#if defined(OS_CHROMEOS) 14#include "chrome/browser/chromeos/login/screen_locker.h" 15#include "chrome/browser/chromeos/login/user_manager.h" 16#endif 17 18namespace extensions { 19 20bool AutotestPrivateLogoutFunction::RunImpl() { 21 DVLOG(1) << "AutotestPrivateLogoutFunction"; 22 if (!AutotestPrivateAPIFactory::GetForProfile(profile())->test_mode()) 23 chrome::AttemptUserExit(); 24 return true; 25} 26 27bool AutotestPrivateRestartFunction::RunImpl() { 28 DVLOG(1) << "AutotestPrivateRestartFunction"; 29 if (!AutotestPrivateAPIFactory::GetForProfile(profile())->test_mode()) 30 chrome::AttemptRestart(); 31 return true; 32} 33 34bool AutotestPrivateShutdownFunction::RunImpl() { 35 scoped_ptr<api::autotest_private::Shutdown::Params> params( 36 api::autotest_private::Shutdown::Params::Create(*args_)); 37 EXTENSION_FUNCTION_VALIDATE(params.get()); 38 39 DVLOG(1) << "AutotestPrivateShutdownFunction " << params->force; 40 41#if defined(OS_CHROMEOS) 42 if (params->force) { 43 if (!AutotestPrivateAPIFactory::GetForProfile(profile())->test_mode()) 44 chrome::ExitCleanly(); 45 return true; 46 } 47#endif 48 if (!AutotestPrivateAPIFactory::GetForProfile(profile())->test_mode()) 49 chrome::AttemptExit(); 50 return true; 51} 52 53bool AutotestPrivateLoginStatusFunction::RunImpl() { 54 DVLOG(1) << "AutotestPrivateLoginStatusFunction"; 55 56 base::DictionaryValue* result(new base::DictionaryValue); 57#if defined(OS_CHROMEOS) 58 const chromeos::UserManager* user_manager = chromeos::UserManager::Get(); 59 const bool is_screen_locked = 60 !!chromeos::ScreenLocker::default_screen_locker(); 61 62 if (user_manager) { 63 result->SetBoolean("isLoggedIn", user_manager->IsUserLoggedIn()); 64 result->SetBoolean("isOwner", user_manager->IsCurrentUserOwner()); 65 result->SetBoolean("isScreenLocked", is_screen_locked); 66 if (user_manager->IsUserLoggedIn()) { 67 result->SetBoolean("isRegularUser", 68 user_manager->IsLoggedInAsRegularUser()); 69 result->SetBoolean("isGuest", user_manager->IsLoggedInAsGuest()); 70 result->SetBoolean("isKiosk", user_manager->IsLoggedInAsKioskApp()); 71 72 const chromeos::User* user = user_manager->GetLoggedInUser(); 73 result->SetString("email", user->email()); 74 result->SetString("displayEmail", user->display_email()); 75 76 std::string user_image; 77 switch (user->image_index()) { 78 case chromeos::User::kExternalImageIndex: 79 user_image = "file"; 80 break; 81 82 case chromeos::User::kProfileImageIndex: 83 user_image = "profile"; 84 break; 85 86 default: 87 user_image = base::IntToString(user->image_index()); 88 break; 89 } 90 result->SetString("userImage", user_image); 91 } 92 } 93#endif 94 95 SetResult(result); 96 return true; 97} 98 99AutotestPrivateAPI::AutotestPrivateAPI() : test_mode_(false) { 100} 101 102AutotestPrivateAPI::~AutotestPrivateAPI() { 103} 104 105} // namespace extensions 106