Home | History | Annotate | Download | only in login
      1 // Copyright 2013 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/user_adding_screen.h"
      6 
      7 #include "base/bind.h"
      8 #include "base/memory/singleton.h"
      9 #include "base/observer_list.h"
     10 #include "chrome/browser/chromeos/login/helper.h"
     11 #include "chrome/browser/chromeos/login/login_display_host_impl.h"
     12 #include "ui/gfx/rect.h"
     13 #include "ui/gfx/size.h"
     14 
     15 namespace chromeos {
     16 
     17 namespace {
     18 
     19 class UserAddingScreenImpl : public UserAddingScreen {
     20  public:
     21   virtual void Start() OVERRIDE;
     22   virtual void Cancel() OVERRIDE;
     23   virtual bool IsRunning() OVERRIDE;
     24 
     25   virtual void AddObserver(Observer* observer) OVERRIDE;
     26   virtual void RemoveObserver(Observer* observer) OVERRIDE;
     27 
     28   static UserAddingScreenImpl* GetInstance();
     29  private:
     30   friend struct DefaultSingletonTraits<UserAddingScreenImpl>;
     31 
     32   void OnDisplayHostCompletion();
     33 
     34   UserAddingScreenImpl();
     35   virtual ~UserAddingScreenImpl();
     36 
     37   ObserverList<Observer> observers_;
     38   LoginDisplayHost* display_host_;
     39 };
     40 
     41 void UserAddingScreenImpl::Start() {
     42   CHECK(!IsRunning());
     43   gfx::Rect screen_bounds(chromeos::CalculateScreenBounds(gfx::Size()));
     44   display_host_ = new chromeos::LoginDisplayHostImpl(screen_bounds);
     45   display_host_->StartUserAdding(
     46       base::Bind(&UserAddingScreenImpl::OnDisplayHostCompletion,
     47                  base::Unretained(this)));
     48   FOR_EACH_OBSERVER(Observer, observers_, OnUserAddingStarted());
     49 }
     50 
     51 void UserAddingScreenImpl::Cancel() {
     52   CHECK(IsRunning());
     53   display_host_->Finalize();
     54 }
     55 
     56 bool UserAddingScreenImpl::IsRunning() {
     57   return display_host_ != NULL;
     58 }
     59 
     60 void UserAddingScreenImpl::AddObserver(Observer* observer) {
     61   observers_.AddObserver(observer);
     62 }
     63 
     64 void UserAddingScreenImpl::RemoveObserver(Observer* observer) {
     65   observers_.RemoveObserver(observer);
     66 }
     67 
     68 void UserAddingScreenImpl::OnDisplayHostCompletion() {
     69   CHECK(IsRunning());
     70   display_host_ = NULL;
     71   FOR_EACH_OBSERVER(Observer, observers_, OnUserAddingFinished());
     72 }
     73 
     74 // static
     75 UserAddingScreenImpl* UserAddingScreenImpl::GetInstance() {
     76   return Singleton<UserAddingScreenImpl>::get();
     77 }
     78 
     79 UserAddingScreenImpl::UserAddingScreenImpl()
     80   : display_host_(NULL) {
     81 }
     82 
     83 UserAddingScreenImpl::~UserAddingScreenImpl() {
     84 }
     85 
     86 }  // anonymous namespace
     87 
     88 UserAddingScreen::UserAddingScreen() {}
     89 UserAddingScreen::~UserAddingScreen() {}
     90 
     91 UserAddingScreen* UserAddingScreen::Get() {
     92   return UserAddingScreenImpl::GetInstance();
     93 }
     94 
     95 }  // namespace chromeos
     96 
     97