1// Copyright (c) 2011 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#ifndef CHROME_BROWSER_CHROMEOS_LOGIN_BASE_LOGIN_DISPLAY_HOST_H_ 6#define CHROME_BROWSER_CHROMEOS_LOGIN_BASE_LOGIN_DISPLAY_HOST_H_ 7#pragma once 8 9#include <string> 10 11#include "base/memory/scoped_ptr.h" 12#include "chrome/browser/chromeos/login/login_display.h" 13#include "chrome/browser/chromeos/login/login_display_host.h" 14#include "content/common/notification_observer.h" 15#include "content/common/notification_registrar.h" 16#include "ui/gfx/rect.h" 17 18class WizardController; 19 20namespace views { 21class Widget; 22} 23 24namespace chromeos { 25 26class ExistingUserController; 27 28// An abstract base class that defines OOBE/login screen host. 29// It encapsulates controllers, background integration and flow. 30class BaseLoginDisplayHost : public LoginDisplayHost, 31 public NotificationObserver { 32 public: 33 explicit BaseLoginDisplayHost(const gfx::Rect& background_bounds); 34 virtual ~BaseLoginDisplayHost(); 35 36 // Returns the default LoginDispalyHost instance if it has been created. 37 static LoginDisplayHost* default_host() { 38 return default_host_; 39 } 40 41 // LoginDisplayHost implementation: 42 virtual void OnSessionStart(); 43 virtual void StartWizard( 44 const std::string& first_screen_name, 45 const GURL& start_url); 46 virtual void StartSignInScreen(); 47 48 const gfx::Rect& background_bounds() const { return background_bounds_; } 49 50 private: 51 // NotificationObserver implementation: 52 virtual void Observe(NotificationType type, 53 const NotificationSource& source, 54 const NotificationDetails& details); 55 56 // Used to calculate position of the screens and background. 57 gfx::Rect background_bounds_; 58 59 NotificationRegistrar registrar_; 60 61 // Default LoginDisplayHost. 62 static LoginDisplayHost* default_host_; 63 64 // Sign in screen controller. 65 scoped_ptr<ExistingUserController> sign_in_controller_; 66 67 // OOBE and some screens (camera, recovery) controller. 68 scoped_ptr<WizardController> wizard_controller_; 69 70 DISALLOW_COPY_AND_ASSIGN(BaseLoginDisplayHost); 71}; 72 73} // namespace chromeos 74 75#endif // CHROME_BROWSER_CHROMEOS_LOGIN_BASE_LOGIN_DISPLAY_HOST_H_ 76