profile_chooser_view.cc revision 0529e5d033099cbfc42635f6f6183833b09dff6e
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"
10effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "chrome/browser/lifetime/application_lifetime.h"
11c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "chrome/browser/profiles/profile_avatar_icon_util.h"
120529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "chrome/browser/profiles/profile_info_cache.h"
137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "chrome/browser/profiles/profile_manager.h"
14d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "chrome/browser/profiles/profile_window.h"
15f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/profiles/profiles_state.h"
161e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "chrome/browser/signin/profile_oauth2_token_service_factory.h"
17a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "chrome/browser/signin/signin_manager_factory.h"
18d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "chrome/browser/signin/signin_promo.h"
1968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "chrome/browser/ui/browser.h"
200f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "chrome/browser/ui/browser_dialogs.h"
21c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "chrome/browser/ui/chrome_pages.h"
22d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "chrome/browser/ui/singleton_tabs.h"
23c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "chrome/browser/ui/views/profiles/user_manager_view.h"
24a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "chrome/common/pref_names.h"
254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "chrome/common/url_constants.h"
26effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "components/signin/core/browser/mutable_profile_oauth2_token_service.h"
27effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "components/signin/core/browser/profile_oauth2_token_service.h"
28e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include "components/signin/core/browser/signin_manager.h"
290529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "components/signin/core/common/profile_management_switches.h"
30d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "grit/chromium_strings.h"
317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "grit/generated_resources.h"
323551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "grit/theme_resources.h"
3368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "third_party/skia/include/core/SkColor.h"
347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "ui/base/l10n/l10n_util.h"
357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "ui/base/resource/resource_bundle.h"
365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ui/gfx/canvas.h"
377d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "ui/gfx/image/image.h"
387d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "ui/gfx/image/image_skia.h"
39f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "ui/gfx/text_elider.h"
405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ui/native_theme/native_theme.h"
41d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "ui/views/controls/button/blue_button.h"
42effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "ui/views/controls/button/image_button.h"
435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ui/views/controls/button/label_button.h"
44d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "ui/views/controls/button/menu_button.h"
457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "ui/views/controls/label.h"
467d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "ui/views/controls/link.h"
477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "ui/views/controls/separator.h"
48c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "ui/views/controls/styled_label.h"
49f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "ui/views/controls/textfield/textfield.h"
504e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "ui/views/controls/webview/webview.h"
517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "ui/views/layout/grid_layout.h"
527d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "ui/views/layout/layout_constants.h"
537d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "ui/views/widget/widget.h"
547d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
55d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)namespace {
56d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
5768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// Helpers --------------------------------------------------------------------
5868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)const int kFixedMenuWidth = 250;
6068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)const int kButtonHeight = 29;
61a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)const int kProfileAvatarTutorialShowMax = 5;
62effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochconst int kFixedGaiaViewHeight = 400;
63effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochconst int kFixedGaiaViewWidth = 360;
64effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochconst int kFixedAccountRemovalViewWidth = 280;
65d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
66d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)// Creates a GridLayout with a single column. This ensures that all the child
67d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)// views added get auto-expanded to fill the full width of the bubble.
685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)views::GridLayout* CreateSingleColumnLayout(views::View* view, int width) {
69d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  views::GridLayout* layout = new views::GridLayout(view);
70d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  view->SetLayoutManager(layout);
71d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
72d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  views::ColumnSet* columns = layout->AddColumnSet(0);
735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  columns->AddColumn(views::GridLayout::FILL, views::GridLayout::FILL, 0,
745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                     views::GridLayout::FIXED, width, width);
75d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  return layout;
76d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)}
77d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
78d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)// Creates a GridLayout with two columns.
79d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)views::GridLayout* CreateDoubleColumnLayout(views::View* view) {
80d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  views::GridLayout* layout = new views::GridLayout(view);
81d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  view->SetLayoutManager(layout);
82d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
83d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  views::ColumnSet* columns = layout->AddColumnSet(0);
84d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  columns->AddColumn(views::GridLayout::FILL, views::GridLayout::FILL, 0,
85d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)                     views::GridLayout::USE_PREF, 0, 0);
8668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  columns->AddPaddingColumn(0, views::kUnrelatedControlLargeHorizontalSpacing);
875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  columns->AddColumn(views::GridLayout::FILL, views::GridLayout::FILL, 1,
88d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)                     views::GridLayout::USE_PREF, 0, 0);
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)
10168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
102f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// BackgroundColorHoverButton -------------------------------------------------
10368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
104f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// A custom button that allows for setting a background color when hovered over.
1055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class BackgroundColorHoverButton : public views::LabelButton {
10668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) public:
107f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  BackgroundColorHoverButton(views::ButtonListener* listener,
108f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                             const base::string16& text,
109f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                             const gfx::ImageSkia& normal_icon,
110f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                             const gfx::ImageSkia& hover_icon);
111f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual ~BackgroundColorHoverButton();
11268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
11368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) private:
1145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // views::LabelButton:
1155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE;
11668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
117f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(BackgroundColorHoverButton);
11868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)};
11968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
120f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)BackgroundColorHoverButton::BackgroundColorHoverButton(
121f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    views::ButtonListener* listener,
122a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    const base::string16& text,
123f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    const gfx::ImageSkia& normal_icon,
124f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    const gfx::ImageSkia& hover_icon)
1255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    : views::LabelButton(listener, text) {
1265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  SetBorder(views::Border::CreateEmptyBorder(0, views::kButtonHEdgeMarginNew,
1275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                             0, views::kButtonHEdgeMarginNew));
1285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  set_min_size(gfx::Size(0, kButtonHeight));
1295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  SetImage(STATE_NORMAL, normal_icon);
1305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  SetImage(STATE_HOVERED, hover_icon);
1315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  SetImage(STATE_PRESSED, hover_icon);
132f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
13368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
1345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)BackgroundColorHoverButton::~BackgroundColorHoverButton() {}
135f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
1365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void BackgroundColorHoverButton::OnPaint(gfx::Canvas* canvas) {
1375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if ((state() == STATE_PRESSED) || (state() == STATE_HOVERED) || HasFocus()) {
1385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    canvas->DrawColor(GetNativeTheme()->GetSystemColor(
139effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch        ui::NativeTheme::kColorId_MenuSeparatorColor));
1405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  }
1415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  LabelButton::OnPaint(canvas);
142f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
143f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
144f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}  // namespace
145f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
146f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
147f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// EditableProfilePhoto -------------------------------------------------
148f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
149f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// A custom Image control that shows a "change" button when moused over.
150f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class EditableProfilePhoto : public views::ImageView {
15168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) public:
152a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  EditableProfilePhoto(views::ButtonListener* listener,
153a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                       const gfx::Image& icon,
154a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                       bool is_editing_allowed)
155a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      : views::ImageView(),
156a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        change_photo_button_(NULL) {
157f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    const int kLargeImageSide = 64;
1580529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    gfx::Image image = profiles::GetSizedAvatarIcon(
159f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        icon, true,
160f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        kLargeImageSide + profiles::kAvatarIconPadding,
161f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        kLargeImageSide + profiles::kAvatarIconPadding);
162f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    SetImage(image.ToImageSkia());
163a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
164a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    if (!is_editing_allowed)
165a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return;
166a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
167f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    set_notify_enter_exit_on_child(true);
168f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
169f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    // Button overlay that appears when hovering over the image.
1705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    change_photo_button_ = new views::LabelButton(listener,
171f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        l10n_util::GetStringUTF16(IDS_PROFILES_PROFILE_CHANGE_PHOTO_BUTTON));
1725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    change_photo_button_->SetHorizontalAlignment(gfx::ALIGN_CENTER);
1735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    change_photo_button_->SetBorder(views::Border::NullBorder());
1745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    const SkColor color = SK_ColorWHITE;
1755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    change_photo_button_->SetTextColor(views::Button::STATE_NORMAL, color);
1765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    change_photo_button_->SetTextColor(views::Button::STATE_HOVERED, color);
177f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
1785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    const SkColor kBackgroundColor = SkColorSetARGB(125, 0, 0, 0);
179f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    change_photo_button_->set_background(
180f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        views::Background::CreateSolidBackground(kBackgroundColor));
1815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    // Need to take into account the border padding on the avatar.
1825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    const int kOverlayHeight = 20;
183f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    change_photo_button_->SetBounds(
184f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        profiles::kAvatarIconPadding,
185f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        kLargeImageSide - kOverlayHeight,
186f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        kLargeImageSide - profiles::kAvatarIconPadding,
187f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        kOverlayHeight);
188f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    change_photo_button_->SetVisible(false);
189f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    AddChildView(change_photo_button_);
190f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
191f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
1925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  views::LabelButton* change_photo_button() { return change_photo_button_; }
19368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
19468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) private:
195f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // views::View:
19668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  virtual void OnMouseEntered(const ui::MouseEvent& event) OVERRIDE {
197a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    if (change_photo_button_)
198a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      change_photo_button_->SetVisible(true);
199f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
20068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
20168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  virtual void OnMouseExited(const ui::MouseEvent& event) OVERRIDE {
202a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    if (change_photo_button_)
203a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      change_photo_button_->SetVisible(false);
204f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
20568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
206a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // Button that is shown when hovering over the image view. Can be NULL if
207a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // the photo isn't allowed to be edited (e.g. for guest profiles).
2085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  views::LabelButton* change_photo_button_;
209f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
210f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(EditableProfilePhoto);
21168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)};
21268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
213f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
214f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// EditableProfileName -------------------------------------------------
215f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
216f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// A custom text control that turns into a textfield for editing when clicked.
2175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class EditableProfileName : public views::LabelButton,
218f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                            public views::ButtonListener {
219f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) public:
220f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EditableProfileName(views::TextfieldController* controller,
221a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                      const base::string16& text,
222a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                      bool is_editing_allowed)
2235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      : views::LabelButton(this, text),
224a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        profile_name_textfield_(NULL) {
225f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    ui::ResourceBundle* rb = &ui::ResourceBundle::GetSharedInstance();
2265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    const gfx::FontList& medium_font_list =
2275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        rb->GetFontList(ui::ResourceBundle::MediumFont);
2285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    SetFontList(medium_font_list);
2295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    SetBorder(views::Border::NullBorder());
230a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
231a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    if (!is_editing_allowed)
232a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return;
233f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
2345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    SetImage(STATE_HOVERED,
2355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)             *rb->GetImageSkiaNamed(IDR_ICON_PROFILES_EDIT_HOVER));
2365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    SetImage(STATE_PRESSED,
2375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)             *rb->GetImageSkiaNamed(IDR_ICON_PROFILES_EDIT_PRESSED));
238f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
239f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    // Textfield that overlaps the button.
240f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    profile_name_textfield_ = new views::Textfield();
2415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    profile_name_textfield_->set_controller(controller);
2425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    profile_name_textfield_->SetFontList(medium_font_list);
243f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    profile_name_textfield_->SetVisible(false);
244f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    AddChildView(profile_name_textfield_);
245f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
246f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
247f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  views::Textfield* profile_name_textfield() {
248f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    return profile_name_textfield_;
249f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
250f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
2515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Hide the editable textfield to show the profile name button instead.
252f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void ShowReadOnlyView() {
253a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    if (profile_name_textfield_)
254a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      profile_name_textfield_->SetVisible(false);
255f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
256f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
257f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) private:
258f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // views::ButtonListener:
259f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual void ButtonPressed(views::Button* sender,
260f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                            const ui::Event& event) OVERRIDE {
261a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    if (profile_name_textfield_) {
262a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      profile_name_textfield_->SetVisible(true);
2635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      profile_name_textfield_->SetText(GetText());
264a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      profile_name_textfield_->SelectAll(false);
265a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      profile_name_textfield_->RequestFocus();
266a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    }
267f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
268f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
2695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // views::LabelButton:
270f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual bool OnKeyReleased(const ui::KeyEvent& event) OVERRIDE {
271f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    // Override CustomButton's implementation, which presses the button when
272f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    // you press space and clicks it when you release space, as the space can be
273f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    // part of the new profile name typed in the textfield.
274f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    return false;
275f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
276f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
277f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual void Layout() OVERRIDE {
278a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    if (profile_name_textfield_)
279a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      profile_name_textfield_->SetBounds(0, 0, width(), height());
2805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    // This layout trick keeps the text left-aligned and the icon right-aligned.
2815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    SetHorizontalAlignment(gfx::ALIGN_RIGHT);
2825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    views::LabelButton::Layout();
2835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    label()->SetHorizontalAlignment(gfx::ALIGN_LEFT);
284f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
285f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
286a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // Button that is shown when hovering over the image view. Can be NULL if
287a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // the profile name isn't allowed to be edited (e.g. for guest profiles).
288f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  views::Textfield* profile_name_textfield_;
289f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
290f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(EditableProfileName);
291f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)};
292d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
293effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// A title card with one back button right aligned and one label center aligned.
294effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochclass TitleCard : public views::View {
295effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch public:
296effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch   TitleCard(int message_id, views::ButtonListener* listener,
297effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch             views::ImageButton** back_button) {
298effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    back_button_ = new views::ImageButton(listener);
299effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    back_button_->SetImageAlignment(views::ImageButton::ALIGN_LEFT,
300effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                                    views::ImageButton::ALIGN_MIDDLE);
301effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    ui::ResourceBundle* rb = &ui::ResourceBundle::GetSharedInstance();
302effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    back_button_->SetImage(views::ImageButton::STATE_NORMAL,
303effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                           rb->GetImageSkiaNamed(IDR_BACK));
304effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    back_button_->SetImage(views::ImageButton::STATE_HOVERED,
305effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                           rb->GetImageSkiaNamed(IDR_BACK_H));
306effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    back_button_->SetImage(views::ImageButton::STATE_PRESSED,
307effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                           rb->GetImageSkiaNamed(IDR_BACK_P));
308effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    back_button_->SetImage(views::ImageButton::STATE_DISABLED,
309effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                           rb->GetImageSkiaNamed(IDR_BACK_D));
310effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    *back_button = back_button_;
311effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
312effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    title_label_ = new views::Label(l10n_util::GetStringUTF16(message_id));
313effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    title_label_->SetHorizontalAlignment(gfx::ALIGN_CENTER);
314effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    const gfx::FontList& medium_font_list =
315effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch        rb->GetFontList(ui::ResourceBundle::MediumFont);
316effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    title_label_->SetFontList(medium_font_list);
317effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
318effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    AddChildView(back_button_);
319effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    AddChildView(title_label_);
320effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  }
321effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
322effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch private:
323effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  virtual void Layout() OVERRIDE{
324c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    back_button_->SetBounds(
325c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch        0, 0, back_button_->GetPreferredSize().width(), height());
326effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    title_label_->SetBoundsRect(GetContentsBounds());
327effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  }
328effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
329effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  virtual gfx::Size GetPreferredSize() OVERRIDE{
330effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    int height = profiles::kAvatarIconPadding * 2 +
331effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch        std::max(title_label_->GetPreferredSize().height(),
332effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                 back_button_->GetPreferredSize().height());
333effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    return gfx::Size(width(), height);
334effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  }
335effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
336effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  views::ImageButton* back_button_;
337effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  views::Label* title_label_;
338effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
339effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  DISALLOW_COPY_AND_ASSIGN(TitleCard);
340effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch};
341d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
342d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)// ProfileChooserView ---------------------------------------------------------
343d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
3447d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// static
3457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)ProfileChooserView* ProfileChooserView::profile_bubble_ = NULL;
346f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)bool ProfileChooserView::close_on_deactivate_for_testing_ = true;
3477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
3487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// static
3497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)void ProfileChooserView::ShowBubble(
350effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    BubbleViewMode view_mode,
3517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    views::View* anchor_view,
3527d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    views::BubbleBorder::Arrow arrow,
3537d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    views::BubbleBorder::BubbleAlignment border_alignment,
3547d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    const gfx::Rect& anchor_rect,
3557d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    Browser* browser) {
356a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  profile_bubble_ = new ProfileChooserView(anchor_view, arrow, anchor_rect,
357a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch                                           browser, view_mode);
3587d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  views::BubbleDelegateView::CreateBubble(profile_bubble_);
359f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  profile_bubble_->set_close_on_deactivate(close_on_deactivate_for_testing_);
3607d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  profile_bubble_->SetAlignment(border_alignment);
3617d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  profile_bubble_->GetWidget()->Show();
3628bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  profile_bubble_->SetArrowPaintType(views::BubbleBorder::PAINT_NONE);
3637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
3647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
3657d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// static
3667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)bool ProfileChooserView::IsShowing() {
3677d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  return profile_bubble_ != NULL;
3687d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
3697d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
3707d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// static
3717d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)void ProfileChooserView::Hide() {
3727d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  if (IsShowing())
3737d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    profile_bubble_->GetWidget()->Close();
3747d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
3757d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
376d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)ProfileChooserView::ProfileChooserView(views::View* anchor_view,
377d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)                                       views::BubbleBorder::Arrow arrow,
378d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)                                       const gfx::Rect& anchor_rect,
379a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch                                       Browser* browser,
380a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch                                       BubbleViewMode view_mode)
3817d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    : BubbleDelegateView(anchor_view, arrow),
382f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      browser_(browser),
383a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      view_mode_(view_mode),
38423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)      tutorial_showing_(false) {
385d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  // Reset the default margins inherited from the BubbleDelegateView.
386d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  set_margins(gfx::Insets());
387d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
388f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  ResetView();
38968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
390effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  set_background(views::Background::CreateSolidBackground(
391effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      GetNativeTheme()->GetSystemColor(
392effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch          ui::NativeTheme::kColorId_DialogBackground)));
393effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
39468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  avatar_menu_.reset(new AvatarMenu(
3957d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      &g_browser_process->profile_manager()->GetProfileInfoCache(),
39668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      this,
39768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      browser_));
39868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  avatar_menu_->RebuildMenu();
399f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
400f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  ProfileOAuth2TokenService* oauth2_token_service =
401f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      ProfileOAuth2TokenServiceFactory::GetForProfile(browser_->profile());
402f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  if (oauth2_token_service)
403f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    oauth2_token_service->AddObserver(this);
4047d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
4057d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
4067d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)ProfileChooserView::~ProfileChooserView() {
407f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  ProfileOAuth2TokenService* oauth2_token_service =
408f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      ProfileOAuth2TokenServiceFactory::GetForProfile(browser_->profile());
409f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  if (oauth2_token_service)
410f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    oauth2_token_service->RemoveObserver(this);
4117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
4127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
413f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void ProfileChooserView::ResetView() {
414d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  manage_accounts_link_ = NULL;
415d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  signin_current_profile_link_ = NULL;
416d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  users_button_ = NULL;
417effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  lock_button_ = NULL;
4181e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  add_account_button_ = NULL;
419f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  current_profile_photo_ = NULL;
420f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  current_profile_name_ = NULL;
421a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  tutorial_ok_button_ = NULL;
422a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  tutorial_learn_more_link_ = NULL;
423a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  tutorial_enable_new_profile_management_button_ = NULL;
424effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  account_removal_cancel_button_ = NULL;
425effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  gaia_signin_cancel_button_ = NULL;
426d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  open_other_profile_indexes_map_.clear();
427f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  current_profile_accounts_map_.clear();
42823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  tutorial_showing_ = false;
4297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
4307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
431d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)void ProfileChooserView::Init() {
432a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  ShowView(view_mode_, avatar_menu_.get());
4337d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
4347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
43568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)void ProfileChooserView::OnAvatarMenuChanged(
43668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    AvatarMenu* avatar_menu) {
43768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  // Refresh the view with the new menu. We can't just update the local copy
438d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  // as this may have been triggered by a sign out action, in which case
439d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  // the view is being destroyed.
440effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  ShowView(BUBBLE_VIEW_MODE_PROFILE_CHOOSER, avatar_menu);
4417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
4427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
443f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void ProfileChooserView::OnRefreshTokenAvailable(
444f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    const std::string& account_id) {
445f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Refresh the account management view when a new account is added to the
446f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // profile.
447effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  if (view_mode_ == BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT ||
448effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      view_mode_ == BUBBLE_VIEW_MODE_GAIA_SIGNIN ||
449effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      view_mode_ == BUBBLE_VIEW_MODE_GAIA_ADD_ACCOUNT) {
450effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    ShowView(BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT, avatar_menu_.get());
451f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
452f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
453f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
454f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void ProfileChooserView::OnRefreshTokenRevoked(const std::string& account_id) {
455f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Refresh the account management view when an account is removed from the
456f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // profile.
457effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  if (view_mode_ == BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT)
458effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    ShowView(BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT, avatar_menu_.get());
459f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
460f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
461d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)void ProfileChooserView::ShowView(BubbleViewMode view_to_display,
46268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)                                  AvatarMenu* avatar_menu) {
463d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  // The account management view should only be displayed if the active profile
464d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  // is signed in.
465effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  if (view_to_display == BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT) {
46668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    const AvatarMenu::Item& active_item = avatar_menu->GetItemAt(
46768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        avatar_menu->GetActiveProfileIndex());
468d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    DCHECK(active_item.signed_in);
4697dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  }
4707d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
471a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  // Records if the "mirror enabled" tutorial card is currently shown before
472a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  // resetting the view.
47323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  bool tutorial_shown = tutorial_showing_;
474f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  ResetView();
4757d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  RemoveAllChildViews(true);
476f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  view_mode_ = view_to_display;
4777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
478a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  views::GridLayout* layout;
479a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  views::View* sub_view;
480a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  switch (view_mode_) {
481a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    case BUBBLE_VIEW_MODE_GAIA_SIGNIN:
482a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    case BUBBLE_VIEW_MODE_GAIA_ADD_ACCOUNT:
483a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      layout = CreateSingleColumnLayout(this, kFixedGaiaViewWidth);
484a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      sub_view = CreateGaiaSigninView(
485a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch          view_mode_ == BUBBLE_VIEW_MODE_GAIA_ADD_ACCOUNT);
486a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      break;
487a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    case BUBBLE_VIEW_MODE_ACCOUNT_REMOVAL:
488a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      layout = CreateSingleColumnLayout(this, kFixedAccountRemovalViewWidth);
489a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      sub_view = CreateAccountRemovalView();
490a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      break;
491a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    default:
492a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      layout = CreateSingleColumnLayout(this, kFixedMenuWidth);
493a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      sub_view = CreateProfileChooserView(avatar_menu, tutorial_shown);
494effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  }
4957d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  layout->StartRow(1, 0);
496a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  layout->AddView(sub_view);
4977d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  Layout();
4988bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  if (GetBubbleFrameView())
4998bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)    SizeToContents();
5007d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
5017d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
502d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)void ProfileChooserView::WindowClosing() {
503d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  DCHECK_EQ(profile_bubble_, this);
504d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  profile_bubble_ = NULL;
505d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)}
5067d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
507d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)void ProfileChooserView::ButtonPressed(views::Button* sender,
508d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)                                       const ui::Event& event) {
509d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  // Disable button after clicking so that it doesn't get clicked twice and
510d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  // start a second action... which can crash Chrome.  But don't disable if it
511d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  // has no parent (like in tests) because that will also crash.
512d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  if (sender->parent())
513d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    sender->SetEnabled(false);
5147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
515effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  if (sender == users_button_) {
516c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    profiles::ShowUserManagerMaybeWithTutorial(browser_->profile());
517effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  } else if (sender == lock_button_) {
518effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    profiles::LockProfile(browser_->profile());
5191e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  } else if (sender == add_account_button_) {
520effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    ShowView(BUBBLE_VIEW_MODE_GAIA_ADD_ACCOUNT, avatar_menu_.get());
521a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  } else if (sender == tutorial_ok_button_) {
52223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    // If the user manually dismissed the tutorial, never show it again by
52323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    // setting the number of times shown to the maximum plus 1, so that later we
52423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    // could distinguish between the dismiss case and the case when the tutorial
52523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    // is indeed shown for the maximum number of times.
526a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    browser_->profile()->GetPrefs()->SetInteger(
52723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)        prefs::kProfileAvatarTutorialShown, kProfileAvatarTutorialShowMax + 1);
528effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    ShowView(BUBBLE_VIEW_MODE_PROFILE_CHOOSER, avatar_menu_.get());
529a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  } else if (sender == tutorial_enable_new_profile_management_button_) {
5300529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    profiles::EnableNewProfileManagementPreview();
531effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  } else if (sender == remove_account_and_relaunch_button_) {
532effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    RemoveAccount();
533effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  } else if (sender == account_removal_cancel_button_) {
534effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    account_id_to_remove_.clear();
535effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    ShowView(BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT, avatar_menu_.get());
536effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  } else if (sender == gaia_signin_cancel_button_) {
537effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    std::string primary_account =
538effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch        SigninManagerFactory::GetForProfile(browser_->profile())->
539effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch        GetAuthenticatedUsername();
540effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    ShowView(primary_account.empty() ? BUBBLE_VIEW_MODE_PROFILE_CHOOSER :
541effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                                       BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT,
542effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch             avatar_menu_.get());
543effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  } else if (current_profile_photo_ &&
544effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch             sender == current_profile_photo_->change_photo_button()) {
545effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    avatar_menu_->EditProfile(avatar_menu_->GetActiveProfileIndex());
546d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  } else {
547d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    // One of the "other profiles" buttons was pressed.
548d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    ButtonIndexes::const_iterator match =
549d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        open_other_profile_indexes_map_.find(sender);
550d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    DCHECK(match != open_other_profile_indexes_map_.end());
55168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    avatar_menu_->SwitchToProfile(
552d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        match->second,
5535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        ui::DispositionFromEventFlags(event.flags()) == NEW_WINDOW,
5545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        ProfileMetrics::SWITCH_PROFILE_ICON);
555d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  }
5567d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
5577d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
558f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void ProfileChooserView::OnMenuButtonClicked(views::View* source,
559f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                             const gfx::Point& point) {
560f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AccountButtonIndexes::const_iterator match =
561f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      current_profile_accounts_map_.find(source);
562f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  DCHECK(match != current_profile_accounts_map_.end());
563effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  account_id_to_remove_ = match->second;
564effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  ShowView(BUBBLE_VIEW_MODE_ACCOUNT_REMOVAL, avatar_menu_.get());
565effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}
566f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
567effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochvoid ProfileChooserView::RemoveAccount() {
568effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  DCHECK(!account_id_to_remove_.empty());
5695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  MutableProfileOAuth2TokenService* oauth2_token_service =
5705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      ProfileOAuth2TokenServiceFactory::GetPlatformSpecificForProfile(
571effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      browser_->profile());
572f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  if (oauth2_token_service)
573effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    oauth2_token_service->RevokeCredentials(account_id_to_remove_);
574effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  account_id_to_remove_.clear();
575effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
576effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  chrome::AttemptRestart();
577f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
578f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
579d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)void ProfileChooserView::LinkClicked(views::Link* sender, int event_flags) {
580d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  if (sender == manage_accounts_link_) {
581d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    // ShowView() will DCHECK if this view is displayed for non signed-in users.
582effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    ShowView(BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT, avatar_menu_.get());
583a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  } else if (sender == tutorial_learn_more_link_) {
584a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    // TODO(guohui): update |learn_more_url| once it is decided.
585a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    const GURL lear_more_url("https://support.google.com/chrome/?hl=en#to");
586a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    chrome::NavigateParams params(
587a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)        browser_->profile(),
588a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)        lear_more_url,
589a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)        content::PAGE_TRANSITION_LINK);
590a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    params.disposition = NEW_FOREGROUND_TAB;
591a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    chrome::Navigate(&params);
592f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  } else {
593f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    DCHECK(sender == signin_current_profile_link_);
594effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    ShowView(BUBBLE_VIEW_MODE_GAIA_SIGNIN, avatar_menu_.get());
595f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
596f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
597f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
598c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochvoid ProfileChooserView::StyledLabelLinkClicked(
599c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    const gfx::Range& range, int event_flags) {
600c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  chrome::ShowSettings(browser_);
601c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch}
602c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
603f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)bool ProfileChooserView::HandleKeyEvent(views::Textfield* sender,
604f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                        const ui::KeyEvent& key_event) {
605f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  views::Textfield* name_textfield =
606f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      current_profile_name_->profile_name_textfield();
607f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  DCHECK(sender == name_textfield);
608f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
609f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  if (key_event.key_code() == ui::VKEY_RETURN ||
610f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      key_event.key_code() == ui::VKEY_TAB) {
611f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    // Pressing Tab/Enter commits the new profile name, unless it's empty.
612f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    base::string16 new_profile_name = name_textfield->text();
613f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    if (new_profile_name.empty())
614f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      return true;
615f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
616f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    const AvatarMenu::Item& active_item = avatar_menu_->GetItemAt(
61768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        avatar_menu_->GetActiveProfileIndex());
618f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    Profile* profile = g_browser_process->profile_manager()->GetProfile(
619f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        active_item.profile_path);
620f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    DCHECK(profile);
621f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
622f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    if (profile->IsManaged())
623f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      return true;
624f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
625f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    profiles::UpdateProfileName(profile, new_profile_name);
626f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    current_profile_name_->ShowReadOnlyView();
627f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    return true;
628d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  }
629f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  return false;
630d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)}
6317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
632a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochviews::View* ProfileChooserView::CreateProfileChooserView(
633a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    AvatarMenu* avatar_menu, bool tutorial_shown) {
634a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  // TODO(guohui, noms): the view should be customized based on whether new
635a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  // profile management preview is enabled or not.
636a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
637a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  views::View* view = new views::View();
638a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  views::GridLayout* layout = CreateSingleColumnLayout(view, kFixedMenuWidth);
639a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  // Separate items into active and alternatives.
640a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  Indexes other_profiles;
641a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  views::View* tutorial_view = NULL;
642a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  views::View* current_profile_view = NULL;
643a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  views::View* current_profile_accounts = NULL;
644a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  views::View* option_buttons_view = NULL;
645a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  for (size_t i = 0; i < avatar_menu->GetNumberOfItems(); ++i) {
646a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    const AvatarMenu::Item& item = avatar_menu->GetItemAt(i);
647a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    if (item.active) {
648a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      option_buttons_view = CreateOptionsView(item.signed_in);
649a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      if (view_mode_ == BUBBLE_VIEW_MODE_PROFILE_CHOOSER) {
650a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        tutorial_view = switches::IsNewProfileManagement() ?
651a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch            CreatePreviewEnabledTutorialView(item, tutorial_shown) :
652a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch            CreateNewProfileManagementPreviewView();
653a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        current_profile_view = CreateCurrentProfileView(item, false);
654a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      } else {
655a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        current_profile_view = CreateCurrentProfileEditableView(item);
656a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        current_profile_accounts = CreateCurrentProfileAccountsView(item);
657a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      }
658a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    } else {
659a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      other_profiles.push_back(i);
660a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    }
661a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  }
662a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
663a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  if (tutorial_view) {
664a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    layout->StartRow(1, 0);
665a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    layout->AddView(tutorial_view);
666a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  }
667a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
668a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  if (!current_profile_view) {
669a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    // Guest windows don't have an active profile.
670a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    current_profile_view = CreateGuestProfileView();
671a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    option_buttons_view = CreateOptionsView(false);
672a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  }
673a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
674a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  layout->StartRow(1, 0);
675a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  layout->AddView(current_profile_view);
676a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
677a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  if (view_mode_ == BUBBLE_VIEW_MODE_PROFILE_CHOOSER) {
678a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    layout->StartRow(1, 0);
679a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    if (switches::IsFastUserSwitching())
680a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      layout->AddView(CreateOtherProfilesView(other_profiles));
681a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  } else {
682a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    DCHECK(current_profile_accounts);
683a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    layout->StartRow(0, 0);
684a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    layout->AddView(new views::Separator(views::Separator::HORIZONTAL));
685a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    layout->StartRow(1, 0);
686a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    layout->AddView(current_profile_accounts);
687a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  }
688a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
689a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  layout->StartRow(0, 0);
690a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  layout->AddView(new views::Separator(views::Separator::HORIZONTAL));
691a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
692a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  // Action buttons.
693a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  layout->StartRow(0, 0);
694a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  layout->AddView(option_buttons_view);
695a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
696a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  return view;
697a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch}
698a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
699a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochviews::View* ProfileChooserView::CreatePreviewEnabledTutorialView(
700a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    const AvatarMenu::Item& current_avatar_item,
701a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    bool tutorial_shown) {
702a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  if (!switches::IsNewProfileManagementPreviewEnabled())
703a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    return NULL;
704a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
705a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  Profile* profile = browser_->profile();
70623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  const int show_count = profile->GetPrefs()->GetInteger(
707a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      prefs::kProfileAvatarTutorialShown);
70823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  // Do not show the tutorial if user has dismissed it.
70923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  if (show_count > kProfileAvatarTutorialShowMax)
710a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    return NULL;
711a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
71223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  if (!tutorial_shown) {
71323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    if (show_count == kProfileAvatarTutorialShowMax)
71423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)      return NULL;
71523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    profile->GetPrefs()->SetInteger(
71623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)        prefs::kProfileAvatarTutorialShown, show_count + 1);
71723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  }
71823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  tutorial_showing_ = true;
719a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
720a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  return CreateTutorialView(
721a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      l10n_util::GetStringUTF16(IDS_PROFILES_PREVIEW_ENABLED_TUTORIAL_TITLE),
722a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      l10n_util::GetStringUTF16(
723a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch          IDS_PROFILES_PREVIEW_ENABLED_TUTORIAL_CONTENT_TEXT),
724a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      l10n_util::GetStringUTF16(IDS_PROFILES_PROFILE_TUTORIAL_LEARN_MORE),
725a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      l10n_util::GetStringUTF16(IDS_PROFILES_TUTORIAL_OK_BUTTON),
726a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      &tutorial_learn_more_link_,
727a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      &tutorial_ok_button_);
728a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch}
729a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
730a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochviews::View* ProfileChooserView::CreateTutorialView(
731a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    const base::string16& title_text,
732a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    const base::string16& content_text,
733a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    const base::string16& link_text,
734a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    const base::string16& button_text,
735a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    views::Link** link,
736a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    views::LabelButton** button) {
737a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  views::View* view = new views::View();
738c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  view->set_background(views::Background::CreateSolidBackground(
739c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      profiles::kAvatarTutorialBackgroundColor));
740a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  views::GridLayout* layout = CreateSingleColumnLayout(view,
741a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      kFixedMenuWidth - 2 * views::kButtonHEdgeMarginNew);
742a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  layout->SetInsets(views::kButtonVEdgeMarginNew,
743a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                    views::kButtonHEdgeMarginNew,
744a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                    views::kButtonVEdgeMarginNew,
745a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                    views::kButtonHEdgeMarginNew);
746a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
747a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Adds title.
748a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  views::Label* title_label = new views::Label(title_text);
749a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  title_label->SetHorizontalAlignment(gfx::ALIGN_LEFT);
750c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  title_label->SetAutoColorReadabilityEnabled(false);
751c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  title_label->SetEnabledColor(SK_ColorWHITE);
752c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  title_label ->SetFontList(ui::ResourceBundle::GetSharedInstance().GetFontList(
753c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      ui::ResourceBundle::MediumFont));
754a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  layout->StartRow(1, 0);
755a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  layout->AddView(title_label);
756a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
757c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  // Adds body content.
758a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  views::Label* content_label = new views::Label(content_text);
759c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  content_label->SetMultiLine(true);
760c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  content_label->SetHorizontalAlignment(gfx::ALIGN_LEFT);
761c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  content_label->SetAutoColorReadabilityEnabled(false);
762c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  content_label->SetEnabledColor(profiles::kAvatarTutorialContentTextColor);
763a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  layout->StartRowWithPadding(1, 0, 0, views::kRelatedControlVerticalSpacing);
764c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  layout->AddView(content_label);
765a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
766c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  // Adds links and buttons.
767a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  views::View* button_row = new views::View();
768a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  views::GridLayout* button_layout = new views::GridLayout(button_row);
769a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  views::ColumnSet* button_columns = button_layout->AddColumnSet(0);
770a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  button_columns->AddColumn(views::GridLayout::LEADING,
771a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      views::GridLayout::CENTER, 0, views::GridLayout::USE_PREF, 0, 0);
772a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  button_columns->AddPaddingColumn(
773a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      1, views::kUnrelatedControlHorizontalSpacing);
774a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  button_columns->AddColumn(views::GridLayout::TRAILING,
775a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      views::GridLayout::CENTER, 0, views::GridLayout::USE_PREF, 0, 0);
776a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  button_row->SetLayoutManager(button_layout);
777a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
778a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  *link = CreateLink(link_text, this);
779a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  (*link)->SetHorizontalAlignment(gfx::ALIGN_LEFT);
780a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  (*link)->SetAutoColorReadabilityEnabled(false);
781a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  (*link)->SetEnabledColor(SK_ColorWHITE);
782a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  button_layout->StartRow(1, 0);
783a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  button_layout->AddView(*link);
784a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
785a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  *button = new views::LabelButton(this, button_text);
786a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  (*button)->SetHorizontalAlignment(gfx::ALIGN_CENTER);
787a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  (*button)->SetStyle(views::Button::STYLE_BUTTON);
788a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  button_layout->AddView(*button);
789a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
790a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  layout->StartRowWithPadding(1, 0, 0, views::kUnrelatedControlVerticalSpacing);
791a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  layout->AddView(button_row);
792a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
793c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  // Adds a padded caret image at the bottom.
794c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  views::View* padded_caret_view = new views::View();
795c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  views::GridLayout* padded_caret_layout =
796c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      new views::GridLayout(padded_caret_view);
797c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  views::ColumnSet* padded_columns = padded_caret_layout->AddColumnSet(0);
798c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  padded_columns->AddPaddingColumn(0, views::kButtonHEdgeMarginNew);
799c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  padded_columns->AddColumn(views::GridLayout::LEADING,
800c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      views::GridLayout::CENTER, 0, views::GridLayout::USE_PREF, 0, 0);
801c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  padded_caret_view->SetLayoutManager(padded_caret_layout);
802c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
803c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  views::ImageView* caret_image_view = new views::ImageView();
804c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  ui::ResourceBundle* rb = &ui::ResourceBundle::GetSharedInstance();
805c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  caret_image_view->SetImage(
806c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      *rb->GetImageSkiaNamed(IDR_ICON_PROFILES_MENU_CARET));
807c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
808c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  padded_caret_layout->StartRow(1, 0);
809c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  padded_caret_layout->AddView(caret_image_view);
810c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
811c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  views::View* view_with_caret = new views::View();
812c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  views::GridLayout* layout_with_caret =
813c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      CreateSingleColumnLayout(view_with_caret, kFixedMenuWidth);
814c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  layout_with_caret->StartRow(1, 0);
815c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  layout_with_caret->AddView(view);
816c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  layout_with_caret->StartRow(1, 0);
817c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  layout_with_caret->AddView(padded_caret_view);
818c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  return view_with_caret;
819a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
820a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
821d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)views::View* ProfileChooserView::CreateCurrentProfileView(
82268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    const AvatarMenu::Item& avatar_item,
823d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    bool is_guest) {
824d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  views::View* view = new views::View();
825d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  views::GridLayout* layout = CreateDoubleColumnLayout(view);
82668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  layout->SetInsets(views::kButtonVEdgeMarginNew,
827d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)                    views::kButtonHEdgeMarginNew,
82868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)                    views::kButtonVEdgeMarginNew,
82968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)                    views::kButtonHEdgeMarginNew);
8307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
831a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  current_profile_photo_ =
832a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      new EditableProfilePhoto(this, avatar_item.icon, !is_guest);
833f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  view->SetBoundsRect(current_profile_photo_->bounds());
834a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  current_profile_name_ = new EditableProfileName(
835a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      this, profiles::GetAvatarNameForProfile(browser_->profile()), !is_guest);
8367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  layout->StartRow(1, 0);
837f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  layout->AddView(current_profile_photo_, 1, 3);
838f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  layout->AddView(current_profile_name_);
839d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
840d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  if (is_guest) {
841d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    layout->StartRow(1, 0);
842d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    layout->SkipColumns(1);
843d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    layout->StartRow(1, 0);
844d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    layout->SkipColumns(1);
845d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  } else if (avatar_item.signed_in) {
846d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    manage_accounts_link_ = CreateLink(
847d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        l10n_util::GetStringUTF16(IDS_PROFILES_PROFILE_MANAGE_ACCOUNTS_BUTTON),
848d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        this);
849d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    layout->StartRow(1, 0);
850d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    layout->SkipColumns(1);
851effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    layout->AddView(manage_accounts_link_);
852d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    layout->StartRow(1, 0);
853d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    layout->SkipColumns(1);
854d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  } else {
855d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    signin_current_profile_link_ = CreateLink(
856d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        l10n_util::GetStringFUTF16(
857d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)            IDS_SYNC_START_SYNC_BUTTON_LABEL,
858d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)            l10n_util::GetStringUTF16(IDS_SHORT_PRODUCT_NAME)),
859d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        this);
860d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    layout->StartRow(1, 0);
861d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    layout->SkipColumns(1);
862d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    layout->AddView(signin_current_profile_link_);
863d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    layout->StartRow(1, 0);
864d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    layout->SkipColumns(1);
865d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  }
8667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
8677d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  return view;
8687d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
8697d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
870d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)views::View* ProfileChooserView::CreateCurrentProfileEditableView(
87168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    const AvatarMenu::Item& avatar_item) {
872d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  DCHECK(avatar_item.signed_in);
8737d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  views::View* view = new views::View();
874d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  views::GridLayout* layout = CreateDoubleColumnLayout(view);
87568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  layout->SetInsets(views::kButtonVEdgeMarginNew,
876d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)                    views::kButtonHEdgeMarginNew,
87768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)                    views::kButtonVEdgeMarginNew,
87868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)                    views::kButtonHEdgeMarginNew);
8797d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
880a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  current_profile_photo_ =
881a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      new EditableProfilePhoto(this, avatar_item.icon, true);
882f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  view->SetBoundsRect(current_profile_photo_->bounds());
883a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  current_profile_name_ = new EditableProfileName(
884a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      this, profiles::GetAvatarNameForProfile(browser_->profile()), true);
8853551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
886d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  layout->StartRow(1, 0);
887f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  layout->AddView(current_profile_photo_, 1, 3);
888f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  layout->AddView(current_profile_name_);
8893551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
8903551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  layout->StartRow(1, 0);
891d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  layout->SkipColumns(1);
8923551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
893d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  layout->StartRow(1, 0);
894d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  layout->SkipColumns(1);
8953551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  return view;
8963551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}
8973551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
8983551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)views::View* ProfileChooserView::CreateGuestProfileView() {
899d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  gfx::Image guest_icon =
9000529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch      ui::ResourceBundle::GetSharedInstance().GetImageNamed(
9010529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch          profiles::GetPlaceholderAvatarIconResourceID());
90268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  AvatarMenu::Item guest_avatar_item(0, 0, guest_icon);
9033551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  guest_avatar_item.active = true;
9043551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  guest_avatar_item.name = l10n_util::GetStringUTF16(
905d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)      IDS_PROFILES_GUEST_PROFILE_NAME);
9063551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  guest_avatar_item.signed_in = false;
9073551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
908d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  return CreateCurrentProfileView(guest_avatar_item, true);
9097d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
9107d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
9117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)views::View* ProfileChooserView::CreateOtherProfilesView(
9127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    const Indexes& avatars_to_show) {
9137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  views::View* view = new views::View();
9145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  views::GridLayout* layout = CreateSingleColumnLayout(
9155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      view, kFixedMenuWidth - 2 * views::kButtonHEdgeMarginNew);
91668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  layout->SetInsets(0, views::kButtonHEdgeMarginNew,
91768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)                    views::kButtonVEdgeMarginNew, views::kButtonHEdgeMarginNew);
91868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  int num_avatars_to_show = avatars_to_show.size();
91968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  for (int i = 0; i < num_avatars_to_show; ++i) {
92068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    const size_t index = avatars_to_show[i];
92168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    const AvatarMenu::Item& item = avatar_menu_->GetItemAt(index);
922f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    const int kSmallImageSide = 32;
923d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
9240529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    gfx::Image image = profiles::GetSizedAvatarIcon(
925d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        item.icon, true,
9268bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)        kSmallImageSide + profiles::kAvatarIconPadding,
9278bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)        kSmallImageSide + profiles::kAvatarIconPadding);
928d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
9295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    views::LabelButton* button = new views::LabelButton(this, item.name);
930d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    open_other_profile_indexes_map_[button] = index;
9315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    button->SetImage(views::Button::STATE_NORMAL, *image.ToImageSkia());
9325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    button->SetFontList(ui::ResourceBundle::GetSharedInstance().GetFontList(
93368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        ui::ResourceBundle::MediumFont));
9345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    button->SetBorder(views::Border::NullBorder());
935d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
936d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    layout->StartRow(1, 0);
937d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    layout->AddView(button);
93868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
93968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    // The last avatar in the list does not need any bottom padding.
94068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    if (i < num_avatars_to_show - 1)
94168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing);
9427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  }
9437d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
9447d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  return view;
9457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
9467d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
947effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochviews::View* ProfileChooserView::CreateOptionsView(bool enable_lock) {
948d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  views::View* view = new views::View();
949effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  views::GridLayout* layout;
950effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
951effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // Only signed-in users have the ability to lock.
952effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  if (enable_lock) {
953effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    layout = new views::GridLayout(view);
954effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    views::ColumnSet* columns = layout->AddColumnSet(0);
955effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    int width_of_lock_button =
956effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch        2 * views::kUnrelatedControlLargeHorizontalSpacing + 12;
957effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    int width_of_users_button = kFixedMenuWidth - width_of_lock_button;
958effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    columns->AddColumn(views::GridLayout::FILL, views::GridLayout::FILL, 0,
959effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                       views::GridLayout::FIXED, width_of_users_button,
960effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                       width_of_users_button);
961effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    columns->AddColumn(views::GridLayout::FILL, views::GridLayout::FILL, 0,
962effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                       views::GridLayout::FIXED, width_of_lock_button,
963effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                       width_of_lock_button);
964effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    view->SetLayoutManager(layout);
965effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  } else {
966effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    layout = CreateSingleColumnLayout(view, kFixedMenuWidth);
967effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  }
968effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
96968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  // The horizontal padding will be set by each button individually, so that
97068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  // in the hovered state the button spans the entire parent view.
97168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  layout->SetInsets(views::kRelatedControlVerticalSpacing, 0,
97268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)                    views::kRelatedControlVerticalSpacing, 0);
973d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
974d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  ui::ResourceBundle* rb = &ui::ResourceBundle::GetSharedInstance();
97568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  users_button_ = new BackgroundColorHoverButton(
97668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      this,
977effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      l10n_util::GetStringFUTF16(IDS_PROFILES_NOT_YOU_BUTTON,
978effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch          profiles::GetAvatarNameForProfile(browser_->profile())),
979effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      *rb->GetImageSkiaNamed(IDR_ICON_PROFILES_MENU_AVATAR),
980effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      *rb->GetImageSkiaNamed(IDR_ICON_PROFILES_MENU_AVATAR));
981effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
982d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  layout->StartRow(1, 0);
983d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  layout->AddView(users_button_);
984a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch
985effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  if (enable_lock) {
986effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    lock_button_ = new BackgroundColorHoverButton(
987effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch        this,
988effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch        base::string16(),
989effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch        *rb->GetImageSkiaNamed(IDR_ICON_PROFILES_MENU_LOCK),
990effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch        *rb->GetImageSkiaNamed(IDR_ICON_PROFILES_MENU_LOCK));
991effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    layout->AddView(lock_button_);
992effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  }
993d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  return view;
994d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)}
9957dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
996d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)views::View* ProfileChooserView::CreateCurrentProfileAccountsView(
99768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    const AvatarMenu::Item& avatar_item) {
998d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  DCHECK(avatar_item.signed_in);
999a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch  views::View* view = new views::View();
10005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  int column_width = kFixedMenuWidth - 2 * views::kButtonHEdgeMarginNew;
10015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  views::GridLayout* layout = CreateSingleColumnLayout(view, column_width);
100268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  layout->SetInsets(views::kButtonVEdgeMarginNew,
1003d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)                    views::kButtonHEdgeMarginNew,
100468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)                    views::kButtonVEdgeMarginNew,
100568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)                    views::kButtonHEdgeMarginNew);
10067d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
10071e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  Profile* profile = browser_->profile();
1008a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  std::string primary_account =
1009a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      SigninManagerFactory::GetForProfile(profile)->GetAuthenticatedUsername();
1010a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  DCHECK(!primary_account.empty());
10115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  std::vector<std::string>accounts =
10125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      profiles::GetSecondaryAccountsForProfile(profile, primary_account);
10137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
10145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // The primary account should always be listed first.
10155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // TODO(rogerta): we still need to further differentiate the primary account
10165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // from the others in the UI, so more work is likely required here:
10175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // crbug.com/311124.
10185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  CreateAccountButton(layout, primary_account, true, column_width);
10195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  for (size_t i = 0; i < accounts.size(); ++i)
10205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    CreateAccountButton(layout, accounts[i], false, column_width);
102168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing);
10227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
10231e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  add_account_button_ = new views::BlueButton(
10241e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)      this,
1025d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)      l10n_util::GetStringFUTF16(IDS_PROFILES_PROFILE_ADD_ACCOUNT_BUTTON,
1026d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)                                 avatar_item.name));
1027d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  layout->StartRow(1, 0);
10281e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  layout->AddView(add_account_button_);
10297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  return view;
10307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
1031a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
1032a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)void ProfileChooserView::CreateAccountButton(views::GridLayout* layout,
1033a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                                             const std::string& account,
10345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                             bool is_primary_account,
10355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                             int width) {
1036a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  ui::ResourceBundle* rb = &ui::ResourceBundle::GetSharedInstance();
10375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  const gfx::ImageSkia* menu_marker =
10385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      rb->GetImageNamed(IDR_CLOSE_1).ToImageSkia();
1039a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // Use a MenuButtonListener and not a regular ButtonListener to be
1040a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // able to distinguish between the unnamed "other profile" buttons and the
1041a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // unnamed "multiple accounts" buttons.
1042a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  views::MenuButton* email_button = new views::MenuButton(
1043a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      NULL,
10445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      gfx::ElideEmail(base::UTF8ToUTF16(account),
1045a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                      rb->GetFontList(ui::ResourceBundle::BaseFont),
10465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                      width - menu_marker->width()),
1047effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      this,
1048effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      true /* show_menu_marker */);
10495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  email_button->SetBorder(views::Border::CreateEmptyBorder(0, 0, 0, 0));
1050effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  email_button->set_menu_marker(menu_marker);
1051effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  if (!is_primary_account)
1052a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing);
1053a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  layout->StartRow(1, 0);
1054a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  layout->AddView(email_button);
1055a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
1056a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // Save the original email address, as the button text could be elided.
1057a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  current_profile_accounts_map_[email_button] = account;
1058a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
1059effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
1060effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochviews::View* ProfileChooserView::CreateGaiaSigninView(
1061effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    bool add_secondary_account) {
1062effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  views::View* view = new views::View();
1063effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  views::GridLayout* layout =
1064effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      CreateSingleColumnLayout(view, kFixedGaiaViewWidth);
1065effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
1066effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // Adds title.
1067effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  views::View* padded_title = new views::View();
1068effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  int available_width = kFixedGaiaViewWidth - 2 * views::kButtonHEdgeMarginNew;
1069effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  views::GridLayout* padded_layout = CreateSingleColumnLayout(
1070effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      padded_title, available_width);
1071effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  padded_layout->SetInsets(views::kButtonVEdgeMarginNew,
1072effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                           views::kButtonHEdgeMarginNew,
1073effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                           views::kButtonVEdgeMarginNew,
1074effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                           views::kButtonHEdgeMarginNew);
1075effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  padded_layout->StartRow(1, 0);
1076effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  padded_layout->AddView(new TitleCard(
1077effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      add_secondary_account ? IDS_PROFILES_GAIA_ADD_ACCOUNT_TITLE :
1078effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                              IDS_PROFILES_GAIA_SIGNIN_TITLE,
1079effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      this, &gaia_signin_cancel_button_));
1080effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
1081effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  layout->StartRow(1, 0);
1082effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  layout->AddView(padded_title);
1083effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  layout->StartRow(1, 0);
1084effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  layout->AddView(new views::Separator(views::Separator::HORIZONTAL));
1085effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
1086effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // Adds Gaia signin webview
1087effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  Profile* profile = browser_->profile();
1088effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  views::WebView* web_view = new views::WebView(profile);
1089effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  signin::Source source = add_secondary_account ?
1090effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      signin::SOURCE_AVATAR_BUBBLE_ADD_ACCOUNT :
1091effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      signin::SOURCE_AVATAR_BUBBLE_SIGN_IN;
1092effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  GURL url(signin::GetPromoURL(
1093effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      source, false /* auto_close */, true /* is_constrained */));
1094effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  web_view->LoadInitialURL(url);
1095effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  web_view->SetPreferredSize(
1096effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      gfx::Size(kFixedGaiaViewWidth, kFixedGaiaViewHeight));
1097effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
1098effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  layout->StartRow(1, 0);
1099effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  layout->AddView(web_view);
1100effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
1101effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  return view;
1102effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}
1103effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
1104effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochviews::View* ProfileChooserView::CreateAccountRemovalView() {
1105effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  views::View* view = new views::View();
1106effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  views::GridLayout* layout = CreateSingleColumnLayout(
1107effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      view, kFixedAccountRemovalViewWidth - 2 * views::kButtonHEdgeMarginNew);
1108effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  layout->SetInsets(views::kButtonVEdgeMarginNew,
1109effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                    views::kButtonHEdgeMarginNew,
1110effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                    views::kButtonVEdgeMarginNew,
1111effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                    views::kButtonHEdgeMarginNew);
1112effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
1113effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // Adds title.
1114effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  layout->StartRow(1, 0);
1115effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  layout->AddView(new TitleCard(IDS_PROFILES_ACCOUNT_REMOVAL_TITLE, this,
1116effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                                &account_removal_cancel_button_));
1117effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  layout->StartRowWithPadding(1, 0, 0, views::kRelatedControlVerticalSpacing);
1118effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  layout->AddView(new views::Separator(views::Separator::HORIZONTAL));
1119effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
1120effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  const std::string& primary_account = SigninManagerFactory::GetForProfile(
1121effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      browser_->profile())->GetAuthenticatedUsername();
1122effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  bool is_primary_account = primary_account == account_id_to_remove_;
1123effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
1124effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // Adds main text.
1125c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  layout->StartRowWithPadding(1, 0, 0, views::kUnrelatedControlVerticalSpacing);
1126effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  ui::ResourceBundle* rb = &ui::ResourceBundle::GetSharedInstance();
1127effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  const gfx::FontList& small_font_list =
1128effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      rb->GetFontList(ui::ResourceBundle::SmallFont);
1129c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
1130c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  if (is_primary_account) {
1131c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    std::vector<size_t> offsets;
1132c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    const base::string16 settings_text =
1133c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch        l10n_util::GetStringUTF16(IDS_PROFILES_SETTINGS_LINK);
11340529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    const base::string16 primary_account_removal_text =
1135c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch        l10n_util::GetStringFUTF16(IDS_PROFILES_PRIMARY_ACCOUNT_REMOVAL_TEXT,
1136c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch            base::UTF8ToUTF16(account_id_to_remove_), settings_text, &offsets);
1137c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    views::StyledLabel* primary_account_removal_label =
11380529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch        new views::StyledLabel(primary_account_removal_text, this);
1139c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    primary_account_removal_label->AddStyleRange(
1140c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch        gfx::Range(offsets[1], offsets[1] + settings_text.size()),
1141c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch        views::StyledLabel::RangeStyleInfo::CreateForLink());
1142c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    primary_account_removal_label->SetBaseFontList(small_font_list);
1143c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    layout->AddView(primary_account_removal_label);
1144c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  } else {
1145c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    views::Label* content_label = new views::Label(
1146c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch        l10n_util::GetStringUTF16(IDS_PROFILES_ACCOUNT_REMOVAL_TEXT));
1147c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    content_label->SetMultiLine(true);
1148c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    content_label->SetHorizontalAlignment(gfx::ALIGN_LEFT);
1149c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    content_label->SetFontList(small_font_list);
1150c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    layout->AddView(content_label);
1151c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  }
1152effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
1153effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // Adds button.
1154effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  if (!is_primary_account) {
1155effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    remove_account_and_relaunch_button_ = new views::BlueButton(
1156effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch        this, l10n_util::GetStringUTF16(IDS_PROFILES_ACCOUNT_REMOVAL_BUTTON));
1157effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    remove_account_and_relaunch_button_->SetHorizontalAlignment(
1158effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch        gfx::ALIGN_CENTER);
1159effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    layout->StartRowWithPadding(
1160effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch        1, 0, 0, views::kUnrelatedControlVerticalSpacing);
1161effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    layout->AddView(remove_account_and_relaunch_button_);
1162effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  } else {
1163effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    layout->AddPaddingRow(0, views::kUnrelatedControlVerticalSpacing);
1164effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  }
1165effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
1166effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  return view;
1167effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}
1168a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
1169a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochviews::View* ProfileChooserView::CreateNewProfileManagementPreviewView() {
1170a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  return CreateTutorialView(
1171a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      l10n_util::GetStringUTF16(IDS_PROFILES_PREVIEW_TUTORIAL_TITLE),
1172a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      l10n_util::GetStringUTF16(IDS_PROFILES_PREVIEW_TUTORIAL_CONTENT_TEXT),
1173a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      l10n_util::GetStringUTF16(IDS_PROFILES_PROFILE_TUTORIAL_LEARN_MORE),
1174a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      l10n_util::GetStringUTF16(IDS_PROFILES_TUTORIAL_TRY_BUTTON),
1175a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      &tutorial_learn_more_link_,
1176a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      &tutorial_enable_new_profile_management_button_);
1177a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch}
1178