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_BACKGROUND_VIEW_H_ 6 #define CHROME_BROWSER_CHROMEOS_LOGIN_BACKGROUND_VIEW_H_ 7 #pragma once 8 9 #include "chrome/browser/chromeos/boot_times_loader.h" 10 #include "chrome/browser/chromeos/cros/cros_library.h" 11 #include "chrome/browser/chromeos/login/login_html_dialog.h" 12 #include "chrome/browser/chromeos/status/status_area_host.h" 13 #include "chrome/browser/chromeos/version_loader.h" 14 #include "chrome/browser/policy/cloud_policy_subsystem.h" 15 #include "views/view.h" 16 17 namespace views { 18 class Label; 19 class TextButton; 20 class Widget; 21 class WindowDelegate; 22 } 23 24 class DOMView; 25 class GURL; 26 class Profile; 27 28 namespace chromeos { 29 30 class OobeProgressBar; 31 class ShutdownButton; 32 class StatusAreaView; 33 34 // View used to render the background during login. BackgroundView contains 35 // StatusAreaView. 36 class BackgroundView : public views::View, 37 public StatusAreaHost, 38 public chromeos::LoginHtmlDialog::Delegate, 39 public policy::CloudPolicySubsystem::Observer { 40 public: 41 enum LoginStep { 42 SELECT_NETWORK, 43 EULA, 44 SIGNIN, 45 REGISTRATION, 46 PICTURE, 47 48 // Steps count, must be the last in the enum. 49 STEPS_COUNT 50 }; 51 52 BackgroundView(); 53 54 // Initializes the background view. It backgroun_url is given (non empty), 55 // it creates a DOMView background area that renders a webpage. 56 void Init(const GURL& background_url); 57 58 // Enable/disable shutdown button. 59 void EnableShutdownButton(bool enable); 60 61 // Creates a window containing an instance of WizardContentsView as the root 62 // view. The caller is responsible for showing (and closing) the returned 63 // widget. The BackgroundView is set in |view|. If background_url is non 64 // empty, the content page of the url is displayed as a background. 65 static views::Widget* CreateWindowContainingView( 66 const gfx::Rect& bounds, 67 const GURL& background_url, 68 BackgroundView** view); 69 70 // Create a modal popup view. 71 void CreateModalPopup(views::WindowDelegate* view); 72 73 // Overridden from StatusAreaHost: 74 virtual gfx::NativeWindow GetNativeWindow() const; 75 76 // Toggles status area visibility. 77 void SetStatusAreaVisible(bool visible); 78 79 // Toggles whether status area is enabled. 80 void SetStatusAreaEnabled(bool enable); 81 82 // Toggles OOBE progress bar visibility, the bar is hidden by default. 83 void SetOobeProgressBarVisible(bool visible); 84 85 // Gets progress bar visibility. 86 bool IsOobeProgressBarVisible(); 87 88 // Sets current step on OOBE progress bar. 89 void SetOobeProgress(LoginStep step); 90 91 // Shows screen saver. 92 void ShowScreenSaver(); 93 94 // Hides screen saver. 95 void HideScreenSaver(); 96 97 // Tells if screen saver is visible. 98 bool IsScreenSaverVisible(); 99 100 // Tells if screen saver is enabled. 101 bool ScreenSaverEnabled(); 102 103 protected: 104 // Overridden from views::View: 105 virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE; 106 virtual void Layout() OVERRIDE; 107 virtual void ChildPreferredSizeChanged(View* child) OVERRIDE; 108 virtual void OnLocaleChanged() OVERRIDE; 109 110 // Overridden from StatusAreaHost: 111 virtual Profile* GetProfile() const OVERRIDE { return NULL; } 112 virtual void ExecuteBrowserCommand(int id) const OVERRIDE {} 113 virtual bool ShouldOpenButtonOptions( 114 const views::View* button_view) const OVERRIDE; 115 virtual void OpenButtonOptions(const views::View* button_view) OVERRIDE; 116 virtual ScreenMode GetScreenMode() const OVERRIDE; 117 virtual TextStyle GetTextStyle() const OVERRIDE; 118 119 // Overridden from LoginHtmlDialog::Delegate: 120 virtual void OnDialogClosed() OVERRIDE {} 121 122 private: 123 // Creates and adds the status_area. 124 void InitStatusArea(); 125 // Creates and adds the labels for version and boot time. 126 void InitInfoLabels(); 127 // Creates and add OOBE progress bar. 128 void InitProgressBar(); 129 130 // Invokes SetWindowType for the window. This is invoked during startup and 131 // after we've painted. 132 void UpdateWindowType(); 133 134 // Update the version label. 135 void UpdateVersionLabel(); 136 137 // Check and update enterprise domain. 138 void UpdateEnterpriseInfo(); 139 140 // Set enterprise domain name. 141 void SetEnterpriseInfo(const std::string& domain_name, 142 const std::string& status_text); 143 144 // Callback from chromeos::VersionLoader giving the version. 145 void OnVersion(VersionLoader::Handle handle, std::string version); 146 // Callback from chromeos::InfoLoader giving the boot times. 147 void OnBootTimes( 148 BootTimesLoader::Handle handle, BootTimesLoader::BootTimes boot_times); 149 150 // policy::CloudPolicySubsystem::Observer methods: 151 void OnPolicyStateChanged( 152 policy::CloudPolicySubsystem::PolicySubsystemState state, 153 policy::CloudPolicySubsystem::ErrorDetails error_details); 154 155 // All of these variables could be NULL. 156 StatusAreaView* status_area_; 157 views::Label* os_version_label_; 158 views::Label* boot_times_label_; 159 OobeProgressBar* progress_bar_; 160 ShutdownButton* shutdown_button_; 161 162 // Handles asynchronously loading the version. 163 VersionLoader version_loader_; 164 // Used to request the version. 165 CancelableRequestConsumer version_consumer_; 166 167 // Handles asynchronously loading the boot times. 168 BootTimesLoader boot_times_loader_; 169 // Used to request the boot times. 170 CancelableRequestConsumer boot_times_consumer_; 171 172 // Has Paint been invoked once? The value of this is passed to the window 173 // manager. 174 // TODO(sky): nuke this when the wm knows when chrome has painted. 175 bool did_paint_; 176 177 // True if running official BUILD. 178 bool is_official_build_; 179 180 // DOMView for rendering a webpage as a background. 181 DOMView* background_area_; 182 183 // Information pieces for version label. 184 std::string version_text_; 185 std::string enterprise_domain_text_; 186 std::string enterprise_status_text_; 187 188 // Proxy settings dialog that can be invoked from network menu. 189 scoped_ptr<LoginHtmlDialog> proxy_settings_dialog_; 190 191 // CloudPolicySubsysterm observer registrar 192 scoped_ptr<policy::CloudPolicySubsystem::ObserverRegistrar> 193 cloud_policy_registrar_; 194 195 DISALLOW_COPY_AND_ASSIGN(BackgroundView); 196 }; 197 198 } // namespace chromeos 199 200 #endif // CHROME_BROWSER_CHROMEOS_LOGIN_BACKGROUND_VIEW_H_ 201