172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian 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#include "chrome/browser/chromeos/login/background_view.h"
6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include <string>
83345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include <vector>
921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
103345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "base/string16.h"
11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/string_util.h"
123345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "base/stringprintf.h"
13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/utf_string_conversions.h"
14ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/browser_process.h"
15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/chromeos/login/helper.h"
1672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/chromeos/login/login_utils.h"
173345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "chrome/browser/chromeos/login/oobe_progress_bar.h"
18513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include "chrome/browser/chromeos/login/proxy_settings_dialog.h"
193345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "chrome/browser/chromeos/login/rounded_rect_painter.h"
20513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include "chrome/browser/chromeos/login/shutdown_button.h"
21731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#include "chrome/browser/chromeos/login/wizard_controller.h"
22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/chromeos/status/clock_menu_button.h"
23731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#include "chrome/browser/chromeos/status/input_method_menu_button.h"
24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/chromeos/status/network_menu_button.h"
25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/chromeos/status/status_area_view.h"
26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/chromeos/wm_ipc.h"
27ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/policy/browser_policy_connector.h"
2821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/profiles/profile_manager.h"
2972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/ui/views/dom_view.h"
3072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/ui/views/window.h"
31ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/common/chrome_version_info.h"
3221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "googleurl/src/gurl.h"
33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "grit/chromium_strings.h"
34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "grit/generated_resources.h"
353345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "grit/theme_resources.h"
3621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "third_party/cros/chromeos_wm_ipc_enums.h"
3772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/base/l10n/l10n_util.h"
3872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/base/resource/resource_bundle.h"
3972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/base/x/x11_util.h"
4072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/gfx/gtk_util.h"
413345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "views/controls/button/text_button.h"
42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "views/controls/label.h"
43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "views/screen.h"
44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "views/widget/widget_gtk.h"
4572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "views/window/window.h"
46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// X Windows headers have "#define Status int". That interferes with
48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// NetworkLibrary header which defines enum "Status".
4921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include <X11/cursorfont.h>  // NOLINT
5021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include <X11/Xcursor/Xcursor.h>  // NOLINT
51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
52ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenusing views::Widget;
53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochusing views::WidgetGtk;
54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
553345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merricknamespace {
56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
57731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickconst SkColor kVersionColor = 0xff5c739f;
58ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenconst char kPlatformLabel[] = "cros:";
59731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
60201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch// Returns the corresponding step id for step constant.
61201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdochint GetStepId(size_t step) {
62201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  switch (step) {
63201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    case chromeos::BackgroundView::SELECT_NETWORK:
64201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch      return IDS_OOBE_SELECT_NETWORK;
65201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    case chromeos::BackgroundView::EULA:
66201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch      return IDS_OOBE_EULA;
67201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    case chromeos::BackgroundView::SIGNIN:
68201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch      return IDS_OOBE_SIGNIN;
69201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    case chromeos::BackgroundView::REGISTRATION:
70201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch      return IDS_OOBE_REGISTRATION;
71201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    case chromeos::BackgroundView::PICTURE:
72201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch      return IDS_OOBE_PICTURE;
73201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    default:
74201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch      NOTREACHED();
75201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch      return 0;
76201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  }
77201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch}
78201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
793345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// The same as TextButton but switches cursor to hand cursor when mouse
803345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// is over the button.
813345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickclass TextButtonWithHandCursorOver : public views::TextButton {
823345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick public:
833345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  TextButtonWithHandCursorOver(views::ButtonListener* listener,
843345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick                               const std::wstring& text)
853345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      : views::TextButton(listener, text) {
863345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  }
873345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
883345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  virtual ~TextButtonWithHandCursorOver() {}
893345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
903345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  virtual gfx::NativeCursor GetCursorForPoint(
9172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      ui::EventType event_type,
923345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      const gfx::Point& p) {
933345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    if (!IsEnabled()) {
943345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      return NULL;
953345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    }
96201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    return gfx::GetCursor(GDK_HAND2);
973345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  }
983345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
993345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick private:
1003345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  DISALLOW_COPY_AND_ASSIGN(TextButtonWithHandCursorOver);
1013345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick};
102c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1033345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// This gets rid of the ugly X default cursor.
104c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochstatic void ResetXCursor() {
105c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // TODO(sky): nuke this once new window manager is in place.
10672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  Display* display = ui::GetXDisplay();
107c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  Cursor cursor = XCreateFontCursor(display, XC_left_ptr);
10872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  XID root_window = ui::GetX11RootWindow();
109c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  XSetWindowAttributes attr;
110c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  attr.cursor = cursor;
111c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  XChangeWindowAttributes(display, root_window, CWCursor, &attr);
112c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
113c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1143345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick}  // namespace
1153345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
1163345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merricknamespace chromeos {
1173345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
1183345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick///////////////////////////////////////////////////////////////////////////////
1193345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// BackgroundView public:
1203345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
1213345a6884c488ff3a535c2c9acdd33d74b37e311Iain MerrickBackgroundView::BackgroundView()
1223345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    : status_area_(NULL),
1233345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      os_version_label_(NULL),
1243345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      boot_times_label_(NULL),
1253345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      progress_bar_(NULL),
126513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      shutdown_button_(NULL),
1273345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      did_paint_(false),
128731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#if defined(OFFICIAL_BUILD)
129731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      is_official_build_(true),
130731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#else
131731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      is_official_build_(false),
132731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#endif
1333345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      background_area_(NULL) {
1343345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick}
1353345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
1363345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickvoid BackgroundView::Init(const GURL& background_url) {
1373345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  views::Painter* painter = CreateBackgroundPainter();
1383345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  set_background(views::Background::CreateBackgroundPainter(true, painter));
1393345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  InitStatusArea();
1403345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  InitInfoLabels();
1413345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  if (!background_url.is_empty()) {
1423345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    Profile* profile = ProfileManager::GetDefaultProfile();
1433345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    background_area_ = new DOMView();
1443345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    AddChildView(background_area_);
1453345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    background_area_->Init(profile, NULL);
1463345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    background_area_->SetVisible(false);
1473345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    background_area_->LoadURL(background_url);
1483345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  }
1493345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick}
1503345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
151201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdochvoid BackgroundView::EnableShutdownButton(bool enable) {
152201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  if (enable) {
153201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    if (shutdown_button_)
154201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch      return;
155201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    shutdown_button_ = new ShutdownButton();
156201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    shutdown_button_->Init();
157201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    AddChildView(shutdown_button_);
158201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  } else {
159201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    if (!shutdown_button_)
160201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch      return;
161201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    delete shutdown_button_;
162201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    shutdown_button_ = NULL;
163201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    SchedulePaint();
164201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  }
165513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch}
166513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
167c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// static
168c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochviews::Widget* BackgroundView::CreateWindowContainingView(
169c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const gfx::Rect& bounds,
1703345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    const GURL& background_url,
171c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    BackgroundView** view) {
172c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ResetXCursor();
173c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
174ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  Widget* window = Widget::CreateWidget(
175ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      Widget::CreateParams(Widget::CreateParams::TYPE_WINDOW));
176c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  window->Init(NULL, bounds);
177c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  *view = new BackgroundView();
1783345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  (*view)->Init(background_url);
1793345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
1803345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  if ((*view)->ScreenSaverEnabled())
1813345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    (*view)->ShowScreenSaver();
1823345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
183c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  window->SetContentsView(*view);
184c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
185c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  (*view)->UpdateWindowType();
186c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
187c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // This keeps the window from flashing at startup.
188c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  GdkWindow* gdk_window = window->GetNativeView()->window;
189c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  gdk_window_set_back_pixmap(gdk_window, NULL, false);
190c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
19172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  LoginUtils::Get()->SetBackgroundView(*view);
19272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
193c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return window;
194c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
195c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
19672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenvoid BackgroundView::CreateModalPopup(views::WindowDelegate* view) {
19772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  views::Window* window = browser::CreateViewsWindow(
19872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      GetNativeWindow(), gfx::Rect(), view);
19972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  window->SetIsAlwaysOnTop(true);
20072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  window->Show();
20172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen}
20272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
20372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsengfx::NativeWindow BackgroundView::GetNativeWindow() const {
20472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  return
20572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      GTK_WINDOW(static_cast<const WidgetGtk*>(GetWidget())->GetNativeView());
20672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen}
20772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
208c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid BackgroundView::SetStatusAreaVisible(bool visible) {
209c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  status_area_->SetVisible(visible);
210c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
211c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
2124a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochvoid BackgroundView::SetStatusAreaEnabled(bool enable) {
21372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  status_area_->MakeButtonsActive(enable);
2144a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch}
2154a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
2163345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickvoid BackgroundView::SetOobeProgressBarVisible(bool visible) {
2173345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  if (!progress_bar_ && visible)
2183345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    InitProgressBar();
2193345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
2203345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  if (progress_bar_)
2213345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    progress_bar_->SetVisible(visible);
2223345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick}
2233345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
2243345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickbool BackgroundView::IsOobeProgressBarVisible() {
2253345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  return progress_bar_ && progress_bar_->IsVisible();
2263345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick}
2273345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
2283345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickvoid BackgroundView::SetOobeProgress(LoginStep step) {
229201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  DCHECK(step < STEPS_COUNT);
2303345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  if (progress_bar_)
231201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    progress_bar_->SetStep(GetStepId(step));
2323345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick}
2333345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
2343345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickvoid BackgroundView::ShowScreenSaver() {
2353345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  SetStatusAreaVisible(false);
2363345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  background_area_->SetVisible(true);
2373345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick}
2383345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
2393345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickvoid BackgroundView::HideScreenSaver() {
2403345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  SetStatusAreaVisible(true);
2413345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  // TODO(oshima): we need a way to suspend screen saver
2423345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  // to save power when it's not visible.
2433345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  background_area_->SetVisible(false);
2443345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick}
2453345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
2463345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickbool BackgroundView::IsScreenSaverVisible() {
2473345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  return ScreenSaverEnabled() && background_area_->IsVisible();
2483345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick}
2493345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
2503345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickbool BackgroundView::ScreenSaverEnabled() {
2513345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  return background_area_ != NULL;
2523345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick}
2533345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
2543345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick///////////////////////////////////////////////////////////////////////////////
2553345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// BackgroundView protected:
2563345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
257dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenvoid BackgroundView::OnPaint(gfx::Canvas* canvas) {
258dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  views::View::OnPaint(canvas);
259c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  if (!did_paint_) {
260c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    did_paint_ = true;
261c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    UpdateWindowType();
262c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
263c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
264c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
265c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid BackgroundView::Layout() {
2663345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  const int kCornerPadding = 5;
26772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  const int kInfoLeftPadding = 10;
26872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  const int kInfoBottomPadding = 10;
26972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  const int kInfoBetweenLinesPadding = 1;
2703345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  const int kProgressBarBottomPadding = 20;
2713345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  const int kProgressBarWidth = 750;
2723345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  const int kProgressBarHeight = 70;
273c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  gfx::Size status_area_size = status_area_->GetPreferredSize();
274c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  status_area_->SetBounds(
2753345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      width() - status_area_size.width() - kCornerPadding,
2763345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      kCornerPadding,
277c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      status_area_size.width(),
278c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      status_area_size.height());
279c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  gfx::Size version_size = os_version_label_->GetPreferredSize();
280731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  int os_version_y = height() - version_size.height() - kInfoBottomPadding;
281731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  if (!is_official_build_)
28272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    os_version_y -= (version_size.height() + kInfoBetweenLinesPadding);
283c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  os_version_label_->SetBounds(
284c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      kInfoLeftPadding,
285731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      os_version_y,
286c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      width() - 2 * kInfoLeftPadding,
287c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      version_size.height());
288731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  if (!is_official_build_) {
289731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    boot_times_label_->SetBounds(
290731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick        kInfoLeftPadding,
291731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick        height() - (version_size.height() + kInfoBottomPadding),
292731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick        width() - 2 * kInfoLeftPadding,
293731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick        version_size.height());
294731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  }
2953345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  if (progress_bar_) {
2963345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    progress_bar_->SetBounds(
2973345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick        (width() - kProgressBarWidth) / 2,
2983345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick        (height() - kProgressBarBottomPadding - kProgressBarHeight),
2993345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick        kProgressBarWidth,
3003345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick        kProgressBarHeight);
3013345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  }
302513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  if (shutdown_button_) {
303513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    shutdown_button_->LayoutIn(this);
3043345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  }
3053345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  if (background_area_)
30672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    background_area_->SetBoundsRect(this->bounds());
307c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
308c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
309c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid BackgroundView::ChildPreferredSizeChanged(View* child) {
310c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  Layout();
311c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  SchedulePaint();
312c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
313c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
314c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochbool BackgroundView::ShouldOpenButtonOptions(
315c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const views::View* button_view) const {
316513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  if (button_view == status_area_->network_view()) {
317513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    return true;
318513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  }
319c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  if (button_view == status_area_->clock_view() ||
320513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      button_view == status_area_->input_method_view()) {
321c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    return false;
322c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
323c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return true;
324c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
325c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
326513209b27ff55e2841eac0e4120199c23acce758Ben Murdochvoid BackgroundView::OpenButtonOptions(const views::View* button_view) {
327513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  if (button_view == status_area_->network_view()) {
328513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    if (proxy_settings_dialog_.get() == NULL) {
329513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      proxy_settings_dialog_.reset(new ProxySettingsDialog(
330513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch          this, GetNativeWindow()));
331513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    }
332513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    proxy_settings_dialog_->Show();
333513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  }
334c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
335c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
33672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenStatusAreaHost::ScreenMode BackgroundView::GetScreenMode() const {
33772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  return kLoginMode;
338c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
339c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
340ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenStatusAreaHost::TextStyle BackgroundView::GetTextStyle() const {
341ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  return kWhitePlain;
342ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
343ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
344513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// Overridden from LoginHtmlDialog::Delegate:
345513209b27ff55e2841eac0e4120199c23acce758Ben Murdochvoid BackgroundView::OnLocaleChanged() {
346513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Proxy settings dialog contains localized strings.
347513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  proxy_settings_dialog_.reset();
348ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  InitInfoLabels();
349ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  SchedulePaint();
350c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
351c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
3523345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick///////////////////////////////////////////////////////////////////////////////
3533345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// BackgroundView private:
3543345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
355c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid BackgroundView::InitStatusArea() {
356c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  DCHECK(status_area_ == NULL);
357c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  status_area_ = new StatusAreaView(this);
358c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  status_area_->Init();
359c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  AddChildView(status_area_);
360c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
361c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
362c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid BackgroundView::InitInfoLabels() {
363c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ResourceBundle& rb = ResourceBundle::GetSharedInstance();
364c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
365ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  {
366ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    int idx = GetIndexOf(os_version_label_);
367ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    delete os_version_label_;
368ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    os_version_label_ = new views::Label();
369ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    os_version_label_->SetHorizontalAlignment(views::Label::ALIGN_LEFT);
370ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    os_version_label_->SetColor(kVersionColor);
371ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    os_version_label_->SetFont(rb.GetFont(ResourceBundle::SmallFont));
372ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    if (idx < 0)
373ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      AddChildView(os_version_label_);
374ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    else
375ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      AddChildViewAt(os_version_label_, idx);
376ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  }
377731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  if (!is_official_build_) {
378ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    int idx = GetIndexOf(boot_times_label_);
379ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    delete boot_times_label_;
380731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    boot_times_label_ = new views::Label();
381731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    boot_times_label_->SetHorizontalAlignment(views::Label::ALIGN_LEFT);
382731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    boot_times_label_->SetColor(kVersionColor);
383731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    boot_times_label_->SetFont(rb.GetFont(ResourceBundle::SmallFont));
384ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    if (idx < 0)
385ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      AddChildView(boot_times_label_);
386ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    else
387ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      AddChildViewAt(boot_times_label_, idx);
388731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  }
389c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
390c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  if (CrosLibrary::Get()->EnsureLoaded()) {
391ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    version_loader_.EnablePlatformVersions(true);
392c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    version_loader_.GetVersion(
393731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick        &version_consumer_,
394731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick        NewCallback(this, &BackgroundView::OnVersion),
395ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen        is_official_build_ ?
396201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch            VersionLoader::VERSION_SHORT_WITH_DATE :
397201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch            VersionLoader::VERSION_FULL);
398731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    if (!is_official_build_) {
399731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick      boot_times_loader_.GetBootTimes(
400731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          &boot_times_consumer_,
401731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick          NewCallback(this, &BackgroundView::OnBootTimes));
402731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick    }
403c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  } else {
404ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    UpdateVersionLabel();
405ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  }
406ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
407ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  policy::CloudPolicySubsystem* cloud_policy =
408ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      g_browser_process->browser_policy_connector()->cloud_policy_subsystem();
409ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  if (cloud_policy) {
410ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    cloud_policy_registrar_.reset(
411ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen        new policy::CloudPolicySubsystem::ObserverRegistrar(
412ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen          cloud_policy, this));
413ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
414ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    // Ensure that we have up-to-date enterprise info in case enterprise policy
415ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    // is already fetched and has finished initialization.
416ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    UpdateEnterpriseInfo();
417c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
418c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
419c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
4203345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickvoid BackgroundView::InitProgressBar() {
4213345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  std::vector<int> steps;
422201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  steps.push_back(GetStepId(SELECT_NETWORK));
4233345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#if defined(OFFICIAL_BUILD)
424201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  steps.push_back(GetStepId(EULA));
4253345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#endif
426201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  steps.push_back(GetStepId(SIGNIN));
4273345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#if defined(OFFICIAL_BUILD)
428731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick  if (WizardController::IsRegisterScreenDefined())
429201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    steps.push_back(GetStepId(REGISTRATION));
4303345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#endif
431201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  steps.push_back(GetStepId(PICTURE));
4323345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  progress_bar_ = new OobeProgressBar(steps);
4333345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  AddChildView(progress_bar_);
4343345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick}
4353345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
436c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid BackgroundView::UpdateWindowType() {
437c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  std::vector<int> params;
438c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  params.push_back(did_paint_ ? 1 : 0);
439c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  WmIpc::instance()->SetWindowType(
440c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      GTK_WIDGET(GetNativeWindow()),
441c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      WM_IPC_WINDOW_LOGIN_BACKGROUND,
442c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      &params);
443c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
444c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
445ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid BackgroundView::UpdateVersionLabel() {
446ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  if (!CrosLibrary::Get()->EnsureLoaded()) {
447ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    os_version_label_->SetText(
448ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen        ASCIIToWide(CrosLibrary::Get()->load_error_string()));
449ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    return;
450ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  }
451ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
452ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  if (version_text_.empty())
453ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    return;
454ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
455ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  chrome::VersionInfo version_info;
456ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  std::string label_text = l10n_util::GetStringUTF8(IDS_PRODUCT_NAME);
457ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  label_text += ' ';
458ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  label_text += version_info.Version();
459ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  label_text += " (";
460ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // TODO(rkc): Fix this. This needs to be in a resource file, but we have had
461ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // to put it in for merge into R12. Also, look at rtl implications for this
462ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // entire string composition code.
463ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  label_text += kPlatformLabel;
464ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  label_text += ' ';
465ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  label_text += version_text_;
466ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  label_text += ')';
467ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
468ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  if (!enterprise_domain_text_.empty()) {
469ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    label_text += ' ';
470ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    if (enterprise_status_text_.empty()) {
471ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      label_text += l10n_util::GetStringFUTF8(
472ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen          IDS_LOGIN_MANAGED_BY_LABEL_FORMAT,
473ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen          UTF8ToUTF16(enterprise_domain_text_));
474ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    } else {
475ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      label_text += l10n_util::GetStringFUTF8(
476ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen          IDS_LOGIN_MANAGED_BY_WITH_STATUS_LABEL_FORMAT,
477ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen          UTF8ToUTF16(enterprise_domain_text_),
478ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen          UTF8ToUTF16(enterprise_status_text_));
479ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    }
480ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  }
481201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
482201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  // Workaround over incorrect width calculation in old fonts.
483201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  // TODO(glotov): remove the following line when new fonts are used.
484ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  label_text += ' ';
485ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
486ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  os_version_label_->SetText(UTF8ToWide(label_text));
487ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
488ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
489ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid BackgroundView::UpdateEnterpriseInfo() {
490ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  policy::BrowserPolicyConnector* policy_connector =
491ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      g_browser_process->browser_policy_connector();
492ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
493ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  std::string status_text;
494ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  policy::CloudPolicySubsystem* cloud_policy_subsystem =
495ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      policy_connector->cloud_policy_subsystem();
496ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  if (cloud_policy_subsystem) {
497ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    switch (cloud_policy_subsystem->state()) {
498ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      case policy::CloudPolicySubsystem::UNENROLLED:
499ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen        status_text = l10n_util::GetStringUTF8(
500ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen            IDS_LOGIN_MANAGED_BY_STATUS_PENDING);
501ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen        break;
502ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      case policy::CloudPolicySubsystem::UNMANAGED:
503ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      case policy::CloudPolicySubsystem::BAD_GAIA_TOKEN:
504ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      case policy::CloudPolicySubsystem::LOCAL_ERROR:
505ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen        status_text = l10n_util::GetStringUTF8(
506ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen            IDS_LOGIN_MANAGED_BY_STATUS_LOST_CONNECTION);
507ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen        break;
508ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      case policy::CloudPolicySubsystem::NETWORK_ERROR:
509ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen        status_text = l10n_util::GetStringUTF8(
510ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen            IDS_LOGIN_MANAGED_BY_STATUS_NETWORK_ERROR);
511ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen        break;
512ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      case policy::CloudPolicySubsystem::TOKEN_FETCHED:
513ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      case policy::CloudPolicySubsystem::SUCCESS:
514ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen        break;
515ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    }
516ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  }
517ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
518ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  SetEnterpriseInfo(policy_connector->GetEnterpriseDomain(), status_text);
519ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
520ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
521ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid BackgroundView::SetEnterpriseInfo(const std::string& domain_name,
522ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                                       const std::string& status_text) {
523ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  if (domain_name != enterprise_domain_text_ ||
524ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      status_text != enterprise_status_text_) {
525ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    enterprise_domain_text_ = domain_name;
526ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    enterprise_status_text_ = status_text;
527ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    UpdateVersionLabel();
528ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  }
529ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
530ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
531ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid BackgroundView::OnVersion(
532ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    VersionLoader::Handle handle, std::string version) {
533ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  version_text_.swap(version);
534ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  UpdateVersionLabel();
535c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
536c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
537c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid BackgroundView::OnBootTimes(
538c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    BootTimesLoader::Handle handle, BootTimesLoader::BootTimes boot_times) {
539c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  const char* kBootTimesNoChromeExec =
540201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch      "Non-firmware boot took %.2f seconds (kernel %.2fs, system %.2fs)";
541c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  const char* kBootTimesChromeExec =
542201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch      "Non-firmware boot took %.2f seconds "
543201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch      "(kernel %.2fs, system %.2fs, chrome %.2fs)";
544c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  std::string boot_times_text;
545c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
546c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  if (boot_times.chrome > 0) {
547c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    boot_times_text =
5483345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick        base::StringPrintf(
549c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch            kBootTimesChromeExec,
550c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch            boot_times.total,
551c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch            boot_times.pre_startup,
552c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch            boot_times.system,
553c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch            boot_times.chrome);
554c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  } else {
555c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    boot_times_text =
5563345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick        base::StringPrintf(
557c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch            kBootTimesNoChromeExec,
558c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch            boot_times.total,
559c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch            boot_times.pre_startup,
560c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch            boot_times.system);
561c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
562c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Use UTF8ToWide once this string is localized.
563c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  boot_times_label_->SetText(ASCIIToWide(boot_times_text));
564c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
565c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
566ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid BackgroundView::OnPolicyStateChanged(
567ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    policy::CloudPolicySubsystem::PolicySubsystemState state,
568ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    policy::CloudPolicySubsystem::ErrorDetails error_details) {
569ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  UpdateEnterpriseInfo();
570ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
571ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
572c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}  // namespace chromeos
573