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 ¶ms); 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