profile_chooser_view.cc revision 5f1c94371a64b3196d4be9466099bb892df9b88e
1c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// Copyright 2014 The Chromium Authors. All rights reserved.
27d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
37d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// found in the LICENSE file.
47d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
5c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "chrome/browser/ui/views/profiles/profile_chooser_view.h"
67d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
7a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "base/prefs/pref_service.h"
81e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "base/strings/utf_string_conversions.h"
97d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "chrome/browser/browser_process.h"
105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/browser/first_run/first_run.h"
11effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "chrome/browser/lifetime/application_lifetime.h"
125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/browser/prefs/incognito_mode_prefs.h"
13c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "chrome/browser/profiles/profile_avatar_icon_util.h"
140529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "chrome/browser/profiles/profile_info_cache.h"
157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "chrome/browser/profiles/profile_manager.h"
16010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "chrome/browser/profiles/profile_metrics.h"
17d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "chrome/browser/profiles/profile_window.h"
18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/profiles/profiles_state.h"
191e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "chrome/browser/signin/profile_oauth2_token_service_factory.h"
20cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/signin/signin_header_helper.h"
21a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "chrome/browser/signin/signin_manager_factory.h"
22d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "chrome/browser/signin/signin_promo.h"
2368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "chrome/browser/ui/browser.h"
245c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "chrome/browser/ui/browser_commands.h"
250f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "chrome/browser/ui/browser_dialogs.h"
26c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "chrome/browser/ui/chrome_pages.h"
27d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "chrome/browser/ui/singleton_tabs.h"
28c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "chrome/browser/ui/views/profiles/user_manager_view.h"
295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/browser/ui/webui/signin/login_ui_service.h"
305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/browser/ui/webui/signin/login_ui_service_factory.h"
31a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "chrome/common/pref_names.h"
324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "chrome/common/url_constants.h"
33effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "components/signin/core/browser/mutable_profile_oauth2_token_service.h"
34effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "components/signin/core/browser/profile_oauth2_token_service.h"
35cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "components/signin/core/browser/signin_error_controller.h"
36e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include "components/signin/core/browser/signin_manager.h"
370529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "components/signin/core/common/profile_management_switches.h"
38d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "grit/chromium_strings.h"
397d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "grit/generated_resources.h"
403551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "grit/theme_resources.h"
4168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "third_party/skia/include/core/SkColor.h"
427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "ui/base/l10n/l10n_util.h"
437d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "ui/base/resource/resource_bundle.h"
445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ui/gfx/canvas.h"
457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "ui/gfx/image/image.h"
467d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "ui/gfx/image/image_skia.h"
47cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "ui/gfx/path.h"
48cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "ui/gfx/skia_util.h"
49f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "ui/gfx/text_elider.h"
505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ui/native_theme/native_theme.h"
51d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "ui/views/controls/button/blue_button.h"
52effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "ui/views/controls/button/image_button.h"
535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ui/views/controls/button/label_button.h"
54d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "ui/views/controls/button/menu_button.h"
557d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "ui/views/controls/label.h"
567d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "ui/views/controls/link.h"
577d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "ui/views/controls/separator.h"
58c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "ui/views/controls/styled_label.h"
59f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "ui/views/controls/textfield/textfield.h"
604e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "ui/views/controls/webview/webview.h"
617d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "ui/views/layout/grid_layout.h"
627d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "ui/views/layout/layout_constants.h"
637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "ui/views/widget/widget.h"
647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
65d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)namespace {
66d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
6768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// Helpers --------------------------------------------------------------------
6868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)const int kFixedMenuWidth = 250;
705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)const int kButtonHeight = 32;
71effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochconst int kFixedGaiaViewHeight = 400;
72effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochconst int kFixedGaiaViewWidth = 360;
73effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochconst int kFixedAccountRemovalViewWidth = 280;
745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)const int kFixedSwitchUserViewWidth = 280;
755c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuconst int kLargeImageSide = 88;
76d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// The maximum number of times to show the welcome tutorial for an upgrade user.
785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)const int kUpgradeWelcomeTutorialShowMax = 1;
795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
80d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)// Creates a GridLayout with a single column. This ensures that all the child
81d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)// views added get auto-expanded to fill the full width of the bubble.
825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)views::GridLayout* CreateSingleColumnLayout(views::View* view, int width) {
83d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  views::GridLayout* layout = new views::GridLayout(view);
84d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  view->SetLayoutManager(layout);
85d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
86d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  views::ColumnSet* columns = layout->AddColumnSet(0);
875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  columns->AddColumn(views::GridLayout::FILL, views::GridLayout::FILL, 0,
885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                     views::GridLayout::FIXED, width, width);
89d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  return layout;
90d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)}
91d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
92f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)views::Link* CreateLink(const base::string16& link_text,
93d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)                        views::LinkListener* listener) {
94d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  views::Link* link_button = new views::Link(link_text);
95d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  link_button->SetHorizontalAlignment(gfx::ALIGN_LEFT);
96d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  link_button->SetUnderline(false);
97d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  link_button->set_listener(listener);
98d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  return link_button;
99d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)}
100d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
1015c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liugfx::ImageSkia CreateSquarePlaceholderImage(int size) {
1025c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  SkBitmap bitmap;
103116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  bitmap.allocPixels(SkImageInfo::MakeA8(size, size));
1045c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  bitmap.eraseARGB(0, 0, 0, 0);
1055c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  return gfx::ImageSkia::CreateFrom1xBitmap(bitmap);
1065c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu}
10768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
108cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)bool HasAuthError(Profile* profile) {
109cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  const SigninErrorController* error =
110cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      profiles::GetSigninErrorController(profile);
111cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  return error && error->HasError();
112cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
113cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
114cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)std::string GetAuthErrorAccountId(Profile* profile) {
115cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  const SigninErrorController* error =
116cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      profiles::GetSigninErrorController(profile);
117cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  if (!error)
118cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    return std::string();
119cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
120cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  return error->error_account_id();
121cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
122cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
123cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)std::string GetAuthErrorUsername(Profile* profile) {
124cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  const SigninErrorController* error =
125cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      profiles::GetSigninErrorController(profile);
126cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  if (!error)
127cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    return std::string();
128cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
129cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  return error->error_username();
130cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
131cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
132f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// BackgroundColorHoverButton -------------------------------------------------
13368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
134f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// A custom button that allows for setting a background color when hovered over.
1355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class BackgroundColorHoverButton : public views::LabelButton {
13668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) public:
137f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  BackgroundColorHoverButton(views::ButtonListener* listener,
138f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                             const base::string16& text,
1395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                             const gfx::ImageSkia& icon)
1405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      : views::LabelButton(listener, text) {
1415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    SetBorder(views::Border::CreateEmptyBorder(
1425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        0, views::kButtonHEdgeMarginNew, 0, views::kButtonHEdgeMarginNew));
1435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    SetMinSize(gfx::Size(0,
1445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        kButtonHeight + views::kRelatedControlVerticalSpacing));
1455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    SetImage(STATE_NORMAL, icon);
1465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  }
1475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual ~BackgroundColorHoverButton() {}
14968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
15068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) private:
1515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // views::LabelButton:
1525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE {
1535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if ((state() == STATE_PRESSED) ||
1545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        (state() == STATE_HOVERED) ||
1555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        HasFocus()) {
1565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      canvas->DrawColor(GetNativeTheme()->GetSystemColor(
1575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          ui::NativeTheme::kColorId_ButtonHoverBackgroundColor));
1585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    }
1595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    LabelButton::OnPaint(canvas);
1605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  }
16168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
162f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(BackgroundColorHoverButton);
16368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)};
16468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
165f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// SizedContainer -------------------------------------------------
166f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
167f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// A simple container view that takes an explicit preferred size.
168f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class SizedContainer : public views::View {
169f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) public:
170f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  explicit SizedContainer(const gfx::Size& preferred_size)
171f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      : preferred_size_(preferred_size) {}
172f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
173f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  virtual gfx::Size GetPreferredSize() const OVERRIDE {
174f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    return preferred_size_;
175f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  }
176f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
177f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) private:
178f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  gfx::Size preferred_size_;
179f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)};
180f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
181f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}  // namespace
182f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
1835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// RightAlignedIconLabelButton -------------------------------------------------
1845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// A custom LabelButton that has a centered text and right aligned icon.
1865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class RightAlignedIconLabelButton : public views::LabelButton {
1875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) public:
1885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  RightAlignedIconLabelButton(views::ButtonListener* listener,
1895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                              const base::string16& text)
1905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      : views::LabelButton(listener, text) {
1915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  }
1925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) protected:
1945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual void Layout() OVERRIDE {
1955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    // This layout trick keeps the text left-aligned and the icon right-aligned.
1965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    SetHorizontalAlignment(gfx::ALIGN_RIGHT);
1975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    views::LabelButton::Layout();
1985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    label()->SetHorizontalAlignment(gfx::ALIGN_CENTER);
1995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  }
2005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
2015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(RightAlignedIconLabelButton);
2025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)};
203f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
204f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// EditableProfilePhoto -------------------------------------------------
205f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
206f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// A custom Image control that shows a "change" button when moused over.
207f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class EditableProfilePhoto : public views::ImageView {
20868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) public:
209a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  EditableProfilePhoto(views::ButtonListener* listener,
210a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                       const gfx::Image& icon,
2115c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu                       bool is_editing_allowed,
2125c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu                       const gfx::Rect& bounds)
213a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      : views::ImageView(),
214a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        change_photo_button_(NULL) {
2150529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    gfx::Image image = profiles::GetSizedAvatarIcon(
216010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)        icon, true, kLargeImageSide, kLargeImageSide);
217f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    SetImage(image.ToImageSkia());
2185c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    SetBoundsRect(bounds);
219a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
220cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    // Calculate the circular mask that will be used to display the photo.
221f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    circular_mask_.addCircle(SkIntToScalar(bounds.width() / 2),
222f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)                             SkIntToScalar(bounds.height() / 2),
223cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                             SkIntToScalar(bounds.width() / 2));
224010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
225a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    if (!is_editing_allowed)
226a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return;
227a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
228f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    set_notify_enter_exit_on_child(true);
229f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
230f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    // Button overlay that appears when hovering over the image.
231010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    change_photo_button_ = new views::LabelButton(listener, base::string16());
2325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    change_photo_button_->SetHorizontalAlignment(gfx::ALIGN_CENTER);
2335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    change_photo_button_->SetBorder(views::Border::NullBorder());
234f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
235010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    const SkColor kBackgroundColor = SkColorSetARGB(65, 255, 255, 255);
236f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    change_photo_button_->set_background(
237f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        views::Background::CreateSolidBackground(kBackgroundColor));
238010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    change_photo_button_->SetImage(views::LabelButton::STATE_NORMAL,
239cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        *ui::ResourceBundle::GetSharedInstance().GetImageSkiaNamed(
240cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)            IDR_ICON_PROFILES_EDIT_CAMERA));
241010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
242f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    change_photo_button_->SetSize(bounds.size());
243f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    change_photo_button_->SetVisible(false);
244f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    AddChildView(change_photo_button_);
245f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
246f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
247cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE {
248cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    // Display the profile picture as a circle.
249cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    canvas->ClipPath(circular_mask_, true);
250cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    views::ImageView::OnPaint(canvas);
251cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  }
252cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
253cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual void PaintChildren(gfx::Canvas* canvas,
254f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)                             const views::CullSet& cull_set) OVERRIDE {
255cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    // Display any children (the "change photo" overlay) as a circle.
256cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    canvas->ClipPath(circular_mask_, true);
257cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    View::PaintChildren(canvas, cull_set);
258cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  }
259cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
2605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  views::LabelButton* change_photo_button() { return change_photo_button_; }
26168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
26268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) private:
263f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // views::View:
26468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  virtual void OnMouseEntered(const ui::MouseEvent& event) OVERRIDE {
265a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    if (change_photo_button_)
266a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      change_photo_button_->SetVisible(true);
267f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
26868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
26968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  virtual void OnMouseExited(const ui::MouseEvent& event) OVERRIDE {
270a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    if (change_photo_button_)
271a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      change_photo_button_->SetVisible(false);
272f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
27368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
274cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  gfx::Path circular_mask_;
275cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
276a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // Button that is shown when hovering over the image view. Can be NULL if
277a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // the photo isn't allowed to be edited (e.g. for guest profiles).
2785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  views::LabelButton* change_photo_button_;
279f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
280f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(EditableProfilePhoto);
28168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)};
28268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
283f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// EditableProfileName -------------------------------------------------
284f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
285f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// A custom text control that turns into a textfield for editing when clicked.
2865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class EditableProfileName : public RightAlignedIconLabelButton,
287f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                            public views::ButtonListener {
288f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) public:
289f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EditableProfileName(views::TextfieldController* controller,
290a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                      const base::string16& text,
291a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                      bool is_editing_allowed)
2925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      : RightAlignedIconLabelButton(this, text),
293a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        profile_name_textfield_(NULL) {
294f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    ui::ResourceBundle* rb = &ui::ResourceBundle::GetSharedInstance();
2955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    const gfx::FontList& medium_font_list =
2965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        rb->GetFontList(ui::ResourceBundle::MediumFont);
2975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    SetFontList(medium_font_list);
2985c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    SetHorizontalAlignment(gfx::ALIGN_CENTER);
299a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
300cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    if (!is_editing_allowed) {
301cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      SetBorder(views::Border::CreateEmptyBorder(2, 0, 2, 0));
302a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return;
303cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    }
304f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
3055c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    // Show an "edit" pencil icon when hovering over. In the default state,
3065c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    // we need to create an empty placeholder of the correct size, so that
3075c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    // the text doesn't jump around when the hovered icon appears.
3085c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    gfx::ImageSkia hover_image =
3095c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu        *rb->GetImageSkiaNamed(IDR_ICON_PROFILES_EDIT_HOVER);
3105c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    SetImage(STATE_NORMAL, CreateSquarePlaceholderImage(hover_image.width()));
3115c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    SetImage(STATE_HOVERED, hover_image);
3125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    SetImage(STATE_PRESSED,
3135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)             *rb->GetImageSkiaNamed(IDR_ICON_PROFILES_EDIT_PRESSED));
3145c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    // To center the text, we need to offest it by the width of the icon we
3155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    // are adding and its padding. We need to also add a small top/bottom
3165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    // padding to account for the textfield's border.
3175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    const int kIconTextLabelButtonSpacing = 5;
3185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    SetBorder(views::Border::CreateEmptyBorder(
3195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        2, hover_image.width() + kIconTextLabelButtonSpacing, 2, 0));
320f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
321f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    // Textfield that overlaps the button.
322f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    profile_name_textfield_ = new views::Textfield();
3235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    profile_name_textfield_->set_controller(controller);
3245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    profile_name_textfield_->SetFontList(medium_font_list);
3255c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    profile_name_textfield_->SetHorizontalAlignment(gfx::ALIGN_CENTER);
3265c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
327f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    profile_name_textfield_->SetVisible(false);
328f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    AddChildView(profile_name_textfield_);
329f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
330f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
331f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  views::Textfield* profile_name_textfield() {
332f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    return profile_name_textfield_;
333f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
334f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
3355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Hide the editable textfield to show the profile name button instead.
336f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void ShowReadOnlyView() {
337a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    if (profile_name_textfield_)
338a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      profile_name_textfield_->SetVisible(false);
339f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
340f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
341f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) private:
342f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // views::ButtonListener:
343f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual void ButtonPressed(views::Button* sender,
344f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                            const ui::Event& event) OVERRIDE {
345a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    if (profile_name_textfield_) {
346a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      profile_name_textfield_->SetVisible(true);
3475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      profile_name_textfield_->SetText(GetText());
348a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      profile_name_textfield_->SelectAll(false);
349a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      profile_name_textfield_->RequestFocus();
350a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    }
351f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
352f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
3535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // views::LabelButton:
354f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual bool OnKeyReleased(const ui::KeyEvent& event) OVERRIDE {
355f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    // Override CustomButton's implementation, which presses the button when
356f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    // you press space and clicks it when you release space, as the space can be
357f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    // part of the new profile name typed in the textfield.
358f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    return false;
359f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
360f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
361f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual void Layout() OVERRIDE {
362a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    if (profile_name_textfield_)
363a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      profile_name_textfield_->SetBounds(0, 0, width(), height());
3645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    RightAlignedIconLabelButton::Layout();
365f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
366f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
3675c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  // Textfield that is shown when editing the profile name. Can be NULL if
368a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // the profile name isn't allowed to be edited (e.g. for guest profiles).
369f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  views::Textfield* profile_name_textfield_;
370f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
371f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(EditableProfileName);
372f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)};
373d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
374effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// A title card with one back button right aligned and one label center aligned.
375effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochclass TitleCard : public views::View {
376effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch public:
3775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  TitleCard(const base::string16& message, views::ButtonListener* listener,
3785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            views::ImageButton** back_button) {
379effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    back_button_ = new views::ImageButton(listener);
380effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    back_button_->SetImageAlignment(views::ImageButton::ALIGN_LEFT,
381effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                                    views::ImageButton::ALIGN_MIDDLE);
382effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    ui::ResourceBundle* rb = &ui::ResourceBundle::GetSharedInstance();
383effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    back_button_->SetImage(views::ImageButton::STATE_NORMAL,
384effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                           rb->GetImageSkiaNamed(IDR_BACK));
385effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    back_button_->SetImage(views::ImageButton::STATE_HOVERED,
386effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                           rb->GetImageSkiaNamed(IDR_BACK_H));
387effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    back_button_->SetImage(views::ImageButton::STATE_PRESSED,
388effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                           rb->GetImageSkiaNamed(IDR_BACK_P));
389effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    back_button_->SetImage(views::ImageButton::STATE_DISABLED,
390effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                           rb->GetImageSkiaNamed(IDR_BACK_D));
391effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    *back_button = back_button_;
392effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
3935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    title_label_ = new views::Label(message);
394effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    title_label_->SetHorizontalAlignment(gfx::ALIGN_CENTER);
395effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    const gfx::FontList& medium_font_list =
396effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch        rb->GetFontList(ui::ResourceBundle::MediumFont);
397effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    title_label_->SetFontList(medium_font_list);
398effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
399effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    AddChildView(back_button_);
400effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    AddChildView(title_label_);
401effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  }
402effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
403010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // Creates a new view that has the |title_card| with padding at the top, an
404010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // edge-to-edge separator below, and the specified |view| at the bottom.
405010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  static views::View* AddPaddedTitleCard(views::View* view,
406010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                                         TitleCard* title_card,
407010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                                         int width) {
408010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    views::View* titled_view = new views::View();
409010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    views::GridLayout* layout = new views::GridLayout(titled_view);
410010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    titled_view->SetLayoutManager(layout);
411010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
412010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    // Column set 0 is a single column layout with horizontal padding at left
413010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    // and right, and column set 1 is a single column layout with no padding.
414010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    views::ColumnSet* columns = layout->AddColumnSet(0);
415010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    columns->AddPaddingColumn(1, views::kButtonHEdgeMarginNew);
416010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    int available_width = width - 2 * views::kButtonHEdgeMarginNew;
417010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    columns->AddColumn(views::GridLayout::FILL, views::GridLayout::FILL, 0,
418010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)        views::GridLayout::FIXED, available_width, available_width);
419010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    columns->AddPaddingColumn(1, views::kButtonHEdgeMarginNew);
420010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    layout->AddColumnSet(1)->AddColumn(views::GridLayout::FILL,
421010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)        views::GridLayout::FILL, 0,views::GridLayout::FIXED, width, width);
422010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
423010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    layout->StartRowWithPadding(1, 0, 0, views::kButtonVEdgeMarginNew);
424010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    layout->AddView(title_card);
425010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    layout->StartRowWithPadding(1, 1, 0, views::kRelatedControlVerticalSpacing);
426010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    layout->AddView(new views::Separator(views::Separator::HORIZONTAL));
427010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
428010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    layout->StartRow(1, 1);
429010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    layout->AddView(view);
430010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
431010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    return titled_view;
432010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  }
433010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
434effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch private:
435effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  virtual void Layout() OVERRIDE{
436c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    back_button_->SetBounds(
437c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch        0, 0, back_button_->GetPreferredSize().width(), height());
438effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    title_label_->SetBoundsRect(GetContentsBounds());
439effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  }
440effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
441cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual gfx::Size GetPreferredSize() const OVERRIDE{
442010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    int height = std::max(title_label_->GetPreferredSize().height(),
443010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)        back_button_->GetPreferredSize().height());
444effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    return gfx::Size(width(), height);
445effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  }
446effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
447effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  views::ImageButton* back_button_;
448effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  views::Label* title_label_;
449effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
450effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  DISALLOW_COPY_AND_ASSIGN(TitleCard);
451effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch};
452d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
453d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)// ProfileChooserView ---------------------------------------------------------
454d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
4557d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// static
4567d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)ProfileChooserView* ProfileChooserView::profile_bubble_ = NULL;
457f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)bool ProfileChooserView::close_on_deactivate_for_testing_ = true;
4587d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
4597d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// static
4607d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)void ProfileChooserView::ShowBubble(
461cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    profiles::BubbleViewMode view_mode,
4626d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    const signin::ManageAccountsParams& manage_accounts_params,
4637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    views::View* anchor_view,
4647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    views::BubbleBorder::Arrow arrow,
4657d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    views::BubbleBorder::BubbleAlignment border_alignment,
4667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    Browser* browser) {
467cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  if (IsShowing())
468cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    return;
469cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
470f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  profile_bubble_ = new ProfileChooserView(anchor_view, arrow, browser,
4716d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)      view_mode, manage_accounts_params.service_type);
4727d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  views::BubbleDelegateView::CreateBubble(profile_bubble_);
473f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  profile_bubble_->set_close_on_deactivate(close_on_deactivate_for_testing_);
4747d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  profile_bubble_->SetAlignment(border_alignment);
4757d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  profile_bubble_->GetWidget()->Show();
4768bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  profile_bubble_->SetArrowPaintType(views::BubbleBorder::PAINT_NONE);
4777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
4787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
4797d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// static
4807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)bool ProfileChooserView::IsShowing() {
4817d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  return profile_bubble_ != NULL;
4827d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
4837d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
4847d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// static
4857d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)void ProfileChooserView::Hide() {
4867d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  if (IsShowing())
4877d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    profile_bubble_->GetWidget()->Close();
4887d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
4897d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
490d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)ProfileChooserView::ProfileChooserView(views::View* anchor_view,
491d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)                                       views::BubbleBorder::Arrow arrow,
492a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch                                       Browser* browser,
493cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                                       profiles::BubbleViewMode view_mode,
494cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                                       signin::GAIAServiceType service_type)
4957d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    : BubbleDelegateView(anchor_view, arrow),
496f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      browser_(browser),
497a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      view_mode_(view_mode),
498cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      tutorial_mode_(profiles::TUTORIAL_MODE_NONE),
499cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      gaia_service_type_(service_type) {
500d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  // Reset the default margins inherited from the BubbleDelegateView.
5015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Add a small top/bottom inset so that the bubble's rounded corners show up.
5025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  set_margins(gfx::Insets(1, 0, 1, 0));
503116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  set_background(views::Background::CreateSolidBackground(
504116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      GetNativeTheme()->GetSystemColor(
505116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch          ui::NativeTheme::kColorId_DialogBackground)));
506f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  ResetView();
50768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
50868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  avatar_menu_.reset(new AvatarMenu(
5097d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      &g_browser_process->profile_manager()->GetProfileInfoCache(),
51068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      this,
51168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      browser_));
51268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  avatar_menu_->RebuildMenu();
513f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
514f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  ProfileOAuth2TokenService* oauth2_token_service =
515f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      ProfileOAuth2TokenServiceFactory::GetForProfile(browser_->profile());
516f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  if (oauth2_token_service)
517f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    oauth2_token_service->AddObserver(this);
5187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
5197d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
5207d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)ProfileChooserView::~ProfileChooserView() {
521f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  ProfileOAuth2TokenService* oauth2_token_service =
522f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      ProfileOAuth2TokenServiceFactory::GetForProfile(browser_->profile());
523f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  if (oauth2_token_service)
524f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    oauth2_token_service->RemoveObserver(this);
5257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
5267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
527f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void ProfileChooserView::ResetView() {
5285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  open_other_profile_indexes_map_.clear();
5295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  delete_account_button_map_.clear();
5305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  reauth_account_button_map_.clear();
531d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  manage_accounts_link_ = NULL;
532d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  signin_current_profile_link_ = NULL;
5335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  auth_error_email_button_ = NULL;
5345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  current_profile_photo_ = NULL;
5355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  current_profile_name_ = NULL;
536d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  users_button_ = NULL;
5375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  go_incognito_button_ = NULL;
538effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  lock_button_ = NULL;
5395c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  add_account_link_ = NULL;
5405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  gaia_signin_cancel_button_ = NULL;
541010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  remove_account_button_ = NULL;
542effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  account_removal_cancel_button_ = NULL;
5435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  add_person_button_ = NULL;
5445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  disconnect_button_ = NULL;
5455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  switch_user_cancel_button_ = NULL;
5465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  tutorial_sync_settings_ok_button_ = NULL;
5475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  tutorial_sync_settings_link_ = NULL;
5485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  tutorial_see_whats_new_button_ = NULL;
5495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  tutorial_not_you_link_ = NULL;
550cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  tutorial_mode_ = profiles::TUTORIAL_MODE_NONE;
5517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
5527d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
553d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)void ProfileChooserView::Init() {
554cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // If view mode is PROFILE_CHOOSER but there is an auth error, force
555cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // ACCOUNT_MANAGEMENT mode.
556cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  if (view_mode_ == profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER &&
5575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      HasAuthError(browser_->profile()) &&
5585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      switches::IsEnableAccountConsistency() &&
5595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      avatar_menu_->GetItemAt(avatar_menu_->GetActiveProfileIndex()).
5605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          signed_in) {
561cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    view_mode_ = profiles::BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT;
562cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  }
563cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
564a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  ShowView(view_mode_, avatar_menu_.get());
5657d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
5667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
56768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)void ProfileChooserView::OnAvatarMenuChanged(
56868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    AvatarMenu* avatar_menu) {
5695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Do not refresh the avatar menu if the user is on a signin related view.
5705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  if (view_mode_ == profiles::BUBBLE_VIEW_MODE_GAIA_SIGNIN ||
5715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      view_mode_ == profiles::BUBBLE_VIEW_MODE_GAIA_ADD_ACCOUNT ||
5725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      view_mode_ == profiles::BUBBLE_VIEW_MODE_GAIA_REAUTH) {
5735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return;
5745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  }
5755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
57668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  // Refresh the view with the new menu. We can't just update the local copy
577d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  // as this may have been triggered by a sign out action, in which case
578d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  // the view is being destroyed.
579cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  ShowView(profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER, avatar_menu);
5807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
5817d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
582f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void ProfileChooserView::OnRefreshTokenAvailable(
583f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    const std::string& account_id) {
584cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  if (view_mode_ == profiles::BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT ||
585cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      view_mode_ == profiles::BUBBLE_VIEW_MODE_GAIA_SIGNIN ||
586cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      view_mode_ == profiles::BUBBLE_VIEW_MODE_GAIA_ADD_ACCOUNT ||
587cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      view_mode_ == profiles::BUBBLE_VIEW_MODE_GAIA_REAUTH) {
5885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (view_mode_ == profiles::BUBBLE_VIEW_MODE_GAIA_SIGNIN)
5895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      tutorial_mode_ = profiles::TUTORIAL_MODE_CONFIRM_SIGNIN;
5905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    // The account management UI is only available through the
5915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    // --enable-account-consistency flag.
5925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    ShowView(switches::IsEnableAccountConsistency() ?
5935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        profiles::BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT :
5945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER, avatar_menu_.get());
595f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
596f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
597f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
598f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void ProfileChooserView::OnRefreshTokenRevoked(const std::string& account_id) {
599f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Refresh the account management view when an account is removed from the
600f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // profile.
601cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  if (view_mode_ == profiles::BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT)
602cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    ShowView(profiles::BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT, avatar_menu_.get());
603f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
604f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
605cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void ProfileChooserView::ShowView(profiles::BubbleViewMode view_to_display,
60668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)                                  AvatarMenu* avatar_menu) {
607d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  // The account management view should only be displayed if the active profile
608d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  // is signed in.
6095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  const AvatarMenu::Item& active_item = avatar_menu->GetItemAt(
6105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      avatar_menu->GetActiveProfileIndex());
611cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  if (view_to_display == profiles::BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT) {
6125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    DCHECK(switches::IsEnableAccountConsistency());
613d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    DCHECK(active_item.signed_in);
6147dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  }
6157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
616116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  if (browser_->profile()->IsSupervised() &&
617116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      (view_to_display == profiles::BUBBLE_VIEW_MODE_GAIA_ADD_ACCOUNT ||
618116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch       view_to_display == profiles::BUBBLE_VIEW_MODE_ACCOUNT_REMOVAL)) {
619116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    LOG(WARNING) << "Supervised user attempted to add/remove account";
620116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    return;
621116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  }
622116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
6235c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  // Records the last tutorial mode.
624cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  profiles::TutorialMode last_tutorial_mode = tutorial_mode_;
625f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  ResetView();
6267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  RemoveAllChildViews(true);
627f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  view_mode_ = view_to_display;
6287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
629a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  views::GridLayout* layout;
630a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  views::View* sub_view;
631a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  switch (view_mode_) {
632cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    case profiles::BUBBLE_VIEW_MODE_GAIA_SIGNIN:
633cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    case profiles::BUBBLE_VIEW_MODE_GAIA_ADD_ACCOUNT:
634cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    case profiles::BUBBLE_VIEW_MODE_GAIA_REAUTH:
635a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      layout = CreateSingleColumnLayout(this, kFixedGaiaViewWidth);
636cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      sub_view = CreateGaiaSigninView();
637a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      break;
638cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    case profiles::BUBBLE_VIEW_MODE_ACCOUNT_REMOVAL:
639a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      layout = CreateSingleColumnLayout(this, kFixedAccountRemovalViewWidth);
640a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      sub_view = CreateAccountRemovalView();
641a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      break;
6425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    case profiles::BUBBLE_VIEW_MODE_SWITCH_USER:
6435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      layout = CreateSingleColumnLayout(this, kFixedSwitchUserViewWidth);
6445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      sub_view = CreateSwitchUserView(active_item);
6455c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      break;
646a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    default:
647a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      layout = CreateSingleColumnLayout(this, kFixedMenuWidth);
6485c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      sub_view = CreateProfileChooserView(avatar_menu, last_tutorial_mode);
649effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  }
6507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  layout->StartRow(1, 0);
651a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  layout->AddView(sub_view);
6527d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  Layout();
6538bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  if (GetBubbleFrameView())
6548bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)    SizeToContents();
6557d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
6567d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
657d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)void ProfileChooserView::WindowClosing() {
658d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  DCHECK_EQ(profile_bubble_, this);
659d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  profile_bubble_ = NULL;
6605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
6615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  if (tutorial_mode_ == profiles::TUTORIAL_MODE_CONFIRM_SIGNIN) {
6625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    LoginUIServiceFactory::GetForProfile(browser_->profile())->
6635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        SyncConfirmationUIClosed(false /* configure_sync_first */);
6645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  }
665d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)}
6667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
667d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)void ProfileChooserView::ButtonPressed(views::Button* sender,
668d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)                                       const ui::Event& event) {
669d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  // Disable button after clicking so that it doesn't get clicked twice and
670d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  // start a second action... which can crash Chrome.  But don't disable if it
671d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  // has no parent (like in tests) because that will also crash.
672d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  if (sender->parent())
673d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    sender->SetEnabled(false);
6747d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
675effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  if (sender == users_button_) {
676c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    profiles::ShowUserManagerMaybeWithTutorial(browser_->profile());
6775c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    // If this is a guest session, also close all the guest browser windows.
6785c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    if (browser_->profile()->IsGuestSession())
6795c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      profiles::CloseGuestProfileWindows();
6805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  } else if (sender == go_incognito_button_) {
6815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    DCHECK(ShouldShowGoIncognito());
6825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    chrome::NewIncognitoWindow(browser_);
683effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  } else if (sender == lock_button_) {
684effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    profiles::LockProfile(browser_->profile());
685cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    PostActionPerformed(ProfileMetrics::PROFILE_DESKTOP_MENU_LOCK);
6865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  } else if (sender == auth_error_email_button_) {
6875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    ShowView(profiles::BUBBLE_VIEW_MODE_GAIA_REAUTH, avatar_menu_.get());
6885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  } else if (sender == tutorial_sync_settings_ok_button_) {
6895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    LoginUIServiceFactory::GetForProfile(browser_->profile())->
6905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        SyncConfirmationUIClosed(false /* configure_sync_first */);
6915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    tutorial_mode_ = profiles::TUTORIAL_MODE_NONE;
692cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    ShowView(profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER, avatar_menu_.get());
6935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  } else if (sender == tutorial_see_whats_new_button_) {
6945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    chrome::ShowUserManagerWithTutorial(
6955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        profiles::USER_MANAGER_TUTORIAL_OVERVIEW);
696010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  } else if (sender == remove_account_button_) {
697effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    RemoveAccount();
698effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  } else if (sender == account_removal_cancel_button_) {
699effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    account_id_to_remove_.clear();
700cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    ShowView(profiles::BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT, avatar_menu_.get());
701effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  } else if (sender == gaia_signin_cancel_button_) {
702effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    std::string primary_account =
703effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch        SigninManagerFactory::GetForProfile(browser_->profile())->
704effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch        GetAuthenticatedUsername();
7055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    // The account management view is only available with the
7065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    // --enable-account-consistency flag.
7075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    bool account_management_available = !primary_account.empty() &&
7085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        switches::IsEnableAccountConsistency();
7095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    ShowView(account_management_available ?
7105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        profiles::BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT :
7115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER, avatar_menu_.get());
712effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  } else if (current_profile_photo_ &&
713effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch             sender == current_profile_photo_->change_photo_button()) {
714effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    avatar_menu_->EditProfile(avatar_menu_->GetActiveProfileIndex());
715cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    PostActionPerformed(ProfileMetrics::PROFILE_DESKTOP_MENU_EDIT_IMAGE);
7165c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  } else if (sender == signin_current_profile_link_) {
7175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    ShowView(profiles::BUBBLE_VIEW_MODE_GAIA_SIGNIN, avatar_menu_.get());
7185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  } else if (sender == add_person_button_) {
7195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    profiles::ShowUserManagerMaybeWithTutorial(browser_->profile());
7205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  } else if (sender == disconnect_button_) {
7215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    chrome::ShowSettings(browser_);
7225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  } else if (sender == switch_user_cancel_button_) {
7235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    ShowView(profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER, avatar_menu_.get());
724d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  } else {
7255c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    // Either one of the "other profiles", or one of the profile accounts
7265c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    // buttons was pressed.
7275c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    ButtonIndexes::const_iterator profile_match =
728d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        open_other_profile_indexes_map_.find(sender);
7295c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    if (profile_match != open_other_profile_indexes_map_.end()) {
7305c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      avatar_menu_->SwitchToProfile(
7315c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu          profile_match->second,
7325c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu          ui::DispositionFromEventFlags(event.flags()) == NEW_WINDOW,
7335c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu          ProfileMetrics::SWITCH_PROFILE_ICON);
7345c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    } else {
7355c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      // This was a profile accounts button.
7365c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      AccountButtonIndexes::const_iterator account_match =
737cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)          delete_account_button_map_.find(sender);
738cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      if (account_match != delete_account_button_map_.end()) {
739cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        account_id_to_remove_ = account_match->second;
740cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        ShowView(profiles::BUBBLE_VIEW_MODE_ACCOUNT_REMOVAL,
741cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)            avatar_menu_.get());
742cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      } else {
743cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        account_match = reauth_account_button_map_.find(sender);
744cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        DCHECK(account_match != reauth_account_button_map_.end());
745cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        ShowView(profiles::BUBBLE_VIEW_MODE_GAIA_REAUTH, avatar_menu_.get());
746cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      }
7475c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    }
748d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  }
7497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
7507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
751effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochvoid ProfileChooserView::RemoveAccount() {
752effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  DCHECK(!account_id_to_remove_.empty());
7535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  MutableProfileOAuth2TokenService* oauth2_token_service =
7545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      ProfileOAuth2TokenServiceFactory::GetPlatformSpecificForProfile(
755effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      browser_->profile());
756cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  if (oauth2_token_service) {
757effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    oauth2_token_service->RevokeCredentials(account_id_to_remove_);
758cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    PostActionPerformed(ProfileMetrics::PROFILE_DESKTOP_MENU_REMOVE_ACCT);
759cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  }
760effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  account_id_to_remove_.clear();
761effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
762cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  ShowView(profiles::BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT, avatar_menu_.get());
763f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
764f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
765d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)void ProfileChooserView::LinkClicked(views::Link* sender, int event_flags) {
766d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  if (sender == manage_accounts_link_) {
7675c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    // This link can either mean show/hide the account management view,
7685c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    // depending on which view it is displayed. ShowView() will DCHECK if
7695c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    // the account management view is displayed for non signed-in users.
7705c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    ShowView(
771cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        view_mode_ == profiles::BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT ?
772cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)            profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER :
773cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)            profiles::BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT,
7745c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu        avatar_menu_.get());
7755c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  } else if (sender == add_account_link_) {
776cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    ShowView(profiles::BUBBLE_VIEW_MODE_GAIA_ADD_ACCOUNT, avatar_menu_.get());
777cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    PostActionPerformed(ProfileMetrics::PROFILE_DESKTOP_MENU_ADD_ACCT);
7785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  } else if (sender == tutorial_sync_settings_link_) {
7795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    LoginUIServiceFactory::GetForProfile(browser_->profile())->
7805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        SyncConfirmationUIClosed(true /* configure_sync_first */);
7815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    tutorial_mode_ = profiles::TUTORIAL_MODE_NONE;
782f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  } else {
7835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    DCHECK(sender == tutorial_not_you_link_);
7845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    ShowView(profiles::BUBBLE_VIEW_MODE_SWITCH_USER, avatar_menu_.get());
785f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
786f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
787f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
788c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochvoid ProfileChooserView::StyledLabelLinkClicked(
789c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    const gfx::Range& range, int event_flags) {
790c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  chrome::ShowSettings(browser_);
791c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch}
792c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
793f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)bool ProfileChooserView::HandleKeyEvent(views::Textfield* sender,
794f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                        const ui::KeyEvent& key_event) {
795f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  views::Textfield* name_textfield =
796f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      current_profile_name_->profile_name_textfield();
797f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  DCHECK(sender == name_textfield);
798f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
799f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  if (key_event.key_code() == ui::VKEY_RETURN ||
800f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      key_event.key_code() == ui::VKEY_TAB) {
801f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    // Pressing Tab/Enter commits the new profile name, unless it's empty.
802f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    base::string16 new_profile_name = name_textfield->text();
803f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    if (new_profile_name.empty())
804f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      return true;
805f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
806f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    const AvatarMenu::Item& active_item = avatar_menu_->GetItemAt(
80768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        avatar_menu_->GetActiveProfileIndex());
808f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    Profile* profile = g_browser_process->profile_manager()->GetProfile(
809f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        active_item.profile_path);
810f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    DCHECK(profile);
811f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
812f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    if (profile->IsSupervised())
813f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      return true;
814f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
815f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    profiles::UpdateProfileName(profile, new_profile_name);
816cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    PostActionPerformed(ProfileMetrics::PROFILE_DESKTOP_MENU_EDIT_NAME);
817f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    current_profile_name_->ShowReadOnlyView();
818f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    return true;
819d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  }
820f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  return false;
821d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)}
8227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
823a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochviews::View* ProfileChooserView::CreateProfileChooserView(
824010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    AvatarMenu* avatar_menu,
825cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    profiles::TutorialMode last_tutorial_mode) {
826a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  // TODO(guohui, noms): the view should be customized based on whether new
827a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  // profile management preview is enabled or not.
828a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
829a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  views::View* view = new views::View();
830a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  views::GridLayout* layout = CreateSingleColumnLayout(view, kFixedMenuWidth);
831a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  // Separate items into active and alternatives.
832a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  Indexes other_profiles;
833a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  views::View* tutorial_view = NULL;
834a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  views::View* current_profile_view = NULL;
835a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  views::View* current_profile_accounts = NULL;
836a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  views::View* option_buttons_view = NULL;
837a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  for (size_t i = 0; i < avatar_menu->GetNumberOfItems(); ++i) {
838a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    const AvatarMenu::Item& item = avatar_menu->GetItemAt(i);
839a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    if (item.active) {
8405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      option_buttons_view = CreateOptionsView(
8415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          switches::IsNewProfileManagement() && item.signed_in);
8425c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      current_profile_view = CreateCurrentProfileView(item, false);
843cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      if (view_mode_ == profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER) {
8445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        switch (last_tutorial_mode) {
8455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          case profiles::TUTORIAL_MODE_NONE:
8465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          case profiles::TUTORIAL_MODE_WELCOME_UPGRADE:
8475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            tutorial_view = CreateWelcomeUpgradeTutorialViewIfNeeded(
8485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                last_tutorial_mode == profiles::TUTORIAL_MODE_WELCOME_UPGRADE,
8495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                item);
8505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            break;
8515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          case profiles::TUTORIAL_MODE_CONFIRM_SIGNIN:
8525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            tutorial_view = CreateSigninConfirmationView();
8535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            break;
8545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          case profiles::TUTORIAL_MODE_SHOW_ERROR:
8555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            // TODO(guohui): not implemented yet.
8565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            NOTREACHED();
8575c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu        }
858a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      } else {
859a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        current_profile_accounts = CreateCurrentProfileAccountsView(item);
860a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      }
861a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    } else {
862a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      other_profiles.push_back(i);
863a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    }
864a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  }
865a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
866a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  if (tutorial_view) {
8675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    // TODO(mlerman): update UMA stats for the new tutorial.
868a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    layout->StartRow(1, 0);
869a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    layout->AddView(tutorial_view);
870a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  }
871a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
872a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  if (!current_profile_view) {
873a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    // Guest windows don't have an active profile.
874a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    current_profile_view = CreateGuestProfileView();
875a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    option_buttons_view = CreateOptionsView(false);
876a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  }
877a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
878a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  layout->StartRow(1, 0);
879a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  layout->AddView(current_profile_view);
880a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
881f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  if (view_mode_ != profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER) {
882f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    DCHECK(current_profile_accounts);
883f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    layout->StartRow(0, 0);
884f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    layout->AddView(new views::Separator(views::Separator::HORIZONTAL));
885f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    layout->StartRow(1, 0);
886f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    layout->AddView(current_profile_accounts);
887f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  }
888f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
889f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  if (browser_->profile()->IsSupervised()) {
890cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    layout->StartRow(0, 0);
891cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    layout->AddView(new views::Separator(views::Separator::HORIZONTAL));
892cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    layout->StartRow(1, 0);
893cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    layout->AddView(CreateSupervisedUserDisclaimerView());
894cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  }
895cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
896cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  if (view_mode_ == profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER) {
897a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    layout->StartRow(1, 0);
898a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    if (switches::IsFastUserSwitching())
899a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      layout->AddView(CreateOtherProfilesView(other_profiles));
900a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  }
901a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
902a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  layout->StartRow(0, 0);
903a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  layout->AddView(new views::Separator(views::Separator::HORIZONTAL));
904a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
905010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  if (option_buttons_view) {
9065c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    layout->StartRow(0, 0);
9075c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    layout->AddView(option_buttons_view);
9085c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  }
909a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
910a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  return view;
911a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch}
912a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
913a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochviews::View* ProfileChooserView::CreateTutorialView(
914cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    profiles::TutorialMode tutorial_mode,
915a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    const base::string16& title_text,
916a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    const base::string16& content_text,
917a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    const base::string16& link_text,
918a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    const base::string16& button_text,
919a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    views::Link** link,
920a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    views::LabelButton** button) {
9215c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  tutorial_mode_ = tutorial_mode;
9225c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
923a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  views::View* view = new views::View();
924c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  view->set_background(views::Background::CreateSolidBackground(
925c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      profiles::kAvatarTutorialBackgroundColor));
926a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  views::GridLayout* layout = CreateSingleColumnLayout(view,
927a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      kFixedMenuWidth - 2 * views::kButtonHEdgeMarginNew);
928a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  layout->SetInsets(views::kButtonVEdgeMarginNew,
929a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                    views::kButtonHEdgeMarginNew,
930a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                    views::kButtonVEdgeMarginNew,
931a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                    views::kButtonHEdgeMarginNew);
932a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
933a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Adds title.
934a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  views::Label* title_label = new views::Label(title_text);
935a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  title_label->SetHorizontalAlignment(gfx::ALIGN_LEFT);
936c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  title_label->SetAutoColorReadabilityEnabled(false);
937c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  title_label->SetEnabledColor(SK_ColorWHITE);
938010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  title_label->SetFontList(ui::ResourceBundle::GetSharedInstance().GetFontList(
939c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      ui::ResourceBundle::MediumFont));
940a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  layout->StartRow(1, 0);
941a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  layout->AddView(title_label);
942a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
943c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  // Adds body content.
944a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  views::Label* content_label = new views::Label(content_text);
945c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  content_label->SetMultiLine(true);
946c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  content_label->SetHorizontalAlignment(gfx::ALIGN_LEFT);
947c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  content_label->SetAutoColorReadabilityEnabled(false);
948c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  content_label->SetEnabledColor(profiles::kAvatarTutorialContentTextColor);
949a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  layout->StartRowWithPadding(1, 0, 0, views::kRelatedControlVerticalSpacing);
950c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  layout->AddView(content_label);
951a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
952c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  // Adds links and buttons.
9535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  views::ColumnSet* button_columns = layout->AddColumnSet(1);
954a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  button_columns->AddColumn(views::GridLayout::LEADING,
955a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      views::GridLayout::CENTER, 0, views::GridLayout::USE_PREF, 0, 0);
956a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  button_columns->AddPaddingColumn(
957a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      1, views::kUnrelatedControlHorizontalSpacing);
958a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  button_columns->AddColumn(views::GridLayout::TRAILING,
959a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      views::GridLayout::CENTER, 0, views::GridLayout::USE_PREF, 0, 0);
960a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
961a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  *link = CreateLink(link_text, this);
962a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  (*link)->SetHorizontalAlignment(gfx::ALIGN_LEFT);
963a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  (*link)->SetAutoColorReadabilityEnabled(false);
964a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  (*link)->SetEnabledColor(SK_ColorWHITE);
9655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  layout->StartRowWithPadding(1, 1, 0, views::kUnrelatedControlVerticalSpacing);
9665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  layout->AddView(*link);
967a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
968a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  *button = new views::LabelButton(this, button_text);
969a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  (*button)->SetHorizontalAlignment(gfx::ALIGN_CENTER);
970a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  (*button)->SetStyle(views::Button::STYLE_BUTTON);
9715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  layout->AddView(*button);
972c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
9735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  return view;
974a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
975a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
976d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)views::View* ProfileChooserView::CreateCurrentProfileView(
97768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    const AvatarMenu::Item& avatar_item,
978d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    bool is_guest) {
979d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  views::View* view = new views::View();
9805c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  int column_width = kFixedMenuWidth - 2 * views::kButtonHEdgeMarginNew;
9815c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  views::GridLayout* layout = CreateSingleColumnLayout(view, column_width);
98268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  layout->SetInsets(views::kButtonVEdgeMarginNew,
983d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)                    views::kButtonHEdgeMarginNew,
984010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                    views::kUnrelatedControlVerticalSpacing,
98568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)                    views::kButtonHEdgeMarginNew);
9867d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
9875c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  // Profile icon, centered.
988f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  int x_offset = (column_width - kLargeImageSide) / 2;
9895c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  current_profile_photo_ = new EditableProfilePhoto(
9905c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      this, avatar_item.icon, !is_guest,
9915c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      gfx::Rect(x_offset, 0, kLargeImageSide, kLargeImageSide));
992f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  SizedContainer* profile_icon_container =
993f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      new SizedContainer(gfx::Size(column_width, kLargeImageSide));
994f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  profile_icon_container->AddChildView(current_profile_photo_);
995d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
9965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  ui::ResourceBundle* rb = &ui::ResourceBundle::GetSharedInstance();
997f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  if (browser_->profile()->IsSupervised()) {
99846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    views::ImageView* supervised_icon = new views::ImageView();
99946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    supervised_icon->SetImage(
100046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)        rb->GetImageSkiaNamed(IDR_ICON_PROFILES_MENU_SUPERVISED));
100146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    gfx::Size preferred_size = supervised_icon->GetPreferredSize();
100246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    gfx::Rect parent_bounds = current_profile_photo_->bounds();
100346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    supervised_icon->SetBounds(
100446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)        parent_bounds.right() - preferred_size.width(),
100546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)        parent_bounds.bottom() - preferred_size.height(),
100646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)        preferred_size.width(),
100746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)        preferred_size.height());
1008f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    profile_icon_container->AddChildView(supervised_icon);
100946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  }
101046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
10115c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  layout->StartRow(1, 0);
1012f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  layout->AddView(profile_icon_container);
10137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
10145c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  // Profile name, centered.
1015f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  bool editing_allowed = !is_guest && !browser_->profile()->IsSupervised();
1016a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  current_profile_name_ = new EditableProfileName(
1017116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      this,
1018116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      profiles::GetAvatarNameForProfile(browser_->profile()->GetPath()),
1019116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      editing_allowed);
10205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  layout->StartRowWithPadding(1, 0, 0,
10215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                              views::kRelatedControlSmallVerticalSpacing);
1022d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  layout->StartRow(1, 0);
1023f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  layout->AddView(current_profile_name_);
10243551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
10255c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  if (is_guest)
10265c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    return view;
10273551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
10285c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  // The available links depend on the type of profile that is active.
10295c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  if (avatar_item.signed_in) {
1030cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    layout->StartRow(1, 0);
10315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (switches::IsEnableAccountConsistency()) {
10325c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      base::string16 link_title = l10n_util::GetStringUTF16(
1033cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)          view_mode_ == profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER ?
10345c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu              IDS_PROFILES_PROFILE_MANAGE_ACCOUNTS_BUTTON :
10355c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu              IDS_PROFILES_PROFILE_HIDE_MANAGE_ACCOUNTS_BUTTON);
10365c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      manage_accounts_link_ = CreateLink(link_title, this);
10375c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      manage_accounts_link_->SetHorizontalAlignment(gfx::ALIGN_CENTER);
10385c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      layout->AddView(manage_accounts_link_);
10395c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    } else {
10405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      // Badge the email address if there's an authentication error.
10415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      if (HasAuthError(browser_->profile())) {
10425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        const gfx::ImageSkia warning_image = *rb->GetImageNamed(
10435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            IDR_ICON_PROFILES_ACCOUNT_BUTTON_ERROR).ToImageSkia();
10445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        auth_error_email_button_ =
10455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            new RightAlignedIconLabelButton(this, avatar_item.sync_state);
10465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        auth_error_email_button_->SetElideBehavior(gfx::ELIDE_EMAIL);
10475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        auth_error_email_button_->SetBorder(views::Border::NullBorder());
10485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        auth_error_email_button_->SetImage(
10495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            views::LabelButton::STATE_NORMAL, warning_image);
10505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        auth_error_email_button_->SetTextColor(
10515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            views::LabelButton::STATE_NORMAL,
10525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            views::Link::GetDefaultEnabledColor());
10535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        layout->AddView(auth_error_email_button_);
10545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      } else {
10555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        views::Label* email_label = new views::Label(avatar_item.sync_state);
10565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        email_label->SetElideBehavior(gfx::ELIDE_EMAIL);
10575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        layout->AddView(email_label);
10585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      }
10595c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    }
10605c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  } else {
10615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    SigninManagerBase* signin_manager = SigninManagerFactory::GetForProfile(
10625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        browser_->profile()->GetOriginalProfile());
1063cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    if (signin_manager->IsSigninAllowed()) {
10645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      views::Label* promo = new views::Label(
10655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          l10n_util::GetStringUTF16(IDS_PROFILES_SIGNIN_PROMO));
10665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      promo->SetMultiLine(true);
10675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      promo->SetHorizontalAlignment(gfx::ALIGN_LEFT);
10685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      layout->StartRowWithPadding(1, 0, 0,
10695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                  views::kRelatedControlSmallVerticalSpacing);
10705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      layout->StartRow(1, 0);
10715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      layout->AddView(promo);
10725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1073cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      signin_current_profile_link_ = new views::BlueButton(
1074cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        this, l10n_util::GetStringFUTF16(IDS_SYNC_START_SYNC_BUTTON_LABEL,
1075cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)            l10n_util::GetStringUTF16(IDS_SHORT_PRODUCT_NAME)));
10765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      layout->StartRowWithPadding(1, 0, 0,
10775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                  views::kRelatedControlVerticalSpacing);
1078cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      layout->StartRow(1, 0);
1079cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      layout->AddView(signin_current_profile_link_);
1080cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    }
10815c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  }
10825c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
10833551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  return view;
10843551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}
10853551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
10863551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)views::View* ProfileChooserView::CreateGuestProfileView() {
1087d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  gfx::Image guest_icon =
10880529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch      ui::ResourceBundle::GetSharedInstance().GetImageNamed(
10890529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch          profiles::GetPlaceholderAvatarIconResourceID());
109068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  AvatarMenu::Item guest_avatar_item(0, 0, guest_icon);
10913551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  guest_avatar_item.active = true;
10923551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  guest_avatar_item.name = l10n_util::GetStringUTF16(
1093d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)      IDS_PROFILES_GUEST_PROFILE_NAME);
10943551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  guest_avatar_item.signed_in = false;
10953551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
1096d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  return CreateCurrentProfileView(guest_avatar_item, true);
10977d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
10987d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
10997d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)views::View* ProfileChooserView::CreateOtherProfilesView(
11007d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    const Indexes& avatars_to_show) {
11017d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  views::View* view = new views::View();
11025c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  views::GridLayout* layout = CreateSingleColumnLayout(view, kFixedMenuWidth);
11035c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
110468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  int num_avatars_to_show = avatars_to_show.size();
110568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  for (int i = 0; i < num_avatars_to_show; ++i) {
110668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    const size_t index = avatars_to_show[i];
110768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    const AvatarMenu::Item& item = avatar_menu_->GetItemAt(index);
1108f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    const int kSmallImageSide = 32;
1109d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
11100529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    gfx::Image image = profiles::GetSizedAvatarIcon(
1111010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)        item.icon, true, kSmallImageSide, kSmallImageSide);
1112d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
11135c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    views::LabelButton* button = new BackgroundColorHoverButton(
11145c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu        this,
11155c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu        item.name,
11165c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu        *image.ToImageSkia());
1117d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    open_other_profile_indexes_map_[button] = index;
1118d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
1119d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    layout->StartRow(1, 0);
11205c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    layout->AddView(new views::Separator(views::Separator::HORIZONTAL));
11215c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    layout->StartRow(1, 0);
1122d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    layout->AddView(button);
11237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  }
11247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
11257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  return view;
11267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
11277d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
1128effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochviews::View* ProfileChooserView::CreateOptionsView(bool enable_lock) {
1129d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  views::View* view = new views::View();
11305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  views::GridLayout* layout = CreateSingleColumnLayout(view, kFixedMenuWidth);
1131effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
11325c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  base::string16 text = browser_->profile()->IsGuestSession() ?
11335c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      l10n_util::GetStringUTF16(IDS_PROFILES_EXIT_GUEST) :
11345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringUTF16(IDS_PROFILES_SWITCH_USERS_BUTTON);
1135d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  ui::ResourceBundle* rb = &ui::ResourceBundle::GetSharedInstance();
113668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  users_button_ = new BackgroundColorHoverButton(
113768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      this,
11385c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      text,
1139effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      *rb->GetImageSkiaNamed(IDR_ICON_PROFILES_MENU_AVATAR));
1140d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  layout->StartRow(1, 0);
1141d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  layout->AddView(users_button_);
1142a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch
11435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  if (ShouldShowGoIncognito()) {
11445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    layout->StartRow(1, 0);
11455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    layout->AddView(new views::Separator(views::Separator::HORIZONTAL));
11465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
11475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    // TODO(noms): Use the correct incognito icon when it's available.
11485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    go_incognito_button_ = new BackgroundColorHoverButton(
11495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        this,
11505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        l10n_util::GetStringUTF16(IDS_PROFILES_GO_INCOGNITO_BUTTON),
11515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        *rb->GetImageSkiaNamed(IDR_ICON_PROFILES_MENU_AVATAR));
11525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    layout->StartRow(1, 0);
11535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    layout->AddView(go_incognito_button_);
11545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  }
11555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1156effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  if (enable_lock) {
11575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    layout->StartRow(1, 0);
11585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    layout->AddView(new views::Separator(views::Separator::HORIZONTAL));
11595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
1160effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    lock_button_ = new BackgroundColorHoverButton(
1161effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch        this,
11625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        l10n_util::GetStringUTF16(IDS_PROFILES_PROFILE_SIGNOUT_BUTTON),
1163effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch        *rb->GetImageSkiaNamed(IDR_ICON_PROFILES_MENU_LOCK));
11645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    layout->StartRow(1, 0);
1165effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    layout->AddView(lock_button_);
1166effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  }
1167d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  return view;
1168d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)}
11697dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
1170cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)views::View* ProfileChooserView::CreateSupervisedUserDisclaimerView() {
1171cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  views::View* view = new views::View();
1172cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  views::GridLayout* layout = CreateSingleColumnLayout(
1173cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      view, kFixedMenuWidth - 2 * views::kButtonHEdgeMarginNew);
1174cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  layout->SetInsets(views::kRelatedControlVerticalSpacing,
1175cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                    views::kButtonHEdgeMarginNew,
1176cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                    views::kRelatedControlVerticalSpacing,
1177cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                    views::kButtonHEdgeMarginNew);
1178cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  views::Label* disclaimer = new views::Label(
1179f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      avatar_menu_->GetSupervisedUserInformation());
1180cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  disclaimer->SetMultiLine(true);
1181cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  disclaimer->SetHorizontalAlignment(gfx::ALIGN_LEFT);
1182cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  ui::ResourceBundle* rb = &ui::ResourceBundle::GetSharedInstance();
1183cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  disclaimer->SetFontList(rb->GetFontList(ui::ResourceBundle::SmallFont));
1184cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  layout->StartRow(1, 0);
1185cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  layout->AddView(disclaimer);
1186cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
1187cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  return view;
1188cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
1189cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
1190d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)views::View* ProfileChooserView::CreateCurrentProfileAccountsView(
119168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    const AvatarMenu::Item& avatar_item) {
1192d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  DCHECK(avatar_item.signed_in);
1193a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch  views::View* view = new views::View();
11945c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  view->set_background(views::Background::CreateSolidBackground(
11955c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      profiles::kAvatarBubbleAccountsBackgroundColor));
11965c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  views::GridLayout* layout = CreateSingleColumnLayout(view, kFixedMenuWidth);
11977d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
11981e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  Profile* profile = browser_->profile();
1199a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  std::string primary_account =
1200a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      SigninManagerFactory::GetForProfile(profile)->GetAuthenticatedUsername();
1201a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  DCHECK(!primary_account.empty());
12025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  std::vector<std::string>accounts =
12035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      profiles::GetSecondaryAccountsForProfile(profile, primary_account);
12047d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
1205cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Get state of authentication error, if any.
1206cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  std::string error_account_id = GetAuthErrorAccountId(profile);
1207cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
12085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // The primary account should always be listed first.
12095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // TODO(rogerta): we still need to further differentiate the primary account
12105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // from the others in the UI, so more work is likely required here:
12115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // crbug.com/311124.
1212cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  CreateAccountButton(layout, primary_account, true,
1213cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                      error_account_id == primary_account, kFixedMenuWidth);
12145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  for (size_t i = 0; i < accounts.size(); ++i)
1215cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    CreateAccountButton(layout, accounts[i], false,
1216cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                        error_account_id == accounts[i], kFixedMenuWidth);
12177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
1218116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  if (!profile->IsSupervised()) {
1219116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing);
1220116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1221116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    add_account_link_ = CreateLink(l10n_util::GetStringFUTF16(
1222116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        IDS_PROFILES_PROFILE_ADD_ACCOUNT_BUTTON, avatar_item.name), this);
1223116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    add_account_link_->SetBorder(views::Border::CreateEmptyBorder(
1224116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        0, views::kButtonVEdgeMarginNew,
1225116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        views::kRelatedControlVerticalSpacing, 0));
1226116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    layout->StartRow(1, 0);
1227116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    layout->AddView(add_account_link_);
1228116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  }
1229116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
12307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  return view;
12317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
1232a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
1233a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)void ProfileChooserView::CreateAccountButton(views::GridLayout* layout,
1234a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                                             const std::string& account,
12355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                             bool is_primary_account,
1236cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                                             bool reauth_required,
12375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                             int width) {
1238a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  ui::ResourceBundle* rb = &ui::ResourceBundle::GetSharedInstance();
1239cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  const gfx::ImageSkia* delete_default_image =
12405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      rb->GetImageNamed(IDR_CLOSE_1).ToImageSkia();
1241cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  const int kDeleteButtonWidth = delete_default_image->width();
12426d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  const gfx::ImageSkia warning_default_image = reauth_required ?
12436d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)      *rb->GetImageNamed(IDR_ICON_PROFILES_ACCOUNT_BUTTON_ERROR).ToImageSkia() :
12446d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)      gfx::ImageSkia();
1245cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  const int kWarningButtonWidth = reauth_required ?
12466d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)      warning_default_image.width() + views::kRelatedButtonHSpacing : 0;
12476d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  int available_width = width - 2 * views::kButtonHEdgeMarginNew
12486d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)      - kDeleteButtonWidth - kWarningButtonWidth;
12495c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  views::LabelButton* email_button = new BackgroundColorHoverButton(
12506d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)      reauth_required ? this : NULL,
12515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      base::UTF8ToUTF16(account),
12526d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)      warning_default_image);
12535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  email_button->SetElideBehavior(gfx::ELIDE_EMAIL);
12545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  email_button->SetMinSize(gfx::Size(0, kButtonHeight));
12555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  email_button->SetMaxSize(gfx::Size(available_width, kButtonHeight));
1256a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  layout->StartRow(1, 0);
1257a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  layout->AddView(email_button);
1258a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
12596d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  if (reauth_required)
12606d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    reauth_account_button_map_[email_button] = account;
1261116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1262116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // Delete button.
1263116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  if (!browser_->profile()->IsSupervised()) {
1264116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    views::ImageButton* delete_button = new views::ImageButton(this);
1265116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    delete_button->SetImageAlignment(views::ImageButton::ALIGN_RIGHT,
1266116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                                     views::ImageButton::ALIGN_MIDDLE);
1267116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    delete_button->SetImage(views::ImageButton::STATE_NORMAL,
1268116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                            delete_default_image);
1269116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    delete_button->SetImage(views::ImageButton::STATE_HOVERED,
1270116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                            rb->GetImageSkiaNamed(IDR_CLOSE_1_H));
1271116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    delete_button->SetImage(views::ImageButton::STATE_PRESSED,
1272116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                            rb->GetImageSkiaNamed(IDR_CLOSE_1_P));
1273116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    delete_button->SetBounds(
1274116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        width - views::kButtonHEdgeMarginNew - kDeleteButtonWidth,
1275116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        0, kDeleteButtonWidth, kButtonHeight);
1276116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1277116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    email_button->set_notify_enter_exit_on_child(true);
1278116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    email_button->AddChildView(delete_button);
1279116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1280116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    // Save the original email address, as the button text could be elided.
1281116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    delete_account_button_map_[delete_button] = account;
1282116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  }
1283a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
1284effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
1285cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)views::View* ProfileChooserView::CreateGaiaSigninView() {
1286cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  GURL url;
1287cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  int message_id;
1288cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
1289cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  switch (view_mode_) {
1290cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    case profiles::BUBBLE_VIEW_MODE_GAIA_SIGNIN:
1291cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      url = signin::GetPromoURL(signin::SOURCE_AVATAR_BUBBLE_SIGN_IN,
1292cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                                false /* auto_close */,
1293cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                                true /* is_constrained */);
1294cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      message_id = IDS_PROFILES_GAIA_SIGNIN_TITLE;
1295cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      break;
1296cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    case profiles::BUBBLE_VIEW_MODE_GAIA_ADD_ACCOUNT:
1297cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      url = signin::GetPromoURL(signin::SOURCE_AVATAR_BUBBLE_ADD_ACCOUNT,
1298cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                                false /* auto_close */,
1299cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                                true /* is_constrained */);
1300cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      message_id = IDS_PROFILES_GAIA_ADD_ACCOUNT_TITLE;
1301cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      break;
1302cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    case profiles::BUBBLE_VIEW_MODE_GAIA_REAUTH: {
1303cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      DCHECK(HasAuthError(browser_->profile()));
1304cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      url = signin::GetReauthURL(browser_->profile(),
1305cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                                 GetAuthErrorUsername(browser_->profile()));
1306cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      message_id = IDS_PROFILES_GAIA_REAUTH_TITLE;
1307cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      break;
1308cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    }
1309cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    default:
1310cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      NOTREACHED() << "Called with invalid mode=" << view_mode_;
1311cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      return NULL;
1312cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  }
1313cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
1314effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // Adds Gaia signin webview
1315effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  Profile* profile = browser_->profile();
1316effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  views::WebView* web_view = new views::WebView(profile);
1317effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  web_view->LoadInitialURL(url);
1318effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  web_view->SetPreferredSize(
1319effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      gfx::Size(kFixedGaiaViewWidth, kFixedGaiaViewHeight));
1320effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
13215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  TitleCard* title_card = new TitleCard(l10n_util::GetStringUTF16(message_id),
13225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                                        this,
1323cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                                        &gaia_signin_cancel_button_);
1324010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  return TitleCard::AddPaddedTitleCard(
1325010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      web_view, title_card, kFixedGaiaViewWidth);
1326effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}
1327effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
1328effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochviews::View* ProfileChooserView::CreateAccountRemovalView() {
1329effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  views::View* view = new views::View();
1330effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  views::GridLayout* layout = CreateSingleColumnLayout(
1331effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      view, kFixedAccountRemovalViewWidth - 2 * views::kButtonHEdgeMarginNew);
1332010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  layout->SetInsets(0,
1333effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                    views::kButtonHEdgeMarginNew,
1334effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                    views::kButtonVEdgeMarginNew,
1335effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                    views::kButtonHEdgeMarginNew);
1336effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
1337effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  const std::string& primary_account = SigninManagerFactory::GetForProfile(
1338effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      browser_->profile())->GetAuthenticatedUsername();
1339effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  bool is_primary_account = primary_account == account_id_to_remove_;
1340effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
1341effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // Adds main text.
1342c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  layout->StartRowWithPadding(1, 0, 0, views::kUnrelatedControlVerticalSpacing);
1343effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  ui::ResourceBundle* rb = &ui::ResourceBundle::GetSharedInstance();
1344effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  const gfx::FontList& small_font_list =
1345effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      rb->GetFontList(ui::ResourceBundle::SmallFont);
1346c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
1347c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  if (is_primary_account) {
1348c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    std::vector<size_t> offsets;
1349c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    const base::string16 settings_text =
1350c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch        l10n_util::GetStringUTF16(IDS_PROFILES_SETTINGS_LINK);
13510529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    const base::string16 primary_account_removal_text =
1352c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch        l10n_util::GetStringFUTF16(IDS_PROFILES_PRIMARY_ACCOUNT_REMOVAL_TEXT,
1353c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch            base::UTF8ToUTF16(account_id_to_remove_), settings_text, &offsets);
1354c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    views::StyledLabel* primary_account_removal_label =
13550529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch        new views::StyledLabel(primary_account_removal_text, this);
1356c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    primary_account_removal_label->AddStyleRange(
1357c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch        gfx::Range(offsets[1], offsets[1] + settings_text.size()),
1358c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch        views::StyledLabel::RangeStyleInfo::CreateForLink());
1359c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    primary_account_removal_label->SetBaseFontList(small_font_list);
1360c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    layout->AddView(primary_account_removal_label);
1361c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  } else {
1362c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    views::Label* content_label = new views::Label(
1363c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch        l10n_util::GetStringUTF16(IDS_PROFILES_ACCOUNT_REMOVAL_TEXT));
1364c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    content_label->SetMultiLine(true);
1365c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    content_label->SetHorizontalAlignment(gfx::ALIGN_LEFT);
1366c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    content_label->SetFontList(small_font_list);
1367c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    layout->AddView(content_label);
1368c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  }
1369effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
1370effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // Adds button.
1371effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  if (!is_primary_account) {
1372010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    remove_account_button_ = new views::BlueButton(
1373effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch        this, l10n_util::GetStringUTF16(IDS_PROFILES_ACCOUNT_REMOVAL_BUTTON));
1374010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    remove_account_button_->SetHorizontalAlignment(
1375effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch        gfx::ALIGN_CENTER);
1376effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    layout->StartRowWithPadding(
1377effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch        1, 0, 0, views::kUnrelatedControlVerticalSpacing);
1378010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    layout->AddView(remove_account_button_);
1379effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  } else {
1380effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    layout->AddPaddingRow(0, views::kUnrelatedControlVerticalSpacing);
1381effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  }
1382effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
13835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  TitleCard* title_card = new TitleCard(
13845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringUTF16(IDS_PROFILES_ACCOUNT_REMOVAL_TITLE),
1385010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      this, &account_removal_cancel_button_);
1386010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  return TitleCard::AddPaddedTitleCard(view, title_card,
1387010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      kFixedAccountRemovalViewWidth);
1388effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}
1389a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
13905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)views::View* ProfileChooserView::CreateWelcomeUpgradeTutorialViewIfNeeded(
13915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    bool tutorial_shown, const AvatarMenu::Item& avatar_item){
13925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  if (first_run::IsChromeFirstRun())
13935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return NULL;
13945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
13955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  Profile* profile = browser_->profile();
13965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  if (!avatar_item.signed_in) {
13975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    profile->GetPrefs()->SetInteger(
13985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        prefs::kProfileAvatarTutorialShown, kUpgradeWelcomeTutorialShowMax + 1);
13995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return NULL;
14005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  }
14015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
14025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  const int show_count = profile->GetPrefs()->GetInteger(
14035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      prefs::kProfileAvatarTutorialShown);
14045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Do not show the tutorial if user has dismissed it.
14055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  if (show_count > kUpgradeWelcomeTutorialShowMax)
14065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    return NULL;
14075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
14085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  if (!tutorial_shown) {
14095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (show_count == kUpgradeWelcomeTutorialShowMax)
14105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      return NULL;
14115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    profile->GetPrefs()->SetInteger(
14125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        prefs::kProfileAvatarTutorialShown, show_count + 1);
14135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  }
14145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
14155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  return CreateTutorialView(
14165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      profiles::TUTORIAL_MODE_WELCOME_UPGRADE,
14175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringFUTF16(
14185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          IDS_PROFILES_WELCOME_UPGRADE_TUTORIAL_TITLE, avatar_item.name),
14195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringUTF16(
14205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          IDS_PROFILES_WELCOME_UPGRADE_TUTORIAL_CONTENT_TEXT),
14215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringFUTF16(
14225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          IDS_PROFILES_NOT_YOU, avatar_item.name),
14235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringUTF16(IDS_PROFILES_TUTORIAL_WHATS_NEW_BUTTON),
14245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      &tutorial_not_you_link_,
14255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      &tutorial_see_whats_new_button_);
14265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
14275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
14285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)views::View* ProfileChooserView::CreateSigninConfirmationView(){
1429a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  return CreateTutorialView(
14305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      profiles::TUTORIAL_MODE_CONFIRM_SIGNIN,
14315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringUTF16(IDS_PROFILES_CONFIRM_SIGNIN_TUTORIAL_TITLE),
14325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringUTF16(
14335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          IDS_PROFILES_CONFIRM_SIGNIN_TUTORIAL_CONTENT_TEXT),
14345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringUTF16(IDS_PROFILES_SYNC_SETTINGS_LINK),
14355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringUTF16(IDS_PROFILES_TUTORIAL_OK_BUTTON),
14365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      &tutorial_sync_settings_link_,
14375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      &tutorial_sync_settings_ok_button_);
1438a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch}
14395c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
14405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)views::View* ProfileChooserView::CreateSwitchUserView(
14415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    const AvatarMenu::Item& avatar_item) {
14425c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  views::View* view = new views::View();
14435c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  views::GridLayout* layout = CreateSingleColumnLayout(
14445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      view, kFixedSwitchUserViewWidth);
14455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  views::ColumnSet* columns = layout->AddColumnSet(1);
14465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  columns->AddPaddingColumn(0, views::kButtonHEdgeMarginNew);
14475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  int label_width =
14485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      kFixedSwitchUserViewWidth - 2 * views::kButtonHEdgeMarginNew;
14495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  columns->AddColumn(views::GridLayout::FILL, views::GridLayout::FILL, 0,
14505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                     views::GridLayout::FIXED, label_width, label_width);
14515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  columns->AddPaddingColumn(0, views::kButtonHEdgeMarginNew);
14525c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
14535c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  // Adds main text.
14545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  layout->StartRowWithPadding(1, 1, 0, views::kUnrelatedControlVerticalSpacing);
14555c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  ui::ResourceBundle* rb = &ui::ResourceBundle::GetSharedInstance();
14565c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  const gfx::FontList& small_font_list =
14575c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      rb->GetFontList(ui::ResourceBundle::SmallFont);
14585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  views::Label* content_label = new views::Label(
14595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringFUTF16(
14605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          IDS_PROFILES_NOT_YOU_CONTENT_TEXT, avatar_item.name));
14615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  content_label->SetMultiLine(true);
14625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  content_label->SetHorizontalAlignment(gfx::ALIGN_LEFT);
14635c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  content_label->SetFontList(small_font_list);
14645c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  layout->AddView(content_label);
14655c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
14665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Adds "Add person" button.
14675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  layout->StartRowWithPadding(1, 0, 0, views::kUnrelatedControlVerticalSpacing);
14685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  layout->AddView(new views::Separator(views::Separator::HORIZONTAL));
14695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
14705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  add_person_button_ = new BackgroundColorHoverButton(
14715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      this,
14725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringUTF16(IDS_PROFILES_ADD_PERSON_BUTTON),
14735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      *rb->GetImageSkiaNamed(IDR_ICON_PROFILES_MENU_AVATAR));
14745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  layout->StartRow(1, 0);
14755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  layout->AddView(add_person_button_);
14765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
14775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Adds "Disconnect your Google Account" button.
14785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  layout->StartRow(1, 0);
14795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  layout->AddView(new views::Separator(views::Separator::HORIZONTAL));
14805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
14815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  disconnect_button_ = new BackgroundColorHoverButton(
14825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      this,
14835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringUTF16(IDS_PROFILES_DISCONNECT_BUTTON),
14845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      *rb->GetImageSkiaNamed(IDR_ICON_PROFILES_MENU_AVATAR));
14855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  layout->StartRow(1, 0);
14865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  layout->AddView(disconnect_button_);
14875c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
1488010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  TitleCard* title_card = new TitleCard(
14895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      l10n_util::GetStringFUTF16(IDS_PROFILES_NOT_YOU, avatar_item.name),
14905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      this, &switch_user_cancel_button_);
14915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  return TitleCard::AddPaddedTitleCard(view, title_card,
14925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      kFixedSwitchUserViewWidth);
14935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
14945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
14955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)bool ProfileChooserView::ShouldShowGoIncognito() const {
14965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  bool incognito_available =
14975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      IncognitoModePrefs::GetAvailability(browser_->profile()->GetPrefs()) !=
14985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          IncognitoModePrefs::DISABLED;
14995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  return incognito_available && !browser_->profile()->IsGuestSession();
15005c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu}
15015c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
15025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void ProfileChooserView::PostActionPerformed(
15035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    ProfileMetrics::ProfileDesktopMenu action_performed) {
15045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  ProfileMetrics::LogProfileDesktopMenu(action_performed, gaia_service_type_);
15055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  gaia_service_type_ = signin::GAIA_SERVICE_TYPE_NONE;
15065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
1507