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