06b743506d21673f01d2fd3ebbacd4fc2c2017b7
[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/chromeos/login/helper.h"
13 #include "chrome/browser/chromeos/login/ui/login_display_host_impl.h"
14 #include "chrome/browser/chromeos/login/users/wallpaper/wallpaper_manager.h"
15 #include "ui/gfx/rect.h"
16 #include "ui/gfx/size.h"
17
18 namespace chromeos {
19
20 namespace {
21
22 class UserAddingScreenImpl : public UserAddingScreen {
23  public:
24   virtual void Start() OVERRIDE;
25   virtual void Cancel() OVERRIDE;
26   virtual bool IsRunning() OVERRIDE;
27
28   virtual void AddObserver(Observer* observer) OVERRIDE;
29   virtual void RemoveObserver(Observer* observer) OVERRIDE;
30
31   static UserAddingScreenImpl* GetInstance();
32  private:
33   friend struct DefaultSingletonTraits<UserAddingScreenImpl>;
34
35   void OnDisplayHostCompletion();
36
37   UserAddingScreenImpl();
38   virtual ~UserAddingScreenImpl();
39
40   ObserverList<Observer> observers_;
41   LoginDisplayHost* display_host_;
42 };
43
44 void UserAddingScreenImpl::Start() {
45   CHECK(!IsRunning());
46   gfx::Rect screen_bounds(chromeos::CalculateScreenBounds(gfx::Size()));
47   display_host_ = new chromeos::LoginDisplayHostImpl(screen_bounds);
48   display_host_->StartUserAdding(
49       base::Bind(&UserAddingScreenImpl::OnDisplayHostCompletion,
50                  base::Unretained(this)));
51   FOR_EACH_OBSERVER(Observer, observers_, OnUserAddingStarted());
52 }
53
54 void UserAddingScreenImpl::Cancel() {
55   CHECK(IsRunning());
56
57   // Make sure that system tray is enabled after this flow.
58   ash::Shell::GetInstance()->GetPrimarySystemTray()->SetEnabled(true);
59   display_host_->Finalize();
60
61   // Reset wallpaper if cancel adding user from multiple user sign in page.
62   if (UserManager::Get()->IsUserLoggedIn()) {
63     WallpaperManager::Get()->SetUserWallpaperDelayed(
64         UserManager::Get()->GetActiveUser()->email());
65   }
66 }
67
68 bool UserAddingScreenImpl::IsRunning() {
69   return display_host_ != NULL;
70 }
71
72 void UserAddingScreenImpl::AddObserver(Observer* observer) {
73   observers_.AddObserver(observer);
74 }
75
76 void UserAddingScreenImpl::RemoveObserver(Observer* observer) {
77   observers_.RemoveObserver(observer);
78 }
79
80 void UserAddingScreenImpl::OnDisplayHostCompletion() {
81   CHECK(IsRunning());
82   display_host_ = NULL;
83   FOR_EACH_OBSERVER(Observer, observers_, OnUserAddingFinished());
84 }
85
86 // static
87 UserAddingScreenImpl* UserAddingScreenImpl::GetInstance() {
88   return Singleton<UserAddingScreenImpl>::get();
89 }
90
91 UserAddingScreenImpl::UserAddingScreenImpl()
92   : display_host_(NULL) {
93 }
94
95 UserAddingScreenImpl::~UserAddingScreenImpl() {
96 }
97
98 }  // anonymous namespace
99
100 UserAddingScreen::UserAddingScreen() {}
101 UserAddingScreen::~UserAddingScreen() {}
102
103 UserAddingScreen* UserAddingScreen::Get() {
104   return UserAddingScreenImpl::GetInstance();
105 }
106
107 }  // namespace chromeos
108