Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / chromeos / login / ui / user_adding_screen.cc
1 // Copyright 2014 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/chromeos/login/ui/user_adding_screen.h"
6
7 #include "ash/shell.h"
8 #include "ash/system/tray/system_tray.h"
9 #include "base/bind.h"
10 #include "base/memory/singleton.h"
11 #include "base/observer_list.h"
12 #include "chrome/browser/browser_process.h"
13 #include "chrome/browser/chromeos/login/helper.h"
14 #include "chrome/browser/chromeos/login/ui/login_display_host_impl.h"
15 #include "chrome/browser/chromeos/login/ui/user_adding_screen_input_methods_controller.h"
16 #include "chrome/browser/chromeos/login/users/wallpaper/wallpaper_manager.h"
17 #include "components/session_manager/core/session_manager.h"
18 #include "components/user_manager/user_manager.h"
19 #include "ui/gfx/rect.h"
20 #include "ui/gfx/size.h"
21
22 namespace chromeos {
23
24 namespace {
25
26 class UserAddingScreenImpl : public UserAddingScreen {
27  public:
28   virtual void Start() OVERRIDE;
29   virtual void Cancel() OVERRIDE;
30   virtual bool IsRunning() OVERRIDE;
31
32   virtual void AddObserver(Observer* observer) OVERRIDE;
33   virtual void RemoveObserver(Observer* observer) OVERRIDE;
34
35   static UserAddingScreenImpl* GetInstance();
36  private:
37   friend struct DefaultSingletonTraits<UserAddingScreenImpl>;
38
39   void OnDisplayHostCompletion();
40
41   UserAddingScreenImpl();
42   virtual ~UserAddingScreenImpl();
43
44   ObserverList<Observer> observers_;
45   LoginDisplayHost* display_host_;
46
47   UserAddingScreenInputMethodsController im_controller_;
48 };
49
50 void UserAddingScreenImpl::Start() {
51   CHECK(!IsRunning());
52   gfx::Rect screen_bounds(chromeos::CalculateScreenBounds(gfx::Size()));
53   display_host_ = new chromeos::LoginDisplayHostImpl(screen_bounds);
54   display_host_->StartUserAdding(
55       base::Bind(&UserAddingScreenImpl::OnDisplayHostCompletion,
56                  base::Unretained(this)));
57
58   g_browser_process->platform_part()->SessionManager()->SetSessionState(
59       session_manager::SESSION_STATE_LOGIN_SECONDARY);
60   FOR_EACH_OBSERVER(Observer, observers_, OnUserAddingStarted());
61 }
62
63 void UserAddingScreenImpl::Cancel() {
64   CHECK(IsRunning());
65
66   // Make sure that system tray is enabled after this flow.
67   ash::Shell::GetInstance()->GetPrimarySystemTray()->SetEnabled(true);
68   display_host_->Finalize();
69
70   // Reset wallpaper if cancel adding user from multiple user sign in page.
71   if (user_manager::UserManager::Get()->IsUserLoggedIn()) {
72     WallpaperManager::Get()->SetUserWallpaperDelayed(
73         user_manager::UserManager::Get()->GetActiveUser()->email());
74   }
75 }
76
77 bool UserAddingScreenImpl::IsRunning() {
78   return display_host_ != NULL;
79 }
80
81 void UserAddingScreenImpl::AddObserver(Observer* observer) {
82   observers_.AddObserver(observer);
83 }
84
85 void UserAddingScreenImpl::RemoveObserver(Observer* observer) {
86   observers_.RemoveObserver(observer);
87 }
88
89 void UserAddingScreenImpl::OnDisplayHostCompletion() {
90   CHECK(IsRunning());
91   display_host_ = NULL;
92
93   g_browser_process->platform_part()->SessionManager()->SetSessionState(
94       session_manager::SESSION_STATE_ACTIVE);
95   FOR_EACH_OBSERVER(Observer, observers_, OnUserAddingFinished());
96 }
97
98 // static
99 UserAddingScreenImpl* UserAddingScreenImpl::GetInstance() {
100   return Singleton<UserAddingScreenImpl>::get();
101 }
102
103 UserAddingScreenImpl::UserAddingScreenImpl()
104     : display_host_(NULL), im_controller_(this) {
105 }
106
107 UserAddingScreenImpl::~UserAddingScreenImpl() {
108 }
109
110 }  // anonymous namespace
111
112 UserAddingScreen::UserAddingScreen() {}
113 UserAddingScreen::~UserAddingScreen() {}
114
115 UserAddingScreen* UserAddingScreen::Get() {
116   return UserAddingScreenImpl::GetInstance();
117 }
118
119 }  // namespace chromeos
120