Home | History | Annotate | Download | only in login
      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