1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file.
4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
53345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "chrome/browser/chromeos/login/helper.h"
63345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
7ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/file_util.h"
8dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/browser/chromeos/cros/network_library.h"
9ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/chromeos/system_access.h"
103345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "chrome/browser/google/google_util.h"
113345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "googleurl/src/gurl.h"
12dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "grit/generated_resources.h"
13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "grit/theme_resources.h"
14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "third_party/skia/include/effects/SkGradientShader.h"
15dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "ui/base/l10n/l10n_util.h"
1672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/base/resource/resource_bundle.h"
1772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/gfx/canvas_skia.h"
18201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch#include "views/controls/button/menu_button.h"
19513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include "views/controls/button/native_button.h"
204a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#include "views/controls/label.h"
21513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch#include "views/controls/textfield/textfield.h"
22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "views/controls/throbber.h"
23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "views/painter.h"
24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "views/screen.h"
2521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "views/widget/widget.h"
263f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen#include "views/widget/widget_gtk.h"
27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace chromeos {
29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace {
31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Time in ms per throbber frame.
33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst int kThrobberFrameMs = 60;
34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
35513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch// Time in ms before smoothed throbber is shown.
36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst int kThrobberStartDelayMs = 500;
37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst SkColor kBackgroundCenterColor = SkColorSetRGB(41, 50, 67);
39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst SkColor kBackgroundEdgeColor = SK_ColorBLACK;
40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
413345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickconst char kAccountRecoveryHelpUrl[] =
42ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    "https://www.google.com/support/accounts/bin/answer.py?answer=48598";
433345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass BackgroundPainter : public views::Painter {
45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:
46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  BackgroundPainter() {}
47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void Paint(int w, int h, gfx::Canvas* canvas) {
49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    SkRect rect;
50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    rect.set(SkIntToScalar(0),
51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch             SkIntToScalar(0),
52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch             SkIntToScalar(w),
53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch             SkIntToScalar(h));
54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    SkPaint paint;
55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    paint.setStyle(SkPaint::kFill_Style);
56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    paint.setFlags(SkPaint::kAntiAlias_Flag);
57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    SkColor colors[2] = { kBackgroundCenterColor, kBackgroundEdgeColor };
58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    SkShader* s = SkGradientShader::CreateRadial(
59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch        SkPoint::Make(SkIntToScalar(w / 2), SkIntToScalar(h / 2)),
60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch        SkIntToScalar(w / 2),
61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch        colors,
62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch        NULL,
63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch        2,
64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch        SkShader::kClamp_TileMode,
65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch        NULL);
66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    paint.setShader(s);
67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    s->unref();
68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    canvas->AsCanvasSkia()->drawRect(rect, paint);
69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private:
72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  DISALLOW_COPY_AND_ASSIGN(BackgroundPainter);
73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}  // namespace
76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
7721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian MonsenThrobberHostView::ThrobberHostView()
7821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    : host_view_(this),
7921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      throbber_widget_(NULL) {
8021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen}
8121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
8221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian MonsenThrobberHostView::~ThrobberHostView() {
8321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  StopThrobber();
8421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen}
8521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
8621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsenvoid ThrobberHostView::StartThrobber() {
8721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  StopThrobber();
883f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen
893f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  views::Widget* host_widget = host_view_->GetWidget();
903f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  if (!host_widget) {
913f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen    LOG(WARNING) << "Failed to start the throbber: no Widget";
923f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen    return;
933f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  }
943f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen
953f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  GtkWidget* host_gtk_window = host_widget->GetNativeView();
963f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  while (host_gtk_window && !GTK_IS_WINDOW(host_gtk_window))
973f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen    host_gtk_window = gtk_widget_get_parent(host_gtk_window);
983f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  if (!host_gtk_window) {
993f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen    LOG(WARNING) << "Failed to start the throbber: no GtkWindow";
1003f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen    return;
10121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  }
1023f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen
1033f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  views::SmoothedThrobber* throbber = CreateDefaultSmoothedThrobber();
1043f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  throbber->set_stop_delay_ms(0);
1053f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  gfx::Rect throbber_bounds = CalculateThrobberBounds(throbber);
1063f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen
107ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  views::Widget::CreateParams params(views::Widget::CreateParams::TYPE_POPUP);
108ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  params.transparent = true;
109ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  throbber_widget_ = views::Widget::CreateWidget(params);
110ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  static_cast<views::WidgetGtk*>(throbber_widget_)->make_transient_to_parent();
1113f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen
1123f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  throbber_bounds.Offset(host_view_->GetScreenBounds().origin());
1133f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  throbber_widget_->Init(host_gtk_window, throbber_bounds);
1143f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  throbber_widget_->SetContentsView(throbber);
11572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  // This keeps the window from flashing at startup.
11672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  gdk_window_set_back_pixmap(
11772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      throbber_widget_->GetNativeView()->window, NULL, false);
1183f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  throbber_widget_->Show();
1193f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  // WM can ignore bounds before widget is shown.
1203f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  throbber_widget_->SetBounds(throbber_bounds);
1213f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen  throbber->Start();
12221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen}
12321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
12421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsenvoid ThrobberHostView::StopThrobber() {
12521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  if (throbber_widget_) {
12621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    throbber_widget_->Close();
12721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    throbber_widget_ = NULL;
12821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  }
12921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen}
13021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
13121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsengfx::Rect ThrobberHostView::CalculateThrobberBounds(views::Throbber* throbber) {
13221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  gfx::Rect bounds(throbber->GetPreferredSize());
13321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  bounds.set_x(
13421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      host_view_->width() - login::kThrobberRightMargin - bounds.width());
13521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  bounds.set_y((host_view_->height() - bounds.height()) / 2);
13621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  return bounds;
13721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen}
13821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
13921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsenviews::SmoothedThrobber* CreateDefaultSmoothedThrobber() {
140c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  views::SmoothedThrobber* throbber =
141c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new views::SmoothedThrobber(kThrobberFrameMs);
142c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  throbber->SetFrames(
143c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      ResourceBundle::GetSharedInstance().GetBitmapNamed(IDR_SPINNER));
144c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  throbber->set_start_delay_ms(kThrobberStartDelayMs);
145c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return throbber;
146c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
147c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
148c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochviews::Throbber* CreateDefaultThrobber() {
149c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  views::Throbber* throbber = new views::Throbber(kThrobberFrameMs, false);
150c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  throbber->SetFrames(
151c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      ResourceBundle::GetSharedInstance().GetBitmapNamed(IDR_SPINNER));
152c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return throbber;
153c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
154c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
155c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochviews::Painter* CreateBackgroundPainter() {
156c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return new BackgroundPainter();
157c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
158c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
159c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochgfx::Rect CalculateScreenBounds(const gfx::Size& size) {
160c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  gfx::Rect bounds(views::Screen::GetMonitorWorkAreaNearestWindow(NULL));
161c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  if (!size.IsEmpty()) {
162c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    int horizontal_diff = bounds.width() - size.width();
163c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    int vertical_diff = bounds.height() - size.height();
164c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    bounds.Inset(horizontal_diff / 2, vertical_diff / 2);
165c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
166c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return bounds;
167c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
168c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1694a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochvoid CorrectLabelFontSize(views::Label* label) {
1704a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  if (label)
1714a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch    label->SetFont(label->font().DeriveFont(kFontSizeCorrectionDelta));
1724a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch}
1734a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
174201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdochvoid CorrectMenuButtonFontSize(views::MenuButton* button) {
175201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  if (button)
176201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    button->SetFont(button->font().DeriveFont(kFontSizeCorrectionDelta));
177201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch}
178201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
179513209b27ff55e2841eac0e4120199c23acce758Ben Murdochvoid CorrectNativeButtonFontSize(views::NativeButton* button) {
180513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  if (button)
181513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    button->set_font(button->font().DeriveFont(kFontSizeCorrectionDelta));
182513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch}
183513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
184513209b27ff55e2841eac0e4120199c23acce758Ben Murdochvoid CorrectTextfieldFontSize(views::Textfield* textfield) {
185513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  if (textfield)
186513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    textfield->SetFont(textfield->font().DeriveFont(kFontSizeCorrectionDelta));
187513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch}
188513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
189ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid SetAndCorrectTextfieldFont(views::Textfield* textfield,
190ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                                const gfx::Font& font) {
191ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  if (textfield)
192ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    textfield->SetFont(font.DeriveFont(kFontSizeCorrectionDelta));
193ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
194ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
1953345a6884c488ff3a535c2c9acdd33d74b37e311Iain MerrickGURL GetAccountRecoveryHelpUrl() {
1963345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  return google_util::AppendGoogleLocaleParam(GURL(kAccountRecoveryHelpUrl));
1973345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick}
1983345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
199dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenstring16 GetCurrentNetworkName(NetworkLibrary* network_library) {
200dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  if (!network_library)
201dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen    return string16();
202dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
203dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  if (network_library->ethernet_connected()) {
204dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen    return l10n_util::GetStringUTF16(IDS_STATUSBAR_NETWORK_DEVICE_ETHERNET);
205dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  } else if (network_library->wifi_connected()) {
206ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    return UTF8ToUTF16(network_library->wifi_network()->name());
207dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  } else if (network_library->cellular_connected()) {
208ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    return UTF8ToUTF16(network_library->cellular_network()->name());
209dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  } else if (network_library->ethernet_connecting()) {
210dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen    return l10n_util::GetStringUTF16(IDS_STATUSBAR_NETWORK_DEVICE_ETHERNET);
211dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  } else if (network_library->wifi_connecting()) {
212ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    return UTF8ToUTF16(network_library->wifi_network()->name());
213dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  } else if (network_library->cellular_connecting()) {
214ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen    return UTF8ToUTF16(network_library->cellular_network()->name());
215dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  } else {
216dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen    return string16();
217dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  }
218dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen}
219dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
2204a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochnamespace login {
2214a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
2224a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochgfx::Size WideButton::GetPreferredSize() {
2234a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  gfx::Size preferred_size = NativeButton::GetPreferredSize();
224201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  // Set minimal width.
2254a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  if (preferred_size.width() < kButtonMinWidth)
2264a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch    preferred_size.set_width(kButtonMinWidth);
2274a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch  return preferred_size;
2284a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch}
2294a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
2304a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch}  // namespace login
2314a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
232c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}  // namespace chromeos
233