background_view.cc revision 72a454cd3513ac24fbdd0e0cb9ad70b86a99b801
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" 14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/chromeos/login/helper.h" 1572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/chromeos/login/login_utils.h" 163345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "chrome/browser/chromeos/login/oobe_progress_bar.h" 17513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include "chrome/browser/chromeos/login/proxy_settings_dialog.h" 183345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "chrome/browser/chromeos/login/rounded_rect_painter.h" 19513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include "chrome/browser/chromeos/login/shutdown_button.h" 20731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#include "chrome/browser/chromeos/login/wizard_controller.h" 21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/chromeos/status/clock_menu_button.h" 22731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#include "chrome/browser/chromeos/status/input_method_menu_button.h" 23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/chromeos/status/network_menu_button.h" 24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/chromeos/status/status_area_view.h" 25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/chromeos/wm_ipc.h" 2621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/profiles/profile_manager.h" 2772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/ui/views/dom_view.h" 2872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/ui/views/window.h" 2921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "googleurl/src/gurl.h" 30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "grit/chromium_strings.h" 31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "grit/generated_resources.h" 323345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "grit/theme_resources.h" 3321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "third_party/cros/chromeos_wm_ipc_enums.h" 3472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/base/l10n/l10n_util.h" 3572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/base/resource/resource_bundle.h" 3672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/base/x/x11_util.h" 3772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/gfx/gtk_util.h" 383345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "views/controls/button/text_button.h" 39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "views/controls/label.h" 40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "views/screen.h" 41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "views/widget/widget_gtk.h" 4272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "views/window/window.h" 43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// X Windows headers have "#define Status int". That interferes with 45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// NetworkLibrary header which defines enum "Status". 4621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include <X11/cursorfont.h> // NOLINT 4721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include <X11/Xcursor/Xcursor.h> // NOLINT 48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochusing views::WidgetGtk; 50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 513345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merricknamespace { 52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 53731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickconst SkColor kVersionColor = 0xff5c739f; 54731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 55201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch// Returns the corresponding step id for step constant. 56201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdochint GetStepId(size_t step) { 57201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch switch (step) { 58201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch case chromeos::BackgroundView::SELECT_NETWORK: 59201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch return IDS_OOBE_SELECT_NETWORK; 60201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch case chromeos::BackgroundView::EULA: 61201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch return IDS_OOBE_EULA; 62201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch case chromeos::BackgroundView::SIGNIN: 63201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch return IDS_OOBE_SIGNIN; 64201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch case chromeos::BackgroundView::REGISTRATION: 65201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch return IDS_OOBE_REGISTRATION; 66201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch case chromeos::BackgroundView::PICTURE: 67201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch return IDS_OOBE_PICTURE; 68201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch default: 69201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch NOTREACHED(); 70201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch return 0; 71201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch } 72201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch} 73201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 743345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// The same as TextButton but switches cursor to hand cursor when mouse 753345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// is over the button. 763345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickclass TextButtonWithHandCursorOver : public views::TextButton { 773345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick public: 783345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick TextButtonWithHandCursorOver(views::ButtonListener* listener, 793345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick const std::wstring& text) 803345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick : views::TextButton(listener, text) { 813345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 823345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 833345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick virtual ~TextButtonWithHandCursorOver() {} 843345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 853345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick virtual gfx::NativeCursor GetCursorForPoint( 8672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ui::EventType event_type, 873345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick const gfx::Point& p) { 883345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick if (!IsEnabled()) { 893345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return NULL; 903345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 91201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch return gfx::GetCursor(GDK_HAND2); 923345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 933345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 943345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick private: 953345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick DISALLOW_COPY_AND_ASSIGN(TextButtonWithHandCursorOver); 963345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick}; 97c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 983345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// This gets rid of the ugly X default cursor. 99c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochstatic void ResetXCursor() { 100c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // TODO(sky): nuke this once new window manager is in place. 10172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen Display* display = ui::GetXDisplay(); 102c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Cursor cursor = XCreateFontCursor(display, XC_left_ptr); 10372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen XID root_window = ui::GetX11RootWindow(); 104c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch XSetWindowAttributes attr; 105c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch attr.cursor = cursor; 106c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch XChangeWindowAttributes(display, root_window, CWCursor, &attr); 107c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 108c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1093345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} // namespace 1103345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 1113345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merricknamespace chromeos { 1123345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 1133345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick/////////////////////////////////////////////////////////////////////////////// 1143345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// BackgroundView public: 1153345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 1163345a6884c488ff3a535c2c9acdd33d74b37e311Iain MerrickBackgroundView::BackgroundView() 1173345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick : status_area_(NULL), 1183345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick os_version_label_(NULL), 1193345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick boot_times_label_(NULL), 1203345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick progress_bar_(NULL), 121513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch shutdown_button_(NULL), 1223345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick did_paint_(false), 123731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#if defined(OFFICIAL_BUILD) 124731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick is_official_build_(true), 125731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#else 126731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick is_official_build_(false), 127731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#endif 1283345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick background_area_(NULL) { 1293345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 1303345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 1313345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickvoid BackgroundView::Init(const GURL& background_url) { 1323345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick views::Painter* painter = CreateBackgroundPainter(); 1333345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick set_background(views::Background::CreateBackgroundPainter(true, painter)); 1343345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick InitStatusArea(); 1353345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick InitInfoLabels(); 1363345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick if (!background_url.is_empty()) { 1373345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick Profile* profile = ProfileManager::GetDefaultProfile(); 1383345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick background_area_ = new DOMView(); 1393345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick AddChildView(background_area_); 1403345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick background_area_->Init(profile, NULL); 1413345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick background_area_->SetVisible(false); 1423345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick background_area_->LoadURL(background_url); 1433345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 1443345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 1453345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 146201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdochvoid BackgroundView::EnableShutdownButton(bool enable) { 147201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch if (enable) { 148201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch if (shutdown_button_) 149201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch return; 150201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch shutdown_button_ = new ShutdownButton(); 151201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch shutdown_button_->Init(); 152201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch AddChildView(shutdown_button_); 153201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch } else { 154201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch if (!shutdown_button_) 155201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch return; 156201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch delete shutdown_button_; 157201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch shutdown_button_ = NULL; 158201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch SchedulePaint(); 159201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch } 160513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch} 161513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch 162c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// static 163c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochviews::Widget* BackgroundView::CreateWindowContainingView( 164c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const gfx::Rect& bounds, 1653345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick const GURL& background_url, 166c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch BackgroundView** view) { 167c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ResetXCursor(); 168c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 169c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch WidgetGtk* window = new WidgetGtk(WidgetGtk::TYPE_WINDOW); 170c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch window->Init(NULL, bounds); 171c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch *view = new BackgroundView(); 1723345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick (*view)->Init(background_url); 1733345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 1743345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick if ((*view)->ScreenSaverEnabled()) 1753345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick (*view)->ShowScreenSaver(); 1763345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 177c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch window->SetContentsView(*view); 178c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 179c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch (*view)->UpdateWindowType(); 180c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 181c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // This keeps the window from flashing at startup. 182c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GdkWindow* gdk_window = window->GetNativeView()->window; 183c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gdk_window_set_back_pixmap(gdk_window, NULL, false); 184c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 18572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen LoginUtils::Get()->SetBackgroundView(*view); 18672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 187c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return window; 188c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 189c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 19072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenvoid BackgroundView::CreateModalPopup(views::WindowDelegate* view) { 19172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen views::Window* window = browser::CreateViewsWindow( 19272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen GetNativeWindow(), gfx::Rect(), view); 19372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen window->SetIsAlwaysOnTop(true); 19472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen window->Show(); 19572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 19672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 19772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsengfx::NativeWindow BackgroundView::GetNativeWindow() const { 19872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return 19972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen GTK_WINDOW(static_cast<const WidgetGtk*>(GetWidget())->GetNativeView()); 20072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 20172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 202c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid BackgroundView::SetStatusAreaVisible(bool visible) { 203c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch status_area_->SetVisible(visible); 204c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 205c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 2064a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochvoid BackgroundView::SetStatusAreaEnabled(bool enable) { 20772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen status_area_->MakeButtonsActive(enable); 2084a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch} 2094a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 2103345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickvoid BackgroundView::SetOobeProgressBarVisible(bool visible) { 2113345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick if (!progress_bar_ && visible) 2123345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick InitProgressBar(); 2133345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 2143345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick if (progress_bar_) 2153345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick progress_bar_->SetVisible(visible); 2163345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 2173345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 2183345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickbool BackgroundView::IsOobeProgressBarVisible() { 2193345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return progress_bar_ && progress_bar_->IsVisible(); 2203345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 2213345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 2223345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickvoid BackgroundView::SetOobeProgress(LoginStep step) { 223201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch DCHECK(step < STEPS_COUNT); 2243345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick if (progress_bar_) 225201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch progress_bar_->SetStep(GetStepId(step)); 2263345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 2273345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 2283345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickvoid BackgroundView::ShowScreenSaver() { 2293345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick SetStatusAreaVisible(false); 2303345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick background_area_->SetVisible(true); 2313345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 2323345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 2333345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickvoid BackgroundView::HideScreenSaver() { 2343345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick SetStatusAreaVisible(true); 2353345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // TODO(oshima): we need a way to suspend screen saver 2363345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // to save power when it's not visible. 2373345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick background_area_->SetVisible(false); 2383345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 2393345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 2403345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickbool BackgroundView::IsScreenSaverVisible() { 2413345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return ScreenSaverEnabled() && background_area_->IsVisible(); 2423345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 2433345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 2443345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickbool BackgroundView::ScreenSaverEnabled() { 2453345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return background_area_ != NULL; 2463345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 2473345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 2483345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick/////////////////////////////////////////////////////////////////////////////// 2493345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// BackgroundView protected: 2503345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 251c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid BackgroundView::Paint(gfx::Canvas* canvas) { 252c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch views::View::Paint(canvas); 253c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (!did_paint_) { 254c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch did_paint_ = true; 255c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch UpdateWindowType(); 256c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 257c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 258c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 259c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid BackgroundView::Layout() { 2603345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick const int kCornerPadding = 5; 26172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const int kInfoLeftPadding = 10; 26272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const int kInfoBottomPadding = 10; 26372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const int kInfoBetweenLinesPadding = 1; 2643345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick const int kProgressBarBottomPadding = 20; 2653345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick const int kProgressBarWidth = 750; 2663345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick const int kProgressBarHeight = 70; 267c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gfx::Size status_area_size = status_area_->GetPreferredSize(); 268c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch status_area_->SetBounds( 2693345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick width() - status_area_size.width() - kCornerPadding, 2703345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick kCornerPadding, 271c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch status_area_size.width(), 272c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch status_area_size.height()); 273c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gfx::Size version_size = os_version_label_->GetPreferredSize(); 274731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick int os_version_y = height() - version_size.height() - kInfoBottomPadding; 275731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick if (!is_official_build_) 27672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen os_version_y -= (version_size.height() + kInfoBetweenLinesPadding); 277c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch os_version_label_->SetBounds( 278c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch kInfoLeftPadding, 279731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick os_version_y, 280c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch width() - 2 * kInfoLeftPadding, 281c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch version_size.height()); 282731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick if (!is_official_build_) { 283731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick boot_times_label_->SetBounds( 284731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick kInfoLeftPadding, 285731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick height() - (version_size.height() + kInfoBottomPadding), 286731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick width() - 2 * kInfoLeftPadding, 287731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick version_size.height()); 288731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick } 2893345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick if (progress_bar_) { 2903345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick progress_bar_->SetBounds( 2913345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick (width() - kProgressBarWidth) / 2, 2923345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick (height() - kProgressBarBottomPadding - kProgressBarHeight), 2933345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick kProgressBarWidth, 2943345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick kProgressBarHeight); 2953345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 296513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch if (shutdown_button_) { 297513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch shutdown_button_->LayoutIn(this); 2983345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 2993345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick if (background_area_) 30072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen background_area_->SetBoundsRect(this->bounds()); 301c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 302c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 303c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid BackgroundView::ChildPreferredSizeChanged(View* child) { 304c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Layout(); 305c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SchedulePaint(); 306c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 307c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 308c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochbool BackgroundView::ShouldOpenButtonOptions( 309c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const views::View* button_view) const { 310513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch if (button_view == status_area_->network_view()) { 311513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch return true; 312513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 313c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (button_view == status_area_->clock_view() || 314513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch button_view == status_area_->input_method_view()) { 315c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return false; 316c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 317c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch return true; 318c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 319c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 320513209b27ff55e2841eac0e4120199c23acce758Ben Murdochvoid BackgroundView::OpenButtonOptions(const views::View* button_view) { 321513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch if (button_view == status_area_->network_view()) { 322513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch if (proxy_settings_dialog_.get() == NULL) { 323513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch proxy_settings_dialog_.reset(new ProxySettingsDialog( 324513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch this, GetNativeWindow())); 325513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 326513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch proxy_settings_dialog_->Show(); 327513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch } 328c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 329c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 33072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenStatusAreaHost::ScreenMode BackgroundView::GetScreenMode() const { 33172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return kLoginMode; 332c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 333c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 334513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// Overridden from LoginHtmlDialog::Delegate: 335513209b27ff55e2841eac0e4120199c23acce758Ben Murdochvoid BackgroundView::OnLocaleChanged() { 336513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch // Proxy settings dialog contains localized strings. 337513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch proxy_settings_dialog_.reset(); 338c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 339c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 3403345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick/////////////////////////////////////////////////////////////////////////////// 3413345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// BackgroundView private: 3423345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 343c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid BackgroundView::InitStatusArea() { 344c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DCHECK(status_area_ == NULL); 345c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch status_area_ = new StatusAreaView(this); 346c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch status_area_->Init(); 347c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AddChildView(status_area_); 348c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 349c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 350c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid BackgroundView::InitInfoLabels() { 351c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ResourceBundle& rb = ResourceBundle::GetSharedInstance(); 352c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 353c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch os_version_label_ = new views::Label(); 354c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch os_version_label_->SetHorizontalAlignment(views::Label::ALIGN_LEFT); 355c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch os_version_label_->SetColor(kVersionColor); 356c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch os_version_label_->SetFont(rb.GetFont(ResourceBundle::SmallFont)); 357c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch AddChildView(os_version_label_); 358731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick if (!is_official_build_) { 359731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick boot_times_label_ = new views::Label(); 360731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick boot_times_label_->SetHorizontalAlignment(views::Label::ALIGN_LEFT); 361731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick boot_times_label_->SetColor(kVersionColor); 362731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick boot_times_label_->SetFont(rb.GetFont(ResourceBundle::SmallFont)); 363731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick AddChildView(boot_times_label_); 364731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick } 365c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 366c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (CrosLibrary::Get()->EnsureLoaded()) { 367c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch version_loader_.GetVersion( 368731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick &version_consumer_, 369731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick NewCallback(this, &BackgroundView::OnVersion), 370201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch is_official_build_? 371201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch VersionLoader::VERSION_SHORT_WITH_DATE : 372201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch VersionLoader::VERSION_FULL); 373731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick if (!is_official_build_) { 374731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick boot_times_loader_.GetBootTimes( 375731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick &boot_times_consumer_, 376731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick NewCallback(this, &BackgroundView::OnBootTimes)); 377731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick } 378c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } else { 379c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch os_version_label_->SetText( 380c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ASCIIToWide(CrosLibrary::Get()->load_error_string())); 381c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 382c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 383c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 3843345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickvoid BackgroundView::InitProgressBar() { 3853345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick std::vector<int> steps; 386201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch steps.push_back(GetStepId(SELECT_NETWORK)); 3873345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#if defined(OFFICIAL_BUILD) 388201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch steps.push_back(GetStepId(EULA)); 3893345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#endif 390201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch steps.push_back(GetStepId(SIGNIN)); 3913345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#if defined(OFFICIAL_BUILD) 392731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick if (WizardController::IsRegisterScreenDefined()) 393201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch steps.push_back(GetStepId(REGISTRATION)); 3943345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#endif 395201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch steps.push_back(GetStepId(PICTURE)); 3963345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick progress_bar_ = new OobeProgressBar(steps); 3973345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick AddChildView(progress_bar_); 3983345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 3993345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 400c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid BackgroundView::UpdateWindowType() { 401c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::vector<int> params; 402c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch params.push_back(did_paint_ ? 1 : 0); 403c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch WmIpc::instance()->SetWindowType( 404c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GTK_WIDGET(GetNativeWindow()), 405c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch WM_IPC_WINDOW_LOGIN_BACKGROUND, 406c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ¶ms); 407c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 408c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 409c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid BackgroundView::OnVersion( 410c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch VersionLoader::Handle handle, std::string version) { 411c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // TODO(jungshik): Is string concatenation OK here? 412201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch std::string version_text = l10n_util::GetStringUTF8(IDS_PRODUCT_OS_NAME); 413c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch version_text += ' '; 414c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch version_text += l10n_util::GetStringUTF8(IDS_VERSION_FIELD_PREFIX); 415c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch version_text += ' '; 416c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch version_text += version; 417201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 418201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Workaround over incorrect width calculation in old fonts. 419201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // TODO(glotov): remove the following line when new fonts are used. 420201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch version_text += ' '; 421c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch os_version_label_->SetText(UTF8ToWide(version_text)); 422c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 423c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 424c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid BackgroundView::OnBootTimes( 425c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch BootTimesLoader::Handle handle, BootTimesLoader::BootTimes boot_times) { 426c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const char* kBootTimesNoChromeExec = 427201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch "Non-firmware boot took %.2f seconds (kernel %.2fs, system %.2fs)"; 428c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const char* kBootTimesChromeExec = 429201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch "Non-firmware boot took %.2f seconds " 430201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch "(kernel %.2fs, system %.2fs, chrome %.2fs)"; 431c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::string boot_times_text; 432c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 433c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (boot_times.chrome > 0) { 434c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch boot_times_text = 4353345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick base::StringPrintf( 436c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch kBootTimesChromeExec, 437c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch boot_times.total, 438c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch boot_times.pre_startup, 439c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch boot_times.system, 440c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch boot_times.chrome); 441c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } else { 442c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch boot_times_text = 4433345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick base::StringPrintf( 444c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch kBootTimesNoChromeExec, 445c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch boot_times.total, 446c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch boot_times.pre_startup, 447c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch boot_times.system); 448c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 449c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Use UTF8ToWide once this string is localized. 450c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch boot_times_label_->SetText(ASCIIToWide(boot_times_text)); 451c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 452c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 453c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} // namespace chromeos 454