1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file. 4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifndef CHROME_BROWSER_CHROMEOS_LOGIN_BACKGROUND_VIEW_H_ 6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define CHROME_BROWSER_CHROMEOS_LOGIN_BACKGROUND_VIEW_H_ 73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#pragma once 8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/chromeos/boot_times_loader.h" 10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/chromeos/cros/cros_library.h" 11513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include "chrome/browser/chromeos/login/login_html_dialog.h" 12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/chromeos/status/status_area_host.h" 133345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "chrome/browser/chromeos/version_loader.h" 14ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/policy/cloud_policy_subsystem.h" 15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "views/view.h" 16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace views { 18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass Label; 193345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickclass TextButton; 20513209b27ff55e2841eac0e4120199c23acce758Ben Murdochclass Widget; 2172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenclass WindowDelegate; 22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 243345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickclass DOMView; 253345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickclass GURL; 26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass Profile; 27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace chromeos { 29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 303345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickclass OobeProgressBar; 31513209b27ff55e2841eac0e4120199c23acce758Ben Murdochclass ShutdownButton; 32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass StatusAreaView; 33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// View used to render the background during login. BackgroundView contains 35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// StatusAreaView. 363345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickclass BackgroundView : public views::View, 373345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick public StatusAreaHost, 38ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen public chromeos::LoginHtmlDialog::Delegate, 39ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen public policy::CloudPolicySubsystem::Observer { 40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 413345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick enum LoginStep { 423345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick SELECT_NETWORK, 433345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick EULA, 443345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick SIGNIN, 453345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick REGISTRATION, 46201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch PICTURE, 47201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 48201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Steps count, must be the last in the enum. 49201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch STEPS_COUNT 503345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick }; 513345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch BackgroundView(); 53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 543345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Initializes the background view. It backgroun_url is given (non empty), 553345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // it creates a DOMView background area that renders a webpage. 563345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick void Init(const GURL& background_url); 573345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 58201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Enable/disable shutdown button. 59201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch void EnableShutdownButton(bool enable); 60513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Creates a window containing an instance of WizardContentsView as the root 62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // view. The caller is responsible for showing (and closing) the returned 633345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // widget. The BackgroundView is set in |view|. If background_url is non 643345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // empty, the content page of the url is displayed as a background. 653345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick static views::Widget* CreateWindowContainingView( 663345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick const gfx::Rect& bounds, 673345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick const GURL& background_url, 683345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick BackgroundView** view); 69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 7072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Create a modal popup view. 7172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen void CreateModalPopup(views::WindowDelegate* view); 7272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 7372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Overridden from StatusAreaHost: 7472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual gfx::NativeWindow GetNativeWindow() const; 7572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Toggles status area visibility. 77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void SetStatusAreaVisible(bool visible); 78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 794a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Toggles whether status area is enabled. 804a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch void SetStatusAreaEnabled(bool enable); 814a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 823345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Toggles OOBE progress bar visibility, the bar is hidden by default. 833345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick void SetOobeProgressBarVisible(bool visible); 843345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 853345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Gets progress bar visibility. 863345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick bool IsOobeProgressBarVisible(); 873345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 883345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Sets current step on OOBE progress bar. 893345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick void SetOobeProgress(LoginStep step); 903345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 913345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Shows screen saver. 923345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick void ShowScreenSaver(); 933345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 943345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Hides screen saver. 953345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick void HideScreenSaver(); 963345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 973345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Tells if screen saver is visible. 983345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick bool IsScreenSaverVisible(); 993345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 1003345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Tells if screen saver is enabled. 1013345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick bool ScreenSaverEnabled(); 1023345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 103c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch protected: 104c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Overridden from views::View: 105ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE; 106ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void Layout() OVERRIDE; 107ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void ChildPreferredSizeChanged(View* child) OVERRIDE; 108ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void OnLocaleChanged() OVERRIDE; 109c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 110c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Overridden from StatusAreaHost: 111ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual Profile* GetProfile() const OVERRIDE { return NULL; } 112ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void ExecuteBrowserCommand(int id) const OVERRIDE {} 113c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual bool ShouldOpenButtonOptions( 114ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const views::View* button_view) const OVERRIDE; 115ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void OpenButtonOptions(const views::View* button_view) OVERRIDE; 116ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual ScreenMode GetScreenMode() const OVERRIDE; 117ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual TextStyle GetTextStyle() const OVERRIDE; 118c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 119513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Overridden from LoginHtmlDialog::Delegate: 120ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void OnDialogClosed() OVERRIDE {} 1213345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 1223345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick private: 123c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Creates and adds the status_area. 124c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void InitStatusArea(); 125c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Creates and adds the labels for version and boot time. 126c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void InitInfoLabels(); 1273345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Creates and add OOBE progress bar. 1283345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick void InitProgressBar(); 129c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 130c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Invokes SetWindowType for the window. This is invoked during startup and 131c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // after we've painted. 132c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void UpdateWindowType(); 133c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 134ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Update the version label. 135ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void UpdateVersionLabel(); 136ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 137ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Check and update enterprise domain. 138ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void UpdateEnterpriseInfo(); 139ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 140ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Set enterprise domain name. 141ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void SetEnterpriseInfo(const std::string& domain_name, 142ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::string& status_text); 143ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 144c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Callback from chromeos::VersionLoader giving the version. 145c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void OnVersion(VersionLoader::Handle handle, std::string version); 146c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Callback from chromeos::InfoLoader giving the boot times. 147c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void OnBootTimes( 148c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch BootTimesLoader::Handle handle, BootTimesLoader::BootTimes boot_times); 149c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 150ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // policy::CloudPolicySubsystem::Observer methods: 151ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void OnPolicyStateChanged( 152ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen policy::CloudPolicySubsystem::PolicySubsystemState state, 153ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen policy::CloudPolicySubsystem::ErrorDetails error_details); 154ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 1553345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // All of these variables could be NULL. 156c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch StatusAreaView* status_area_; 157c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch views::Label* os_version_label_; 158c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch views::Label* boot_times_label_; 1593345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick OobeProgressBar* progress_bar_; 160513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch ShutdownButton* shutdown_button_; 161c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 162c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Handles asynchronously loading the version. 163c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch VersionLoader version_loader_; 164c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Used to request the version. 165c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch CancelableRequestConsumer version_consumer_; 166c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 167c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Handles asynchronously loading the boot times. 168c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch BootTimesLoader boot_times_loader_; 169c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Used to request the boot times. 170c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch CancelableRequestConsumer boot_times_consumer_; 171c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 172c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Has Paint been invoked once? The value of this is passed to the window 173c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // manager. 174c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // TODO(sky): nuke this when the wm knows when chrome has painted. 175c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool did_paint_; 176c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 177731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // True if running official BUILD. 178731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick bool is_official_build_; 179731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 1803345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // DOMView for rendering a webpage as a background. 1813345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick DOMView* background_area_; 1823345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 183ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Information pieces for version label. 184ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string version_text_; 185ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string enterprise_domain_text_; 186ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string enterprise_status_text_; 187ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 188513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Proxy settings dialog that can be invoked from network menu. 189513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch scoped_ptr<LoginHtmlDialog> proxy_settings_dialog_; 190513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 191ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // CloudPolicySubsysterm observer registrar 192ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen scoped_ptr<policy::CloudPolicySubsystem::ObserverRegistrar> 193ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen cloud_policy_registrar_; 194ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 195c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DISALLOW_COPY_AND_ASSIGN(BackgroundView); 196c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 197c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 198c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} // namespace chromeos 199c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 200c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif // CHROME_BROWSER_CHROMEOS_LOGIN_BACKGROUND_VIEW_H_ 201