Index: chrome/browser/chromeos/login/user_adding_screen.cc |
diff --git a/chrome/browser/chromeos/login/user_adding_screen.cc b/chrome/browser/chromeos/login/user_adding_screen.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..c611d6d3fa8c1e083adc040edff759fe5c770d39 |
--- /dev/null |
+++ b/chrome/browser/chromeos/login/user_adding_screen.cc |
@@ -0,0 +1,96 @@ |
+// Copyright (c) 2013 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "chrome/browser/chromeos/login/user_adding_screen.h" |
+ |
+#include "base/bind.h" |
+#include "base/memory/singleton.h" |
+#include "base/observer_list.h" |
+#include "chrome/browser/chromeos/login/helper.h" |
+#include "chrome/browser/chromeos/login/login_display_host_impl.h" |
+#include "ui/gfx/rect.h" |
+#include "ui/gfx/size.h" |
+ |
+namespace chromeos { |
+ |
+namespace { |
+ |
+class UserAddingScreenImpl : public UserAddingScreen { |
+ public: |
+ virtual void Start() OVERRIDE; |
+ virtual void Cancel() OVERRIDE; |
+ virtual bool IsRunning() OVERRIDE; |
+ |
+ virtual void AddObserver(Observer* observer) OVERRIDE; |
+ virtual void RemoveObserver(Observer* observer) OVERRIDE; |
+ |
+ static UserAddingScreenImpl* GetInstance(); |
+ private: |
+ friend struct DefaultSingletonTraits<UserAddingScreenImpl>; |
+ |
+ void OnDisplayHostCompletion(); |
+ |
+ UserAddingScreenImpl(); |
+ virtual ~UserAddingScreenImpl(); |
+ |
+ ObserverList<Observer> observers_; |
+ LoginDisplayHost* display_host_; |
+}; |
+ |
+void UserAddingScreenImpl::Start() { |
+ CHECK(!IsRunning()); |
+ gfx::Rect screen_bounds(chromeos::CalculateScreenBounds(gfx::Size())); |
+ display_host_ = new chromeos::LoginDisplayHostImpl(screen_bounds); |
+ display_host_->StartUserAdding( |
+ base::Bind(&UserAddingScreenImpl::OnDisplayHostCompletion, |
+ base::Unretained(this))); |
+ FOR_EACH_OBSERVER(Observer, observers_, OnUserAddingStarted()); |
+} |
+ |
+void UserAddingScreenImpl::Cancel() { |
+ CHECK(IsRunning()); |
+ display_host_->Finalize(); |
+} |
+ |
+bool UserAddingScreenImpl::IsRunning() { |
+ return display_host_ != NULL; |
+} |
+ |
+void UserAddingScreenImpl::AddObserver(Observer* observer) { |
+ observers_.AddObserver(observer); |
+} |
+ |
+void UserAddingScreenImpl::RemoveObserver(Observer* observer) { |
+ observers_.RemoveObserver(observer); |
+} |
+ |
+void UserAddingScreenImpl::OnDisplayHostCompletion() { |
+ CHECK(IsRunning()); |
+ display_host_ = NULL; |
+ FOR_EACH_OBSERVER(Observer, observers_, OnUserAddingFinished()); |
+} |
+ |
+// static |
+UserAddingScreenImpl* UserAddingScreenImpl::GetInstance() { |
+ return Singleton<UserAddingScreenImpl>::get(); |
+} |
+ |
+UserAddingScreenImpl::UserAddingScreenImpl() |
+ : display_host_(NULL) { |
+} |
+ |
+UserAddingScreenImpl::~UserAddingScreenImpl() { |
+} |
+ |
+} // anonymous namespace |
+ |
+UserAddingScreen::UserAddingScreen() {} |
+UserAddingScreen::~UserAddingScreen() {} |
+ |
+UserAddingScreen* UserAddingScreen::Get() { |
+ return UserAddingScreenImpl::GetInstance(); |
+} |
+ |
+} // namespace chromeos |
+ |