profile_chooser_view.cc revision 5c02ac1a9c1b504631c0a3d2b6e737b5d738bae1
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"
205c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "chrome/browser/ui/browser_commands.h"
210f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "chrome/browser/ui/browser_dialogs.h"
22c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "chrome/browser/ui/chrome_pages.h"
23d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "chrome/browser/ui/singleton_tabs.h"
24c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "chrome/browser/ui/views/profiles/user_manager_view.h"
25a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "chrome/common/pref_names.h"
264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "chrome/common/url_constants.h"
27effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "components/signin/core/browser/mutable_profile_oauth2_token_service.h"
28effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "components/signin/core/browser/profile_oauth2_token_service.h"
29e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include "components/signin/core/browser/signin_manager.h"
300529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "components/signin/core/common/profile_management_switches.h"
31d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "grit/chromium_strings.h"
327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "grit/generated_resources.h"
333551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "grit/theme_resources.h"
3468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "third_party/skia/include/core/SkColor.h"
357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "ui/base/l10n/l10n_util.h"
367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "ui/base/resource/resource_bundle.h"
375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ui/gfx/canvas.h"
387d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "ui/gfx/image/image.h"
397d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "ui/gfx/image/image_skia.h"
40f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "ui/gfx/text_elider.h"
415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ui/native_theme/native_theme.h"
42d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "ui/views/controls/button/blue_button.h"
43effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "ui/views/controls/button/image_button.h"
445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ui/views/controls/button/label_button.h"
45d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "ui/views/controls/button/menu_button.h"
467d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "ui/views/controls/label.h"
477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "ui/views/controls/link.h"
487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "ui/views/controls/separator.h"
49c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "ui/views/controls/styled_label.h"
50f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "ui/views/controls/textfield/textfield.h"
514e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "ui/views/controls/webview/webview.h"
527d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "ui/views/layout/grid_layout.h"
537d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "ui/views/layout/layout_constants.h"
547d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "ui/views/widget/widget.h"
557d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
56d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)namespace {
57d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
5868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// Helpers --------------------------------------------------------------------
5968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)const int kFixedMenuWidth = 250;
6168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)const int kButtonHeight = 29;
62a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)const int kProfileAvatarTutorialShowMax = 5;
63effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochconst int kFixedGaiaViewHeight = 400;
64effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochconst int kFixedGaiaViewWidth = 360;
65effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochconst int kFixedAccountRemovalViewWidth = 280;
665c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuconst int kFixedEndPreviewViewWidth = 280;
675c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuconst int kLargeImageSide = 88;
68d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
69d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)// Creates a GridLayout with a single column. This ensures that all the child
70d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)// views added get auto-expanded to fill the full width of the bubble.
715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)views::GridLayout* CreateSingleColumnLayout(views::View* view, int width) {
72d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  views::GridLayout* layout = new views::GridLayout(view);
73d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  view->SetLayoutManager(layout);
74d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
75d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  views::ColumnSet* columns = layout->AddColumnSet(0);
765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  columns->AddColumn(views::GridLayout::FILL, views::GridLayout::FILL, 0,
775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                     views::GridLayout::FIXED, width, width);
78d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  return layout;
79d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)}
80d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
81f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)views::Link* CreateLink(const base::string16& link_text,
82d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)                        views::LinkListener* listener) {
83d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  views::Link* link_button = new views::Link(link_text);
84d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  link_button->SetHorizontalAlignment(gfx::ALIGN_LEFT);
85d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  link_button->SetUnderline(false);
86d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  link_button->set_listener(listener);
87d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  return link_button;
88d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)}
89d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
905c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liugfx::ImageSkia CreateSquarePlaceholderImage(int size) {
915c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  SkBitmap bitmap;
925c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  bitmap.setConfig(SkBitmap::kA8_Config, size, size);
935c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  bitmap.allocPixels();
945c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  bitmap.eraseARGB(0, 0, 0, 0);
955c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  return gfx::ImageSkia::CreateFrom1xBitmap(bitmap);
965c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu}
9768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
98f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// BackgroundColorHoverButton -------------------------------------------------
9968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
100f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// A custom button that allows for setting a background color when hovered over.
1015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class BackgroundColorHoverButton : public views::LabelButton {
10268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) public:
103f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  BackgroundColorHoverButton(views::ButtonListener* listener,
104f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                             const base::string16& text,
105f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                             const gfx::ImageSkia& normal_icon,
106f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                             const gfx::ImageSkia& hover_icon);
107f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual ~BackgroundColorHoverButton();
10868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
10968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) private:
1105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // views::LabelButton:
1115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE;
11268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
113f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(BackgroundColorHoverButton);
11468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)};
11568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
116f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)BackgroundColorHoverButton::BackgroundColorHoverButton(
117f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    views::ButtonListener* listener,
118a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    const base::string16& text,
119f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    const gfx::ImageSkia& normal_icon,
120f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    const gfx::ImageSkia& hover_icon)
1215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    : views::LabelButton(listener, text) {
1225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  SetBorder(views::Border::CreateEmptyBorder(0, views::kButtonHEdgeMarginNew,
1235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                             0, views::kButtonHEdgeMarginNew));
1245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  set_min_size(gfx::Size(0, kButtonHeight));
1255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  SetImage(STATE_NORMAL, normal_icon);
1265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  SetImage(STATE_HOVERED, hover_icon);
1275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  SetImage(STATE_PRESSED, hover_icon);
128f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
12968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
1305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)BackgroundColorHoverButton::~BackgroundColorHoverButton() {}
131f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
1325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void BackgroundColorHoverButton::OnPaint(gfx::Canvas* canvas) {
1335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if ((state() == STATE_PRESSED) || (state() == STATE_HOVERED) || HasFocus()) {
1345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    canvas->DrawColor(GetNativeTheme()->GetSystemColor(
1355c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu        ui::NativeTheme::kColorId_ButtonHoverBackgroundColor));
1365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  }
1375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  LabelButton::OnPaint(canvas);
138f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
139f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
140f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}  // namespace
141f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
142f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
143f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// EditableProfilePhoto -------------------------------------------------
144f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
145f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// A custom Image control that shows a "change" button when moused over.
146f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class EditableProfilePhoto : public views::ImageView {
14768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) public:
148a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  EditableProfilePhoto(views::ButtonListener* listener,
149a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                       const gfx::Image& icon,
1505c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu                       bool is_editing_allowed,
1515c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu                       const gfx::Rect& bounds)
152a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      : views::ImageView(),
153a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        change_photo_button_(NULL) {
1540529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    gfx::Image image = profiles::GetSizedAvatarIcon(
155f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        icon, true,
156f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        kLargeImageSide + profiles::kAvatarIconPadding,
157f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        kLargeImageSide + profiles::kAvatarIconPadding);
158f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    SetImage(image.ToImageSkia());
1595c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    SetBoundsRect(bounds);
160a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
161a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    if (!is_editing_allowed)
162a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return;
163a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
164f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    set_notify_enter_exit_on_child(true);
165f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
166f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    // Button overlay that appears when hovering over the image.
1675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    change_photo_button_ = new views::LabelButton(listener,
168f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        l10n_util::GetStringUTF16(IDS_PROFILES_PROFILE_CHANGE_PHOTO_BUTTON));
1695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    change_photo_button_->SetHorizontalAlignment(gfx::ALIGN_CENTER);
1705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    change_photo_button_->SetBorder(views::Border::NullBorder());
1715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    const SkColor color = SK_ColorWHITE;
1725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    change_photo_button_->SetTextColor(views::Button::STATE_NORMAL, color);
1735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    change_photo_button_->SetTextColor(views::Button::STATE_HOVERED, color);
174f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
1755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    const SkColor kBackgroundColor = SkColorSetARGB(125, 0, 0, 0);
176f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    change_photo_button_->set_background(
177f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        views::Background::CreateSolidBackground(kBackgroundColor));
1785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    // Need to take into account the border padding on the avatar.
1795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    const int kOverlayHeight = 20;
180f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    change_photo_button_->SetBounds(
1815c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu        bounds.origin().x(),
1825c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu        bounds.origin().y() + kLargeImageSide - kOverlayHeight,
1835c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu        kLargeImageSide,
184f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        kOverlayHeight);
185f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    change_photo_button_->SetVisible(false);
186f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    AddChildView(change_photo_button_);
187f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
188f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
1895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  views::LabelButton* change_photo_button() { return change_photo_button_; }
19068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
19168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) private:
192f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // views::View:
19368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  virtual void OnMouseEntered(const ui::MouseEvent& event) OVERRIDE {
194a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    if (change_photo_button_)
195a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      change_photo_button_->SetVisible(true);
196f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
19768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
19868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  virtual void OnMouseExited(const ui::MouseEvent& event) OVERRIDE {
199a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    if (change_photo_button_)
200a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      change_photo_button_->SetVisible(false);
201f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
20268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
203a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // Button that is shown when hovering over the image view. Can be NULL if
204a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // the photo isn't allowed to be edited (e.g. for guest profiles).
2055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  views::LabelButton* change_photo_button_;
206f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
207f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(EditableProfilePhoto);
20868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)};
20968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
210f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
211f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// EditableProfileName -------------------------------------------------
212f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
213f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// A custom text control that turns into a textfield for editing when clicked.
2145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class EditableProfileName : public views::LabelButton,
215f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                            public views::ButtonListener {
216f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) public:
217f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EditableProfileName(views::TextfieldController* controller,
218a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                      const base::string16& text,
219a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                      bool is_editing_allowed)
2205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      : views::LabelButton(this, text),
221a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        profile_name_textfield_(NULL) {
222f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    ui::ResourceBundle* rb = &ui::ResourceBundle::GetSharedInstance();
2235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    const gfx::FontList& medium_font_list =
2245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        rb->GetFontList(ui::ResourceBundle::MediumFont);
2255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    SetFontList(medium_font_list);
2265c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    SetHorizontalAlignment(gfx::ALIGN_CENTER);
227a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
228a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    if (!is_editing_allowed)
229a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return;
230f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
2315c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    // Show an "edit" pencil icon when hovering over. In the default state,
2325c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    // we need to create an empty placeholder of the correct size, so that
2335c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    // the text doesn't jump around when the hovered icon appears.
2345c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    gfx::ImageSkia hover_image =
2355c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu        *rb->GetImageSkiaNamed(IDR_ICON_PROFILES_EDIT_HOVER);
2365c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    SetImage(STATE_NORMAL, CreateSquarePlaceholderImage(hover_image.width()));
2375c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    SetImage(STATE_HOVERED, hover_image);
2385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    SetImage(STATE_PRESSED,
2395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)             *rb->GetImageSkiaNamed(IDR_ICON_PROFILES_EDIT_PRESSED));
2405c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    // To center the text, we need to offest it by the width of the icon we
2415c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    // are adding. We need to also add a small top/bottom padding to account
2425c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    // for the textfield's border.
2435c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    SetBorder(views::Border::CreateEmptyBorder(2, hover_image.width(), 2, 0));
244f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
245f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    // Textfield that overlaps the button.
246f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    profile_name_textfield_ = new views::Textfield();
2475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    profile_name_textfield_->set_controller(controller);
2485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    profile_name_textfield_->SetFontList(medium_font_list);
2495c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    profile_name_textfield_->SetHorizontalAlignment(gfx::ALIGN_CENTER);
2505c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
251f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    profile_name_textfield_->SetVisible(false);
252f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    AddChildView(profile_name_textfield_);
253f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
254f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
255f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  views::Textfield* profile_name_textfield() {
256f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    return profile_name_textfield_;
257f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
258f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
2595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Hide the editable textfield to show the profile name button instead.
260f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void ShowReadOnlyView() {
261a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    if (profile_name_textfield_)
262a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      profile_name_textfield_->SetVisible(false);
263f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
264f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
265f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) private:
266f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // views::ButtonListener:
267f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual void ButtonPressed(views::Button* sender,
268f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                            const ui::Event& event) OVERRIDE {
269a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    if (profile_name_textfield_) {
270a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      profile_name_textfield_->SetVisible(true);
2715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      profile_name_textfield_->SetText(GetText());
272a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      profile_name_textfield_->SelectAll(false);
273a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      profile_name_textfield_->RequestFocus();
274a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    }
275f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
276f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
2775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // views::LabelButton:
278f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual bool OnKeyReleased(const ui::KeyEvent& event) OVERRIDE {
279f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    // Override CustomButton's implementation, which presses the button when
280f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    // you press space and clicks it when you release space, as the space can be
281f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    // part of the new profile name typed in the textfield.
282f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    return false;
283f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
284f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
285f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual void Layout() OVERRIDE {
286a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    if (profile_name_textfield_)
287a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      profile_name_textfield_->SetBounds(0, 0, width(), height());
2885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    // This layout trick keeps the text left-aligned and the icon right-aligned.
2895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    SetHorizontalAlignment(gfx::ALIGN_RIGHT);
2905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    views::LabelButton::Layout();
2915c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    label()->SetHorizontalAlignment(gfx::ALIGN_CENTER);
292f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
293f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
2945c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  // Textfield that is shown when editing the profile name. Can be NULL if
295a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // the profile name isn't allowed to be edited (e.g. for guest profiles).
296f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  views::Textfield* profile_name_textfield_;
297f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
298f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(EditableProfileName);
299f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)};
300d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
301effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// A title card with one back button right aligned and one label center aligned.
302effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochclass TitleCard : public views::View {
303effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch public:
304effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch   TitleCard(int message_id, views::ButtonListener* listener,
305effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch             views::ImageButton** back_button) {
306effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    back_button_ = new views::ImageButton(listener);
307effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    back_button_->SetImageAlignment(views::ImageButton::ALIGN_LEFT,
308effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                                    views::ImageButton::ALIGN_MIDDLE);
309effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    ui::ResourceBundle* rb = &ui::ResourceBundle::GetSharedInstance();
310effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    back_button_->SetImage(views::ImageButton::STATE_NORMAL,
311effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                           rb->GetImageSkiaNamed(IDR_BACK));
312effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    back_button_->SetImage(views::ImageButton::STATE_HOVERED,
313effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                           rb->GetImageSkiaNamed(IDR_BACK_H));
314effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    back_button_->SetImage(views::ImageButton::STATE_PRESSED,
315effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                           rb->GetImageSkiaNamed(IDR_BACK_P));
316effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    back_button_->SetImage(views::ImageButton::STATE_DISABLED,
317effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                           rb->GetImageSkiaNamed(IDR_BACK_D));
318effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    *back_button = back_button_;
319effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
320effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    title_label_ = new views::Label(l10n_util::GetStringUTF16(message_id));
321effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    title_label_->SetHorizontalAlignment(gfx::ALIGN_CENTER);
322effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    const gfx::FontList& medium_font_list =
323effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch        rb->GetFontList(ui::ResourceBundle::MediumFont);
324effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    title_label_->SetFontList(medium_font_list);
325effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
326effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    AddChildView(back_button_);
327effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    AddChildView(title_label_);
328effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  }
329effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
330effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch private:
331effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  virtual void Layout() OVERRIDE{
332c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    back_button_->SetBounds(
333c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch        0, 0, back_button_->GetPreferredSize().width(), height());
334effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    title_label_->SetBoundsRect(GetContentsBounds());
335effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  }
336effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
337effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  virtual gfx::Size GetPreferredSize() OVERRIDE{
338effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    int height = profiles::kAvatarIconPadding * 2 +
339effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch        std::max(title_label_->GetPreferredSize().height(),
340effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                 back_button_->GetPreferredSize().height());
341effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    return gfx::Size(width(), height);
342effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  }
343effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
344effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  views::ImageButton* back_button_;
345effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  views::Label* title_label_;
346effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
347effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  DISALLOW_COPY_AND_ASSIGN(TitleCard);
348effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch};
349d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
350d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)// ProfileChooserView ---------------------------------------------------------
351d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
3527d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// static
3537d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)ProfileChooserView* ProfileChooserView::profile_bubble_ = NULL;
354f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)bool ProfileChooserView::close_on_deactivate_for_testing_ = true;
3557d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
3567d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// static
3577d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)void ProfileChooserView::ShowBubble(
358effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    BubbleViewMode view_mode,
3597d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    views::View* anchor_view,
3607d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    views::BubbleBorder::Arrow arrow,
3617d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    views::BubbleBorder::BubbleAlignment border_alignment,
3627d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    const gfx::Rect& anchor_rect,
3637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    Browser* browser) {
364a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  profile_bubble_ = new ProfileChooserView(anchor_view, arrow, anchor_rect,
365a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch                                           browser, view_mode);
3667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  views::BubbleDelegateView::CreateBubble(profile_bubble_);
367f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  profile_bubble_->set_close_on_deactivate(close_on_deactivate_for_testing_);
3687d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  profile_bubble_->SetAlignment(border_alignment);
3697d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  profile_bubble_->GetWidget()->Show();
3708bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  profile_bubble_->SetArrowPaintType(views::BubbleBorder::PAINT_NONE);
3717d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
3727d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
3737d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// static
3747d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)bool ProfileChooserView::IsShowing() {
3757d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  return profile_bubble_ != NULL;
3767d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
3777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
3787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// static
3797d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)void ProfileChooserView::Hide() {
3807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  if (IsShowing())
3817d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    profile_bubble_->GetWidget()->Close();
3827d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
3837d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
384d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)ProfileChooserView::ProfileChooserView(views::View* anchor_view,
385d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)                                       views::BubbleBorder::Arrow arrow,
386d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)                                       const gfx::Rect& anchor_rect,
387a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch                                       Browser* browser,
388a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch                                       BubbleViewMode view_mode)
3897d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    : BubbleDelegateView(anchor_view, arrow),
390f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      browser_(browser),
391a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      view_mode_(view_mode),
3925c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      tutorial_mode_(TUTORIAL_MODE_NONE) {
393d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  // Reset the default margins inherited from the BubbleDelegateView.
394d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  set_margins(gfx::Insets());
395d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
396f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  ResetView();
39768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
398effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  set_background(views::Background::CreateSolidBackground(
399effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      GetNativeTheme()->GetSystemColor(
400effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch          ui::NativeTheme::kColorId_DialogBackground)));
401effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
40268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  avatar_menu_.reset(new AvatarMenu(
4037d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      &g_browser_process->profile_manager()->GetProfileInfoCache(),
40468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      this,
40568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      browser_));
40668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  avatar_menu_->RebuildMenu();
407f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
408f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  ProfileOAuth2TokenService* oauth2_token_service =
409f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      ProfileOAuth2TokenServiceFactory::GetForProfile(browser_->profile());
410f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  if (oauth2_token_service)
411f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    oauth2_token_service->AddObserver(this);
4127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
4137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
4147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)ProfileChooserView::~ProfileChooserView() {
415f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  ProfileOAuth2TokenService* oauth2_token_service =
416f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      ProfileOAuth2TokenServiceFactory::GetForProfile(browser_->profile());
417f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  if (oauth2_token_service)
418f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    oauth2_token_service->RemoveObserver(this);
4197d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
4207d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
421f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void ProfileChooserView::ResetView() {
4225c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  question_mark_button_ = NULL;
423d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  manage_accounts_link_ = NULL;
424d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  signin_current_profile_link_ = NULL;
425d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  users_button_ = NULL;
426effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  lock_button_ = NULL;
4275c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  add_account_link_ = NULL;
428f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  current_profile_photo_ = NULL;
429f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  current_profile_name_ = NULL;
430a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  tutorial_ok_button_ = NULL;
431a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  tutorial_learn_more_link_ = NULL;
432a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  tutorial_enable_new_profile_management_button_ = NULL;
4335c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  tutorial_end_preview_link_ = NULL;
4345c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  tutorial_send_feedback_button_ = NULL;
4355c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  end_preview_and_relaunch_button_ = NULL;
4365c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  end_preview_cancel_button_ = NULL;
4375c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  remove_account_and_relaunch_button_ = NULL;
438effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  account_removal_cancel_button_ = NULL;
439effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  gaia_signin_cancel_button_ = NULL;
440d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  open_other_profile_indexes_map_.clear();
441f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  current_profile_accounts_map_.clear();
4425c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  tutorial_mode_ = TUTORIAL_MODE_NONE;
4437d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
4447d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
445d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)void ProfileChooserView::Init() {
446a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  ShowView(view_mode_, avatar_menu_.get());
4477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
4487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
44968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)void ProfileChooserView::OnAvatarMenuChanged(
45068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    AvatarMenu* avatar_menu) {
45168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  // Refresh the view with the new menu. We can't just update the local copy
452d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  // as this may have been triggered by a sign out action, in which case
453d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  // the view is being destroyed.
454effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  ShowView(BUBBLE_VIEW_MODE_PROFILE_CHOOSER, avatar_menu);
4557d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
4567d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
457f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void ProfileChooserView::OnRefreshTokenAvailable(
458f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    const std::string& account_id) {
459f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Refresh the account management view when a new account is added to the
460f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // profile.
461effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  if (view_mode_ == BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT ||
462effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      view_mode_ == BUBBLE_VIEW_MODE_GAIA_SIGNIN ||
463effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      view_mode_ == BUBBLE_VIEW_MODE_GAIA_ADD_ACCOUNT) {
464effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    ShowView(BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT, avatar_menu_.get());
465f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
466f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
467f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
468f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void ProfileChooserView::OnRefreshTokenRevoked(const std::string& account_id) {
469f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Refresh the account management view when an account is removed from the
470f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // profile.
471effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  if (view_mode_ == BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT)
472effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    ShowView(BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT, avatar_menu_.get());
473f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
474f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
475d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)void ProfileChooserView::ShowView(BubbleViewMode view_to_display,
47668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)                                  AvatarMenu* avatar_menu) {
477d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  // The account management view should only be displayed if the active profile
478d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  // is signed in.
479effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  if (view_to_display == BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT) {
48068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    const AvatarMenu::Item& active_item = avatar_menu->GetItemAt(
48168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        avatar_menu->GetActiveProfileIndex());
482d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    DCHECK(active_item.signed_in);
4837dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  }
4847d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
4855c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  // Records the last tutorial mode.
4865c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  TutorialMode last_tutorial_mode = tutorial_mode_;
487f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  ResetView();
4887d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  RemoveAllChildViews(true);
489f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  view_mode_ = view_to_display;
4907d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
491a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  views::GridLayout* layout;
492a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  views::View* sub_view;
493a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  switch (view_mode_) {
494a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    case BUBBLE_VIEW_MODE_GAIA_SIGNIN:
495a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    case BUBBLE_VIEW_MODE_GAIA_ADD_ACCOUNT:
496a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      layout = CreateSingleColumnLayout(this, kFixedGaiaViewWidth);
497a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      sub_view = CreateGaiaSigninView(
498a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch          view_mode_ == BUBBLE_VIEW_MODE_GAIA_ADD_ACCOUNT);
499a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      break;
500a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    case BUBBLE_VIEW_MODE_ACCOUNT_REMOVAL:
501a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      layout = CreateSingleColumnLayout(this, kFixedAccountRemovalViewWidth);
502a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      sub_view = CreateAccountRemovalView();
503a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      break;
5045c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    case BUBBLE_VIEW_MODE_END_PREVIEW:
5055c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      layout = CreateSingleColumnLayout(this, kFixedEndPreviewViewWidth);
5065c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      sub_view = CreateEndPreviewView();
5075c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      break;
508a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    default:
509a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      layout = CreateSingleColumnLayout(this, kFixedMenuWidth);
5105c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      sub_view = CreateProfileChooserView(avatar_menu, last_tutorial_mode);
511effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  }
5127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  layout->StartRow(1, 0);
513a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  layout->AddView(sub_view);
5147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  Layout();
5158bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  if (GetBubbleFrameView())
5168bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)    SizeToContents();
5177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
5187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
519d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)void ProfileChooserView::WindowClosing() {
520d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  DCHECK_EQ(profile_bubble_, this);
521d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  profile_bubble_ = NULL;
522d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)}
5237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
524d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)void ProfileChooserView::ButtonPressed(views::Button* sender,
525d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)                                       const ui::Event& event) {
526d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  // Disable button after clicking so that it doesn't get clicked twice and
527d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  // start a second action... which can crash Chrome.  But don't disable if it
528d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  // has no parent (like in tests) because that will also crash.
529d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  if (sender->parent())
530d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    sender->SetEnabled(false);
5317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
532effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  if (sender == users_button_) {
533c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    profiles::ShowUserManagerMaybeWithTutorial(browser_->profile());
5345c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    // If this is a guest session, also close all the guest browser windows.
5355c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    if (browser_->profile()->IsGuestSession())
5365c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      profiles::CloseGuestProfileWindows();
537effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  } else if (sender == lock_button_) {
538effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    profiles::LockProfile(browser_->profile());
539a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  } else if (sender == tutorial_ok_button_) {
54023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    // If the user manually dismissed the tutorial, never show it again by
54123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    // setting the number of times shown to the maximum plus 1, so that later we
54223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    // could distinguish between the dismiss case and the case when the tutorial
54323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    // is indeed shown for the maximum number of times.
544a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    browser_->profile()->GetPrefs()->SetInteger(
54523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)        prefs::kProfileAvatarTutorialShown, kProfileAvatarTutorialShowMax + 1);
546effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    ShowView(BUBBLE_VIEW_MODE_PROFILE_CHOOSER, avatar_menu_.get());
547a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  } else if (sender == tutorial_enable_new_profile_management_button_) {
5480529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    profiles::EnableNewProfileManagementPreview();
549effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  } else if (sender == remove_account_and_relaunch_button_) {
550effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    RemoveAccount();
551effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  } else if (sender == account_removal_cancel_button_) {
552effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    account_id_to_remove_.clear();
553effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    ShowView(BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT, avatar_menu_.get());
554effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  } else if (sender == gaia_signin_cancel_button_) {
555effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    std::string primary_account =
556effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch        SigninManagerFactory::GetForProfile(browser_->profile())->
557effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch        GetAuthenticatedUsername();
558effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    ShowView(primary_account.empty() ? BUBBLE_VIEW_MODE_PROFILE_CHOOSER :
559effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                                       BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT,
560effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch             avatar_menu_.get());
5615c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  } else if (sender == question_mark_button_) {
5625c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    tutorial_mode_ = TUTORIAL_MODE_SEND_FEEDBACK;
5635c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    ShowView(BUBBLE_VIEW_MODE_PROFILE_CHOOSER, avatar_menu_.get());
5645c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  } else if (sender == tutorial_send_feedback_button_) {
5655c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    chrome::OpenFeedbackDialog(browser_);
5665c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  } else if (sender == end_preview_and_relaunch_button_) {
5675c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    profiles::DisableNewProfileManagementPreview();
5685c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  } else if (sender == end_preview_cancel_button_) {
5695c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    tutorial_mode_ = TUTORIAL_MODE_SEND_FEEDBACK;
5705c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    ShowView(BUBBLE_VIEW_MODE_PROFILE_CHOOSER, avatar_menu_.get());
571effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  } else if (current_profile_photo_ &&
572effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch             sender == current_profile_photo_->change_photo_button()) {
573effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    avatar_menu_->EditProfile(avatar_menu_->GetActiveProfileIndex());
5745c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  } else if (sender == signin_current_profile_link_) {
5755c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    ShowView(BUBBLE_VIEW_MODE_GAIA_SIGNIN, avatar_menu_.get());
576d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  } else {
5775c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    // Either one of the "other profiles", or one of the profile accounts
5785c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    // buttons was pressed.
5795c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    ButtonIndexes::const_iterator profile_match =
580d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        open_other_profile_indexes_map_.find(sender);
5815c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    if (profile_match != open_other_profile_indexes_map_.end()) {
5825c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      avatar_menu_->SwitchToProfile(
5835c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu          profile_match->second,
5845c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu          ui::DispositionFromEventFlags(event.flags()) == NEW_WINDOW,
5855c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu          ProfileMetrics::SWITCH_PROFILE_ICON);
5865c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    } else {
5875c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      // This was a profile accounts button.
5885c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      AccountButtonIndexes::const_iterator account_match =
5895c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      current_profile_accounts_map_.find(sender);
5905c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      DCHECK(account_match != current_profile_accounts_map_.end());
5915c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      account_id_to_remove_ = account_match->second;
5925c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      ShowView(BUBBLE_VIEW_MODE_ACCOUNT_REMOVAL, avatar_menu_.get());
5935c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    }
594d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  }
5957d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
5967d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
597effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochvoid ProfileChooserView::RemoveAccount() {
598effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  DCHECK(!account_id_to_remove_.empty());
5995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  MutableProfileOAuth2TokenService* oauth2_token_service =
6005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      ProfileOAuth2TokenServiceFactory::GetPlatformSpecificForProfile(
601effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      browser_->profile());
602f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  if (oauth2_token_service)
603effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    oauth2_token_service->RevokeCredentials(account_id_to_remove_);
604effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  account_id_to_remove_.clear();
605effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
606effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  chrome::AttemptRestart();
607f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
608f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
609d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)void ProfileChooserView::LinkClicked(views::Link* sender, int event_flags) {
610d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  if (sender == manage_accounts_link_) {
6115c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    // This link can either mean show/hide the account management view,
6125c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    // depending on which view it is displayed. ShowView() will DCHECK if
6135c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    // the account management view is displayed for non signed-in users.
6145c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    ShowView(
6155c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu        view_mode_ == BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT ?
6165c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu            BUBBLE_VIEW_MODE_PROFILE_CHOOSER :
6175c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu            BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT,
6185c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu        avatar_menu_.get());
6195c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  } else if (sender == add_account_link_) {
6205c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    ShowView(BUBBLE_VIEW_MODE_GAIA_ADD_ACCOUNT, avatar_menu_.get());
621a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  } else if (sender == tutorial_learn_more_link_) {
622a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    // TODO(guohui): update |learn_more_url| once it is decided.
623a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    const GURL lear_more_url("https://support.google.com/chrome/?hl=en#to");
624a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    chrome::NavigateParams params(
625a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)        browser_->profile(),
626a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)        lear_more_url,
627a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)        content::PAGE_TRANSITION_LINK);
628a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    params.disposition = NEW_FOREGROUND_TAB;
629a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    chrome::Navigate(&params);
630f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  } else {
6315c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    DCHECK(sender == tutorial_end_preview_link_);
6325c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    ShowView(BUBBLE_VIEW_MODE_END_PREVIEW, avatar_menu_.get());
633f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
634f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
635f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
636c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochvoid ProfileChooserView::StyledLabelLinkClicked(
637c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    const gfx::Range& range, int event_flags) {
638c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  chrome::ShowSettings(browser_);
639c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch}
640c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
641f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)bool ProfileChooserView::HandleKeyEvent(views::Textfield* sender,
642f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                        const ui::KeyEvent& key_event) {
643f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  views::Textfield* name_textfield =
644f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      current_profile_name_->profile_name_textfield();
645f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  DCHECK(sender == name_textfield);
646f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
647f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  if (key_event.key_code() == ui::VKEY_RETURN ||
648f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      key_event.key_code() == ui::VKEY_TAB) {
649f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    // Pressing Tab/Enter commits the new profile name, unless it's empty.
650f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    base::string16 new_profile_name = name_textfield->text();
651f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    if (new_profile_name.empty())
652f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      return true;
653f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
654f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    const AvatarMenu::Item& active_item = avatar_menu_->GetItemAt(
65568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        avatar_menu_->GetActiveProfileIndex());
656f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    Profile* profile = g_browser_process->profile_manager()->GetProfile(
657f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        active_item.profile_path);
658f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    DCHECK(profile);
659f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
660f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    if (profile->IsManaged())
661f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      return true;
662f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
663f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    profiles::UpdateProfileName(profile, new_profile_name);
664f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    current_profile_name_->ShowReadOnlyView();
665f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    return true;
666d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  }
667f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  return false;
668d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)}
6697d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
670a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochviews::View* ProfileChooserView::CreateProfileChooserView(
6715c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    AvatarMenu* avatar_menu, TutorialMode last_tutorial_mode) {
672a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  // TODO(guohui, noms): the view should be customized based on whether new
673a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  // profile management preview is enabled or not.
674a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
675a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  views::View* view = new views::View();
676a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  views::GridLayout* layout = CreateSingleColumnLayout(view, kFixedMenuWidth);
677a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  // Separate items into active and alternatives.
678a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  Indexes other_profiles;
679a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  views::View* tutorial_view = NULL;
680a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  views::View* current_profile_view = NULL;
681a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  views::View* current_profile_accounts = NULL;
682a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  views::View* option_buttons_view = NULL;
6835c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  bool is_new_profile_management = switches::IsNewProfileManagement();
684a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  for (size_t i = 0; i < avatar_menu->GetNumberOfItems(); ++i) {
685a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    const AvatarMenu::Item& item = avatar_menu->GetItemAt(i);
686a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    if (item.active) {
687a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      option_buttons_view = CreateOptionsView(item.signed_in);
6885c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      current_profile_view = CreateCurrentProfileView(item, false);
689a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      if (view_mode_ == BUBBLE_VIEW_MODE_PROFILE_CHOOSER) {
6905c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu        if (is_new_profile_management) {
6915c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu          tutorial_view = last_tutorial_mode == TUTORIAL_MODE_SEND_FEEDBACK ?
6925c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu              CreateSendPreviewFeedbackView() :
6935c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu              CreatePreviewEnabledTutorialView(
6945c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu                  item, last_tutorial_mode == TUTORIAL_MODE_PREVIEW_ENABLED);
6955c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu        } else {
6965c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu          tutorial_view = CreateNewProfileManagementPreviewView();
6975c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu        }
698a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      } else {
699a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        current_profile_accounts = CreateCurrentProfileAccountsView(item);
700a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      }
701a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    } else {
702a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      other_profiles.push_back(i);
703a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    }
704a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  }
705a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
706a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  if (tutorial_view) {
707a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    layout->StartRow(1, 0);
708a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    layout->AddView(tutorial_view);
709a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  }
710a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
711a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  if (!current_profile_view) {
712a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    // Guest windows don't have an active profile.
713a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    current_profile_view = CreateGuestProfileView();
714a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    option_buttons_view = CreateOptionsView(false);
715a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  }
716a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
717a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  layout->StartRow(1, 0);
718a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  layout->AddView(current_profile_view);
719a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
720a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  if (view_mode_ == BUBBLE_VIEW_MODE_PROFILE_CHOOSER) {
721a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    layout->StartRow(1, 0);
722a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    if (switches::IsFastUserSwitching())
723a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      layout->AddView(CreateOtherProfilesView(other_profiles));
724a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  } else {
725a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    DCHECK(current_profile_accounts);
726a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    layout->StartRow(0, 0);
727a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    layout->AddView(new views::Separator(views::Separator::HORIZONTAL));
728a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    layout->StartRow(1, 0);
729a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    layout->AddView(current_profile_accounts);
730a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  }
731a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
732a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  layout->StartRow(0, 0);
733a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  layout->AddView(new views::Separator(views::Separator::HORIZONTAL));
734a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
7355c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  // Option buttons. Only available with the new profile management flag.
7365c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  if (switches::IsNewProfileManagement()) {
7375c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    layout->StartRow(0, 0);
7385c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    layout->AddView(option_buttons_view);
7395c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  }
740a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
741a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  return view;
742a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch}
743a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
744a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochviews::View* ProfileChooserView::CreatePreviewEnabledTutorialView(
745a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    const AvatarMenu::Item& current_avatar_item,
746a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    bool tutorial_shown) {
747a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  if (!switches::IsNewProfileManagementPreviewEnabled())
748a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    return NULL;
749a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
750a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  Profile* profile = browser_->profile();
75123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  const int show_count = profile->GetPrefs()->GetInteger(
752a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      prefs::kProfileAvatarTutorialShown);
75323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  // Do not show the tutorial if user has dismissed it.
75423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  if (show_count > kProfileAvatarTutorialShowMax)
755a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    return NULL;
756a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
75723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  if (!tutorial_shown) {
75823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    if (show_count == kProfileAvatarTutorialShowMax)
75923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)      return NULL;
76023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    profile->GetPrefs()->SetInteger(
76123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)        prefs::kProfileAvatarTutorialShown, show_count + 1);
76223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  }
763a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
764a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  return CreateTutorialView(
7655c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      TUTORIAL_MODE_PREVIEW_ENABLED,
766a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      l10n_util::GetStringUTF16(IDS_PROFILES_PREVIEW_ENABLED_TUTORIAL_TITLE),
767a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      l10n_util::GetStringUTF16(
768a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch          IDS_PROFILES_PREVIEW_ENABLED_TUTORIAL_CONTENT_TEXT),
769a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      l10n_util::GetStringUTF16(IDS_PROFILES_PROFILE_TUTORIAL_LEARN_MORE),
770a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      l10n_util::GetStringUTF16(IDS_PROFILES_TUTORIAL_OK_BUTTON),
771a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      &tutorial_learn_more_link_,
772a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      &tutorial_ok_button_);
773a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch}
774a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
7755c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuviews::View* ProfileChooserView::CreateSendPreviewFeedbackView() {
7765c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  return CreateTutorialView(
7775c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      TUTORIAL_MODE_SEND_FEEDBACK,
7785c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      l10n_util::GetStringUTF16(IDS_PROFILES_FEEDBACK_TUTORIAL_TITLE),
7795c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      l10n_util::GetStringUTF16(
7805c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu          IDS_PROFILES_FEEDBACK_TUTORIAL_CONTENT_TEXT),
7815c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      l10n_util::GetStringUTF16(IDS_PROFILES_END_PREVIEW),
7825c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      l10n_util::GetStringUTF16(IDS_PROFILES_SEND_FEEDBACK_BUTTON),
7835c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      &tutorial_end_preview_link_,
7845c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      &tutorial_send_feedback_button_);
7855c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu}
7865c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
787a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochviews::View* ProfileChooserView::CreateTutorialView(
7885c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    TutorialMode tutorial_mode,
789a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    const base::string16& title_text,
790a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    const base::string16& content_text,
791a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    const base::string16& link_text,
792a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    const base::string16& button_text,
793a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    views::Link** link,
794a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    views::LabelButton** button) {
7955c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  tutorial_mode_ = tutorial_mode;
7965c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
797a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  views::View* view = new views::View();
798c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  view->set_background(views::Background::CreateSolidBackground(
799c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      profiles::kAvatarTutorialBackgroundColor));
800a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  views::GridLayout* layout = CreateSingleColumnLayout(view,
801a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      kFixedMenuWidth - 2 * views::kButtonHEdgeMarginNew);
802a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  layout->SetInsets(views::kButtonVEdgeMarginNew,
803a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                    views::kButtonHEdgeMarginNew,
804a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                    views::kButtonVEdgeMarginNew,
805a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                    views::kButtonHEdgeMarginNew);
806a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
807a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Adds title.
808a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  views::Label* title_label = new views::Label(title_text);
809a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  title_label->SetHorizontalAlignment(gfx::ALIGN_LEFT);
810c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  title_label->SetAutoColorReadabilityEnabled(false);
811c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  title_label->SetEnabledColor(SK_ColorWHITE);
812c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  title_label ->SetFontList(ui::ResourceBundle::GetSharedInstance().GetFontList(
813c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      ui::ResourceBundle::MediumFont));
814a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  layout->StartRow(1, 0);
815a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  layout->AddView(title_label);
816a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
817c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  // Adds body content.
818a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  views::Label* content_label = new views::Label(content_text);
819c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  content_label->SetMultiLine(true);
820c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  content_label->SetHorizontalAlignment(gfx::ALIGN_LEFT);
821c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  content_label->SetAutoColorReadabilityEnabled(false);
822c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  content_label->SetEnabledColor(profiles::kAvatarTutorialContentTextColor);
823a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  layout->StartRowWithPadding(1, 0, 0, views::kRelatedControlVerticalSpacing);
824c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  layout->AddView(content_label);
825a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
826c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  // Adds links and buttons.
827a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  views::View* button_row = new views::View();
828a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  views::GridLayout* button_layout = new views::GridLayout(button_row);
829a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  views::ColumnSet* button_columns = button_layout->AddColumnSet(0);
830a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  button_columns->AddColumn(views::GridLayout::LEADING,
831a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      views::GridLayout::CENTER, 0, views::GridLayout::USE_PREF, 0, 0);
832a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  button_columns->AddPaddingColumn(
833a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      1, views::kUnrelatedControlHorizontalSpacing);
834a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  button_columns->AddColumn(views::GridLayout::TRAILING,
835a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      views::GridLayout::CENTER, 0, views::GridLayout::USE_PREF, 0, 0);
836a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  button_row->SetLayoutManager(button_layout);
837a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
838a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  *link = CreateLink(link_text, this);
839a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  (*link)->SetHorizontalAlignment(gfx::ALIGN_LEFT);
840a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  (*link)->SetAutoColorReadabilityEnabled(false);
841a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  (*link)->SetEnabledColor(SK_ColorWHITE);
842a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  button_layout->StartRow(1, 0);
843a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  button_layout->AddView(*link);
844a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
845a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  *button = new views::LabelButton(this, button_text);
846a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  (*button)->SetHorizontalAlignment(gfx::ALIGN_CENTER);
847a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  (*button)->SetStyle(views::Button::STYLE_BUTTON);
848a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  button_layout->AddView(*button);
849a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
850a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  layout->StartRowWithPadding(1, 0, 0, views::kUnrelatedControlVerticalSpacing);
851a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  layout->AddView(button_row);
852a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
853c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  // Adds a padded caret image at the bottom.
854c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  views::View* padded_caret_view = new views::View();
855c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  views::GridLayout* padded_caret_layout =
856c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      new views::GridLayout(padded_caret_view);
857c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  views::ColumnSet* padded_columns = padded_caret_layout->AddColumnSet(0);
858c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  padded_columns->AddPaddingColumn(0, views::kButtonHEdgeMarginNew);
859c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  padded_columns->AddColumn(views::GridLayout::LEADING,
860c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      views::GridLayout::CENTER, 0, views::GridLayout::USE_PREF, 0, 0);
861c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  padded_caret_view->SetLayoutManager(padded_caret_layout);
862c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
863c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  views::ImageView* caret_image_view = new views::ImageView();
864c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  ui::ResourceBundle* rb = &ui::ResourceBundle::GetSharedInstance();
865c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  caret_image_view->SetImage(
866c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      *rb->GetImageSkiaNamed(IDR_ICON_PROFILES_MENU_CARET));
867c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
868c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  padded_caret_layout->StartRow(1, 0);
869c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  padded_caret_layout->AddView(caret_image_view);
870c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
871c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  views::View* view_with_caret = new views::View();
872c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  views::GridLayout* layout_with_caret =
873c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      CreateSingleColumnLayout(view_with_caret, kFixedMenuWidth);
874c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  layout_with_caret->StartRow(1, 0);
875c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  layout_with_caret->AddView(view);
876c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  layout_with_caret->StartRow(1, 0);
877c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  layout_with_caret->AddView(padded_caret_view);
878c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  return view_with_caret;
879a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
880a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
881d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)views::View* ProfileChooserView::CreateCurrentProfileView(
88268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    const AvatarMenu::Item& avatar_item,
883d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    bool is_guest) {
884d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  views::View* view = new views::View();
8855c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  int column_width = kFixedMenuWidth - 2 * views::kButtonHEdgeMarginNew;
8865c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  views::GridLayout* layout = CreateSingleColumnLayout(view, column_width);
88768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  layout->SetInsets(views::kButtonVEdgeMarginNew,
888d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)                    views::kButtonHEdgeMarginNew,
8895c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu                    views::kRelatedControlVerticalSpacing,
89068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)                    views::kButtonHEdgeMarginNew);
8917d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
8925c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  // Profile icon, centered.
8935c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  float x_offset = (column_width - kLargeImageSide) / 2;
8945c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  current_profile_photo_ = new EditableProfilePhoto(
8955c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      this, avatar_item.icon, !is_guest,
8965c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      gfx::Rect(x_offset, 0, kLargeImageSide, kLargeImageSide));
897d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
8985c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  if (switches::IsNewProfileManagementPreviewEnabled()) {
8995c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    question_mark_button_ = new views::ImageButton(this);
9005c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    question_mark_button_->SetImageAlignment(
9015c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu        views::ImageButton::ALIGN_LEFT, views::ImageButton::ALIGN_MIDDLE);
9025c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    ui::ResourceBundle* rb = &ui::ResourceBundle::GetSharedInstance();
9035c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    question_mark_button_->SetImage(views::ImageButton::STATE_NORMAL,
9045c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu                                    rb->GetImageSkiaNamed(IDR_QUESTION_MARK));
9055c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    gfx::Size preferred_size = question_mark_button_->GetPreferredSize();
9065c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    question_mark_button_->SetBounds(
9075c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu        0, 0, preferred_size.width(), preferred_size.height());
9085c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    current_profile_photo_->AddChildView(question_mark_button_);
909d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  }
9107d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
9115c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  layout->StartRow(1, 0);
9125c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  layout->AddView(current_profile_photo_);
9137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
9145c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  // Profile name, centered.
915a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  current_profile_name_ = new EditableProfileName(
9165c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      this, profiles::GetAvatarNameForProfile(browser_->profile()), !is_guest);
917d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  layout->StartRow(1, 0);
918f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  layout->AddView(current_profile_name_);
9193551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
9205c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  if (is_guest)
9215c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    return view;
9223551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
9235c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  // The available links depend on the type of profile that is active.
924d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  layout->StartRow(1, 0);
9255c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  if (avatar_item.signed_in) {
9265c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    if (switches::IsNewProfileManagement()) {
9275c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      base::string16 link_title = l10n_util::GetStringUTF16(
9285c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu          view_mode_ ==  BUBBLE_VIEW_MODE_PROFILE_CHOOSER ?
9295c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu              IDS_PROFILES_PROFILE_MANAGE_ACCOUNTS_BUTTON :
9305c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu              IDS_PROFILES_PROFILE_HIDE_MANAGE_ACCOUNTS_BUTTON);
9315c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      manage_accounts_link_ = CreateLink(link_title, this);
9325c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      manage_accounts_link_->SetHorizontalAlignment(gfx::ALIGN_CENTER);
9335c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      layout->AddView(manage_accounts_link_);
9345c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    } else {
9355c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      views::Label* email_label = new views::Label(avatar_item.sync_state);
9365c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      email_label->SetHorizontalAlignment(gfx::ALIGN_CENTER);
9375c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      layout->AddView(email_label);
9385c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    }
9395c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  } else {
9405c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    signin_current_profile_link_ = new views::BlueButton(
9415c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      this, l10n_util::GetStringFUTF16(IDS_SYNC_START_SYNC_BUTTON_LABEL,
9425c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu          l10n_util::GetStringUTF16(IDS_SHORT_PRODUCT_NAME)));
9435c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    layout->AddView(signin_current_profile_link_);
9445c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  }
9455c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
9463551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  return view;
9473551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}
9483551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
9493551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)views::View* ProfileChooserView::CreateGuestProfileView() {
950d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  gfx::Image guest_icon =
9510529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch      ui::ResourceBundle::GetSharedInstance().GetImageNamed(
9520529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch          profiles::GetPlaceholderAvatarIconResourceID());
95368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  AvatarMenu::Item guest_avatar_item(0, 0, guest_icon);
9543551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  guest_avatar_item.active = true;
9553551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  guest_avatar_item.name = l10n_util::GetStringUTF16(
956d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)      IDS_PROFILES_GUEST_PROFILE_NAME);
9573551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  guest_avatar_item.signed_in = false;
9583551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
959d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  return CreateCurrentProfileView(guest_avatar_item, true);
9607d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
9617d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
9627d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)views::View* ProfileChooserView::CreateOtherProfilesView(
9637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    const Indexes& avatars_to_show) {
9647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  views::View* view = new views::View();
9655c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  views::GridLayout* layout = CreateSingleColumnLayout(view, kFixedMenuWidth);
9665c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
96768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  int num_avatars_to_show = avatars_to_show.size();
96868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  for (int i = 0; i < num_avatars_to_show; ++i) {
96968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    const size_t index = avatars_to_show[i];
97068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    const AvatarMenu::Item& item = avatar_menu_->GetItemAt(index);
971f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    const int kSmallImageSide = 32;
972d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
9730529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    gfx::Image image = profiles::GetSizedAvatarIcon(
974d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        item.icon, true,
9758bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)        kSmallImageSide + profiles::kAvatarIconPadding,
9768bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)        kSmallImageSide + profiles::kAvatarIconPadding);
977d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
9785c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    views::LabelButton* button = new BackgroundColorHoverButton(
9795c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu        this,
9805c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu        item.name,
9815c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu        *image.ToImageSkia(),
9825c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu        *image.ToImageSkia());
9835c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    button->set_min_size(gfx::Size(
9845c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu        0, kButtonHeight + views::kRelatedControlVerticalSpacing));
9855c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
986d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    open_other_profile_indexes_map_[button] = index;
987d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
988d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    layout->StartRow(1, 0);
9895c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    layout->AddView(new views::Separator(views::Separator::HORIZONTAL));
9905c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    layout->StartRow(1, 0);
991d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    layout->AddView(button);
9927d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  }
9937d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
9947d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  return view;
9957d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
9967d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
997effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochviews::View* ProfileChooserView::CreateOptionsView(bool enable_lock) {
998d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  views::View* view = new views::View();
999effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  views::GridLayout* layout;
1000effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
1001effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // Only signed-in users have the ability to lock.
1002effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  if (enable_lock) {
1003effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    layout = new views::GridLayout(view);
1004effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    views::ColumnSet* columns = layout->AddColumnSet(0);
1005effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    int width_of_lock_button =
1006effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch        2 * views::kUnrelatedControlLargeHorizontalSpacing + 12;
1007effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    int width_of_users_button = kFixedMenuWidth - width_of_lock_button;
1008effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    columns->AddColumn(views::GridLayout::FILL, views::GridLayout::FILL, 0,
1009effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                       views::GridLayout::FIXED, width_of_users_button,
1010effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                       width_of_users_button);
1011effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    columns->AddColumn(views::GridLayout::FILL, views::GridLayout::FILL, 0,
1012effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                       views::GridLayout::FIXED, width_of_lock_button,
1013effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                       width_of_lock_button);
1014effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    view->SetLayoutManager(layout);
1015effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  } else {
1016effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    layout = CreateSingleColumnLayout(view, kFixedMenuWidth);
1017effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  }
1018effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
10195c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  base::string16 text = browser_->profile()->IsGuestSession() ?
10205c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      l10n_util::GetStringUTF16(IDS_PROFILES_EXIT_GUEST) :
10215c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      l10n_util::GetStringFUTF16(IDS_PROFILES_NOT_YOU_BUTTON,
10225c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu          profiles::GetAvatarNameForProfile(browser_->profile()));
1023d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  ui::ResourceBundle* rb = &ui::ResourceBundle::GetSharedInstance();
102468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  users_button_ = new BackgroundColorHoverButton(
102568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      this,
10265c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      text,
1027effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      *rb->GetImageSkiaNamed(IDR_ICON_PROFILES_MENU_AVATAR),
1028effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      *rb->GetImageSkiaNamed(IDR_ICON_PROFILES_MENU_AVATAR));
10295c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  users_button_->set_min_size(gfx::Size(
10305c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      0, kButtonHeight + views::kRelatedControlVerticalSpacing));
1031effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
1032d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  layout->StartRow(1, 0);
1033d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  layout->AddView(users_button_);
1034a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch
1035effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  if (enable_lock) {
1036effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    lock_button_ = new BackgroundColorHoverButton(
1037effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch        this,
1038effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch        base::string16(),
1039effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch        *rb->GetImageSkiaNamed(IDR_ICON_PROFILES_MENU_LOCK),
1040effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch        *rb->GetImageSkiaNamed(IDR_ICON_PROFILES_MENU_LOCK));
10415c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    lock_button_->set_min_size(gfx::Size(
10425c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      0, kButtonHeight + views::kRelatedControlVerticalSpacing));
1043effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    layout->AddView(lock_button_);
1044effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  }
1045d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  return view;
1046d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)}
10477dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
1048d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)views::View* ProfileChooserView::CreateCurrentProfileAccountsView(
104968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    const AvatarMenu::Item& avatar_item) {
1050d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  DCHECK(avatar_item.signed_in);
1051a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch  views::View* view = new views::View();
10525c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  view->set_background(views::Background::CreateSolidBackground(
10535c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      profiles::kAvatarBubbleAccountsBackgroundColor));
10545c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  views::GridLayout* layout = CreateSingleColumnLayout(view, kFixedMenuWidth);
10557d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
10561e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  Profile* profile = browser_->profile();
1057a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  std::string primary_account =
1058a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      SigninManagerFactory::GetForProfile(profile)->GetAuthenticatedUsername();
1059a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  DCHECK(!primary_account.empty());
10605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  std::vector<std::string>accounts =
10615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      profiles::GetSecondaryAccountsForProfile(profile, primary_account);
10627d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
10635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // The primary account should always be listed first.
10645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // TODO(rogerta): we still need to further differentiate the primary account
10655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // from the others in the UI, so more work is likely required here:
10665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // crbug.com/311124.
10675c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  CreateAccountButton(layout, primary_account, true, kFixedMenuWidth);
10685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  for (size_t i = 0; i < accounts.size(); ++i)
10695c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    CreateAccountButton(layout, accounts[i], false, kFixedMenuWidth);
107068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing);
10717d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
10725c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  add_account_link_ = CreateLink(l10n_util::GetStringFUTF16(
10735c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      IDS_PROFILES_PROFILE_ADD_ACCOUNT_BUTTON, avatar_item.name), this);
10745c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  add_account_link_->SetBorder(views::Border::CreateEmptyBorder(
10755c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      0, views::kButtonVEdgeMarginNew,
10765c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      views::kRelatedControlVerticalSpacing, 0));
1077d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  layout->StartRow(1, 0);
10785c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  layout->AddView(add_account_link_);
10797d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  return view;
10807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
1081a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
1082a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)void ProfileChooserView::CreateAccountButton(views::GridLayout* layout,
1083a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                                             const std::string& account,
10845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                             bool is_primary_account,
10855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                             int width) {
1086a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  ui::ResourceBundle* rb = &ui::ResourceBundle::GetSharedInstance();
10875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  const gfx::ImageSkia* menu_marker =
10885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      rb->GetImageNamed(IDR_CLOSE_1).ToImageSkia();
10895c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
10905c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  views::LabelButton* email_button = new BackgroundColorHoverButton(
10915c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      this,
10925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      gfx::ElideEmail(base::UTF8ToUTF16(account),
1093a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                      rb->GetFontList(ui::ResourceBundle::BaseFont),
10945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                      width - menu_marker->width()),
10955c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      gfx::ImageSkia(),
10965c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      gfx::ImageSkia());
1097a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  layout->StartRow(1, 0);
1098a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  layout->AddView(email_button);
1099a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
1100a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // Save the original email address, as the button text could be elided.
1101a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  current_profile_accounts_map_[email_button] = account;
1102a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
1103effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
1104effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochviews::View* ProfileChooserView::CreateGaiaSigninView(
1105effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    bool add_secondary_account) {
1106effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  views::View* view = new views::View();
1107effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  views::GridLayout* layout =
1108effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      CreateSingleColumnLayout(view, kFixedGaiaViewWidth);
1109effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
1110effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // Adds title.
1111effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  views::View* padded_title = new views::View();
1112effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  int available_width = kFixedGaiaViewWidth - 2 * views::kButtonHEdgeMarginNew;
1113effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  views::GridLayout* padded_layout = CreateSingleColumnLayout(
1114effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      padded_title, available_width);
1115effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  padded_layout->SetInsets(views::kButtonVEdgeMarginNew,
1116effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                           views::kButtonHEdgeMarginNew,
1117effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                           views::kButtonVEdgeMarginNew,
1118effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                           views::kButtonHEdgeMarginNew);
1119effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  padded_layout->StartRow(1, 0);
1120effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  padded_layout->AddView(new TitleCard(
1121effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      add_secondary_account ? IDS_PROFILES_GAIA_ADD_ACCOUNT_TITLE :
1122effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                              IDS_PROFILES_GAIA_SIGNIN_TITLE,
1123effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      this, &gaia_signin_cancel_button_));
1124effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
1125effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  layout->StartRow(1, 0);
1126effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  layout->AddView(padded_title);
1127effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  layout->StartRow(1, 0);
1128effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  layout->AddView(new views::Separator(views::Separator::HORIZONTAL));
1129effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
1130effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // Adds Gaia signin webview
1131effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  Profile* profile = browser_->profile();
1132effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  views::WebView* web_view = new views::WebView(profile);
1133effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  signin::Source source = add_secondary_account ?
1134effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      signin::SOURCE_AVATAR_BUBBLE_ADD_ACCOUNT :
1135effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      signin::SOURCE_AVATAR_BUBBLE_SIGN_IN;
1136effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  GURL url(signin::GetPromoURL(
1137effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      source, false /* auto_close */, true /* is_constrained */));
1138effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  web_view->LoadInitialURL(url);
1139effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  web_view->SetPreferredSize(
1140effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      gfx::Size(kFixedGaiaViewWidth, kFixedGaiaViewHeight));
1141effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
1142effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  layout->StartRow(1, 0);
1143effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  layout->AddView(web_view);
1144effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
1145effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  return view;
1146effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}
1147effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
1148effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochviews::View* ProfileChooserView::CreateAccountRemovalView() {
1149effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  views::View* view = new views::View();
1150effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  views::GridLayout* layout = CreateSingleColumnLayout(
1151effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      view, kFixedAccountRemovalViewWidth - 2 * views::kButtonHEdgeMarginNew);
1152effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  layout->SetInsets(views::kButtonVEdgeMarginNew,
1153effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                    views::kButtonHEdgeMarginNew,
1154effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                    views::kButtonVEdgeMarginNew,
1155effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                    views::kButtonHEdgeMarginNew);
1156effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
1157effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // Adds title.
1158effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  layout->StartRow(1, 0);
1159effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  layout->AddView(new TitleCard(IDS_PROFILES_ACCOUNT_REMOVAL_TITLE, this,
1160effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                                &account_removal_cancel_button_));
1161effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  layout->StartRowWithPadding(1, 0, 0, views::kRelatedControlVerticalSpacing);
1162effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  layout->AddView(new views::Separator(views::Separator::HORIZONTAL));
1163effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
1164effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  const std::string& primary_account = SigninManagerFactory::GetForProfile(
1165effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      browser_->profile())->GetAuthenticatedUsername();
1166effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  bool is_primary_account = primary_account == account_id_to_remove_;
1167effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
1168effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // Adds main text.
1169c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  layout->StartRowWithPadding(1, 0, 0, views::kUnrelatedControlVerticalSpacing);
1170effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  ui::ResourceBundle* rb = &ui::ResourceBundle::GetSharedInstance();
1171effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  const gfx::FontList& small_font_list =
1172effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      rb->GetFontList(ui::ResourceBundle::SmallFont);
1173c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
1174c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  if (is_primary_account) {
1175c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    std::vector<size_t> offsets;
1176c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    const base::string16 settings_text =
1177c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch        l10n_util::GetStringUTF16(IDS_PROFILES_SETTINGS_LINK);
11780529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    const base::string16 primary_account_removal_text =
1179c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch        l10n_util::GetStringFUTF16(IDS_PROFILES_PRIMARY_ACCOUNT_REMOVAL_TEXT,
1180c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch            base::UTF8ToUTF16(account_id_to_remove_), settings_text, &offsets);
1181c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    views::StyledLabel* primary_account_removal_label =
11820529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch        new views::StyledLabel(primary_account_removal_text, this);
1183c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    primary_account_removal_label->AddStyleRange(
1184c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch        gfx::Range(offsets[1], offsets[1] + settings_text.size()),
1185c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch        views::StyledLabel::RangeStyleInfo::CreateForLink());
1186c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    primary_account_removal_label->SetBaseFontList(small_font_list);
1187c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    layout->AddView(primary_account_removal_label);
1188c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  } else {
1189c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    views::Label* content_label = new views::Label(
1190c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch        l10n_util::GetStringUTF16(IDS_PROFILES_ACCOUNT_REMOVAL_TEXT));
1191c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    content_label->SetMultiLine(true);
1192c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    content_label->SetHorizontalAlignment(gfx::ALIGN_LEFT);
1193c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    content_label->SetFontList(small_font_list);
1194c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    layout->AddView(content_label);
1195c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  }
1196effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
1197effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // Adds button.
1198effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  if (!is_primary_account) {
1199effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    remove_account_and_relaunch_button_ = new views::BlueButton(
1200effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch        this, l10n_util::GetStringUTF16(IDS_PROFILES_ACCOUNT_REMOVAL_BUTTON));
1201effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    remove_account_and_relaunch_button_->SetHorizontalAlignment(
1202effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch        gfx::ALIGN_CENTER);
1203effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    layout->StartRowWithPadding(
1204effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch        1, 0, 0, views::kUnrelatedControlVerticalSpacing);
1205effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    layout->AddView(remove_account_and_relaunch_button_);
1206effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  } else {
1207effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    layout->AddPaddingRow(0, views::kUnrelatedControlVerticalSpacing);
1208effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  }
1209effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
1210effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  return view;
1211effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}
1212a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
1213a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochviews::View* ProfileChooserView::CreateNewProfileManagementPreviewView() {
1214a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  return CreateTutorialView(
12155c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      TUTORIAL_MODE_ENABLE_PREVIEW,
1216a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      l10n_util::GetStringUTF16(IDS_PROFILES_PREVIEW_TUTORIAL_TITLE),
1217a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      l10n_util::GetStringUTF16(IDS_PROFILES_PREVIEW_TUTORIAL_CONTENT_TEXT),
1218a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      l10n_util::GetStringUTF16(IDS_PROFILES_PROFILE_TUTORIAL_LEARN_MORE),
1219a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      l10n_util::GetStringUTF16(IDS_PROFILES_TUTORIAL_TRY_BUTTON),
1220a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      &tutorial_learn_more_link_,
1221a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      &tutorial_enable_new_profile_management_button_);
1222a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch}
12235c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
12245c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuviews::View* ProfileChooserView::CreateEndPreviewView() {
12255c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  views::View* view = new views::View();
12265c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  views::GridLayout* layout = CreateSingleColumnLayout(
12275c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      view, kFixedAccountRemovalViewWidth - 2 * views::kButtonHEdgeMarginNew);
12285c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  layout->SetInsets(views::kButtonVEdgeMarginNew,
12295c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu                    views::kButtonHEdgeMarginNew,
12305c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu                    views::kButtonVEdgeMarginNew,
12315c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu                    views::kButtonHEdgeMarginNew);
12325c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
12335c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  // Adds title.
12345c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  layout->StartRow(1, 0);
12355c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  layout->AddView(new TitleCard(IDS_PROFILES_END_PREVIEW, this,
12365c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu                                &end_preview_cancel_button_));
12375c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  layout->StartRowWithPadding(1, 0, 0, views::kRelatedControlVerticalSpacing);
12385c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  layout->AddView(new views::Separator(views::Separator::HORIZONTAL));
12395c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
12405c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  // Adds main text.
12415c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  views::Label* content_label = new views::Label(
12425c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      l10n_util::GetStringUTF16(IDS_PROFILES_END_PREVIEW_TEXT));
12435c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  content_label->SetMultiLine(true);
12445c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  content_label->SetHorizontalAlignment(gfx::ALIGN_LEFT);
12455c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  ui::ResourceBundle* rb = &ui::ResourceBundle::GetSharedInstance();
12465c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  const gfx::FontList& small_font_list =
12475c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      rb->GetFontList(ui::ResourceBundle::SmallFont);
12485c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  content_label->SetFontList(small_font_list);
12495c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  layout->StartRowWithPadding(1, 0, 0, views::kUnrelatedControlVerticalSpacing);
12505c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  layout->AddView(content_label);
12515c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
12525c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  // Adds button.
12535c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  end_preview_and_relaunch_button_ = new views::BlueButton(
12545c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      this, l10n_util::GetStringUTF16(IDS_PROFILES_END_PREVIEW_AND_RELAUNCH));
12555c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  end_preview_and_relaunch_button_->SetHorizontalAlignment(
12565c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      gfx::ALIGN_CENTER);
12575c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  layout->StartRowWithPadding(
12585c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      1, 0, 0, views::kUnrelatedControlVerticalSpacing);
12595c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  layout->AddView(end_preview_and_relaunch_button_);
12605c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
12615c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  return view;
12625c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu}
12635c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
1264