profile_chooser_view.cc revision 116680a4aac90f2aa7413d9095a592090648e557
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"
14010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "chrome/browser/profiles/profile_metrics.h"
15d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "chrome/browser/profiles/profile_window.h"
16f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/profiles/profiles_state.h"
171e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "chrome/browser/signin/profile_oauth2_token_service_factory.h"
18cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/signin/signin_header_helper.h"
19a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "chrome/browser/signin/signin_manager_factory.h"
20d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "chrome/browser/signin/signin_promo.h"
2168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "chrome/browser/ui/browser.h"
225c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "chrome/browser/ui/browser_commands.h"
230f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "chrome/browser/ui/browser_dialogs.h"
24c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "chrome/browser/ui/chrome_pages.h"
25d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "chrome/browser/ui/singleton_tabs.h"
26c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "chrome/browser/ui/views/profiles/user_manager_view.h"
27a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "chrome/common/pref_names.h"
284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "chrome/common/url_constants.h"
29effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "components/signin/core/browser/mutable_profile_oauth2_token_service.h"
30effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "components/signin/core/browser/profile_oauth2_token_service.h"
31cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "components/signin/core/browser/signin_error_controller.h"
32e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include "components/signin/core/browser/signin_manager.h"
330529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "components/signin/core/common/profile_management_switches.h"
34d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "grit/chromium_strings.h"
357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "grit/generated_resources.h"
363551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "grit/theme_resources.h"
3768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "third_party/skia/include/core/SkColor.h"
387d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "ui/base/l10n/l10n_util.h"
397d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "ui/base/resource/resource_bundle.h"
405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ui/gfx/canvas.h"
417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "ui/gfx/image/image.h"
427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "ui/gfx/image/image_skia.h"
43cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "ui/gfx/path.h"
44cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "ui/gfx/skia_util.h"
45f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "ui/gfx/text_elider.h"
465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ui/native_theme/native_theme.h"
47d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "ui/views/controls/button/blue_button.h"
48effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "ui/views/controls/button/image_button.h"
495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ui/views/controls/button/label_button.h"
50d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "ui/views/controls/button/menu_button.h"
517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "ui/views/controls/label.h"
527d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "ui/views/controls/link.h"
537d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "ui/views/controls/separator.h"
54c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "ui/views/controls/styled_label.h"
55f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "ui/views/controls/textfield/textfield.h"
564e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "ui/views/controls/webview/webview.h"
577d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "ui/views/layout/grid_layout.h"
587d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "ui/views/layout/layout_constants.h"
597d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "ui/views/widget/widget.h"
607d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
61d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)namespace {
62d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
6368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// Helpers --------------------------------------------------------------------
6468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)const int kFixedMenuWidth = 250;
6668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)const int kButtonHeight = 29;
670de6073388f4e2780db8536178b129cd8f6ab386Torne (Richard Coles)const int kProfileAvatarTutorialShowMax = 1;
68effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochconst int kFixedGaiaViewHeight = 400;
69effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochconst int kFixedGaiaViewWidth = 360;
70effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochconst int kFixedAccountRemovalViewWidth = 280;
715c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuconst int kFixedEndPreviewViewWidth = 280;
725c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuconst int kLargeImageSide = 88;
73d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
74d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)// Creates a GridLayout with a single column. This ensures that all the child
75d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)// views added get auto-expanded to fill the full width of the bubble.
765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)views::GridLayout* CreateSingleColumnLayout(views::View* view, int width) {
77d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  views::GridLayout* layout = new views::GridLayout(view);
78d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  view->SetLayoutManager(layout);
79d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
80d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  views::ColumnSet* columns = layout->AddColumnSet(0);
815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  columns->AddColumn(views::GridLayout::FILL, views::GridLayout::FILL, 0,
825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                     views::GridLayout::FIXED, width, width);
83d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  return layout;
84d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)}
85d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
86f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)views::Link* CreateLink(const base::string16& link_text,
87d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)                        views::LinkListener* listener) {
88d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  views::Link* link_button = new views::Link(link_text);
89d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  link_button->SetHorizontalAlignment(gfx::ALIGN_LEFT);
90d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  link_button->SetUnderline(false);
91d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  link_button->set_listener(listener);
92d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  return link_button;
93d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)}
94d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
955c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liugfx::ImageSkia CreateSquarePlaceholderImage(int size) {
965c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  SkBitmap bitmap;
97116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  bitmap.allocPixels(SkImageInfo::MakeA8(size, size));
985c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  bitmap.eraseARGB(0, 0, 0, 0);
995c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  return gfx::ImageSkia::CreateFrom1xBitmap(bitmap);
1005c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu}
10168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
102cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)bool HasAuthError(Profile* profile) {
103cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  const SigninErrorController* error =
104cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      profiles::GetSigninErrorController(profile);
105cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  return error && error->HasError();
106cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
107cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
108cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)std::string GetAuthErrorAccountId(Profile* profile) {
109cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  const SigninErrorController* error =
110cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      profiles::GetSigninErrorController(profile);
111cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  if (!error)
112cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    return std::string();
113cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
114cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  return error->error_account_id();
115cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
116cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
117cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)std::string GetAuthErrorUsername(Profile* profile) {
118cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  const SigninErrorController* error =
119cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      profiles::GetSigninErrorController(profile);
120cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  if (!error)
121cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    return std::string();
122cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
123cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  return error->error_username();
124cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
125cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
126f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// BackgroundColorHoverButton -------------------------------------------------
12768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
128f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// A custom button that allows for setting a background color when hovered over.
1295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class BackgroundColorHoverButton : public views::LabelButton {
13068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) public:
131f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  BackgroundColorHoverButton(views::ButtonListener* listener,
132f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                             const base::string16& text,
133f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                             const gfx::ImageSkia& normal_icon,
134f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                             const gfx::ImageSkia& hover_icon);
135f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual ~BackgroundColorHoverButton();
13668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
13768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) private:
1385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // views::LabelButton:
1395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE;
14068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
141f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(BackgroundColorHoverButton);
14268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)};
14368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
144f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)BackgroundColorHoverButton::BackgroundColorHoverButton(
145f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    views::ButtonListener* listener,
146a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    const base::string16& text,
147f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    const gfx::ImageSkia& normal_icon,
148f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    const gfx::ImageSkia& hover_icon)
1495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    : views::LabelButton(listener, text) {
1505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  SetBorder(views::Border::CreateEmptyBorder(0, views::kButtonHEdgeMarginNew,
1515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                             0, views::kButtonHEdgeMarginNew));
1525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  set_min_size(gfx::Size(0, kButtonHeight));
1535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  SetImage(STATE_NORMAL, normal_icon);
1545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  SetImage(STATE_HOVERED, hover_icon);
1555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  SetImage(STATE_PRESSED, hover_icon);
156f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
15768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
1585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)BackgroundColorHoverButton::~BackgroundColorHoverButton() {}
159f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
1605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void BackgroundColorHoverButton::OnPaint(gfx::Canvas* canvas) {
1615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if ((state() == STATE_PRESSED) || (state() == STATE_HOVERED) || HasFocus()) {
1625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    canvas->DrawColor(GetNativeTheme()->GetSystemColor(
1635c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu        ui::NativeTheme::kColorId_ButtonHoverBackgroundColor));
1645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  }
1655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  LabelButton::OnPaint(canvas);
166f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
167f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
168f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// SizedContainer -------------------------------------------------
169f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
170f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// A simple container view that takes an explicit preferred size.
171f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class SizedContainer : public views::View {
172f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) public:
173f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  explicit SizedContainer(const gfx::Size& preferred_size)
174f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      : preferred_size_(preferred_size) {}
175f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
176f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  virtual gfx::Size GetPreferredSize() const OVERRIDE {
177f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    return preferred_size_;
178f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  }
179f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
180f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) private:
181f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  gfx::Size preferred_size_;
182f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)};
183f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
184f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}  // namespace
185f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
186f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
187f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// EditableProfilePhoto -------------------------------------------------
188f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
189f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// A custom Image control that shows a "change" button when moused over.
190f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class EditableProfilePhoto : public views::ImageView {
19168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) public:
192a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  EditableProfilePhoto(views::ButtonListener* listener,
193a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                       const gfx::Image& icon,
1945c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu                       bool is_editing_allowed,
1955c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu                       const gfx::Rect& bounds)
196a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      : views::ImageView(),
197a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        change_photo_button_(NULL) {
1980529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    gfx::Image image = profiles::GetSizedAvatarIcon(
199010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)        icon, true, kLargeImageSide, kLargeImageSide);
200f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    SetImage(image.ToImageSkia());
2015c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    SetBoundsRect(bounds);
202a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
203cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    // Calculate the circular mask that will be used to display the photo.
204f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    circular_mask_.addCircle(SkIntToScalar(bounds.width() / 2),
205f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)                             SkIntToScalar(bounds.height() / 2),
206cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                             SkIntToScalar(bounds.width() / 2));
207010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
208a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    if (!is_editing_allowed)
209a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return;
210a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
211f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    set_notify_enter_exit_on_child(true);
212f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
213f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    // Button overlay that appears when hovering over the image.
214010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    change_photo_button_ = new views::LabelButton(listener, base::string16());
2155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    change_photo_button_->SetHorizontalAlignment(gfx::ALIGN_CENTER);
2165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    change_photo_button_->SetBorder(views::Border::NullBorder());
217f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
218010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    const SkColor kBackgroundColor = SkColorSetARGB(65, 255, 255, 255);
219f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    change_photo_button_->set_background(
220f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        views::Background::CreateSolidBackground(kBackgroundColor));
221010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    change_photo_button_->SetImage(views::LabelButton::STATE_NORMAL,
222cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        *ui::ResourceBundle::GetSharedInstance().GetImageSkiaNamed(
223cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)            IDR_ICON_PROFILES_EDIT_CAMERA));
224010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
225f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    change_photo_button_->SetSize(bounds.size());
226f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    change_photo_button_->SetVisible(false);
227f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    AddChildView(change_photo_button_);
228f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
229f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
230cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE {
231cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    // Display the profile picture as a circle.
232cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    canvas->ClipPath(circular_mask_, true);
233cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    views::ImageView::OnPaint(canvas);
234cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  }
235cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
236cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual void PaintChildren(gfx::Canvas* canvas,
237f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)                             const views::CullSet& cull_set) OVERRIDE {
238cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    // Display any children (the "change photo" overlay) as a circle.
239cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    canvas->ClipPath(circular_mask_, true);
240cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    View::PaintChildren(canvas, cull_set);
241cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  }
242cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
2435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  views::LabelButton* change_photo_button() { return change_photo_button_; }
24468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
24568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) private:
246f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // views::View:
24768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  virtual void OnMouseEntered(const ui::MouseEvent& event) OVERRIDE {
248a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    if (change_photo_button_)
249a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      change_photo_button_->SetVisible(true);
250f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
25168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
25268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  virtual void OnMouseExited(const ui::MouseEvent& event) OVERRIDE {
253a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    if (change_photo_button_)
254a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      change_photo_button_->SetVisible(false);
255f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
25668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
257cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  gfx::Path circular_mask_;
258cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
259a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // Button that is shown when hovering over the image view. Can be NULL if
260a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // the photo isn't allowed to be edited (e.g. for guest profiles).
2615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  views::LabelButton* change_photo_button_;
262f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
263f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(EditableProfilePhoto);
26468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)};
26568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
266f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
267f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// EditableProfileName -------------------------------------------------
268f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
269f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// A custom text control that turns into a textfield for editing when clicked.
2705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class EditableProfileName : public views::LabelButton,
271f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                            public views::ButtonListener {
272f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) public:
273f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  EditableProfileName(views::TextfieldController* controller,
274a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                      const base::string16& text,
275a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                      bool is_editing_allowed)
2765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      : views::LabelButton(this, text),
277a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        profile_name_textfield_(NULL) {
278f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    ui::ResourceBundle* rb = &ui::ResourceBundle::GetSharedInstance();
2795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    const gfx::FontList& medium_font_list =
2805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        rb->GetFontList(ui::ResourceBundle::MediumFont);
2815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    SetFontList(medium_font_list);
2825c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    SetHorizontalAlignment(gfx::ALIGN_CENTER);
283a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
284cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    if (!is_editing_allowed) {
285cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      SetBorder(views::Border::CreateEmptyBorder(2, 0, 2, 0));
286a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return;
287cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    }
288f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
2895c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    // Show an "edit" pencil icon when hovering over. In the default state,
2905c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    // we need to create an empty placeholder of the correct size, so that
2915c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    // the text doesn't jump around when the hovered icon appears.
2925c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    gfx::ImageSkia hover_image =
2935c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu        *rb->GetImageSkiaNamed(IDR_ICON_PROFILES_EDIT_HOVER);
2945c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    SetImage(STATE_NORMAL, CreateSquarePlaceholderImage(hover_image.width()));
2955c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    SetImage(STATE_HOVERED, hover_image);
2965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    SetImage(STATE_PRESSED,
2975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)             *rb->GetImageSkiaNamed(IDR_ICON_PROFILES_EDIT_PRESSED));
2985c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    // To center the text, we need to offest it by the width of the icon we
2995c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    // are adding. We need to also add a small top/bottom padding to account
3005c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    // for the textfield's border.
3015c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    SetBorder(views::Border::CreateEmptyBorder(2, hover_image.width(), 2, 0));
302f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
303f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    // Textfield that overlaps the button.
304f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    profile_name_textfield_ = new views::Textfield();
3055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    profile_name_textfield_->set_controller(controller);
3065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    profile_name_textfield_->SetFontList(medium_font_list);
3075c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    profile_name_textfield_->SetHorizontalAlignment(gfx::ALIGN_CENTER);
3085c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
309f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    profile_name_textfield_->SetVisible(false);
310f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    AddChildView(profile_name_textfield_);
311f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
312f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
313f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  views::Textfield* profile_name_textfield() {
314f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    return profile_name_textfield_;
315f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
316f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
3175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Hide the editable textfield to show the profile name button instead.
318f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void ShowReadOnlyView() {
319a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    if (profile_name_textfield_)
320a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      profile_name_textfield_->SetVisible(false);
321f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
322f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
323f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) private:
324f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // views::ButtonListener:
325f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual void ButtonPressed(views::Button* sender,
326f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                            const ui::Event& event) OVERRIDE {
327a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    if (profile_name_textfield_) {
328a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      profile_name_textfield_->SetVisible(true);
3295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      profile_name_textfield_->SetText(GetText());
330a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      profile_name_textfield_->SelectAll(false);
331a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      profile_name_textfield_->RequestFocus();
332a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    }
333f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
334f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
3355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // views::LabelButton:
336f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual bool OnKeyReleased(const ui::KeyEvent& event) OVERRIDE {
337f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    // Override CustomButton's implementation, which presses the button when
338f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    // you press space and clicks it when you release space, as the space can be
339f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    // part of the new profile name typed in the textfield.
340f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    return false;
341f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
342f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
343f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual void Layout() OVERRIDE {
344a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    if (profile_name_textfield_)
345a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      profile_name_textfield_->SetBounds(0, 0, width(), height());
3465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    // This layout trick keeps the text left-aligned and the icon right-aligned.
3475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    SetHorizontalAlignment(gfx::ALIGN_RIGHT);
3485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    views::LabelButton::Layout();
3495c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    label()->SetHorizontalAlignment(gfx::ALIGN_CENTER);
350f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
351f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
3525c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  // Textfield that is shown when editing the profile name. Can be NULL if
353a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // the profile name isn't allowed to be edited (e.g. for guest profiles).
354f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  views::Textfield* profile_name_textfield_;
355f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
356f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(EditableProfileName);
357f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)};
358d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
359effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// A title card with one back button right aligned and one label center aligned.
360effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochclass TitleCard : public views::View {
361effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch public:
362010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  TitleCard(int message_id, views::ButtonListener* listener,
363effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch             views::ImageButton** back_button) {
364effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    back_button_ = new views::ImageButton(listener);
365effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    back_button_->SetImageAlignment(views::ImageButton::ALIGN_LEFT,
366effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                                    views::ImageButton::ALIGN_MIDDLE);
367effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    ui::ResourceBundle* rb = &ui::ResourceBundle::GetSharedInstance();
368effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    back_button_->SetImage(views::ImageButton::STATE_NORMAL,
369effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                           rb->GetImageSkiaNamed(IDR_BACK));
370effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    back_button_->SetImage(views::ImageButton::STATE_HOVERED,
371effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                           rb->GetImageSkiaNamed(IDR_BACK_H));
372effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    back_button_->SetImage(views::ImageButton::STATE_PRESSED,
373effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                           rb->GetImageSkiaNamed(IDR_BACK_P));
374effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    back_button_->SetImage(views::ImageButton::STATE_DISABLED,
375effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                           rb->GetImageSkiaNamed(IDR_BACK_D));
376effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    *back_button = back_button_;
377effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
378effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    title_label_ = new views::Label(l10n_util::GetStringUTF16(message_id));
379effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    title_label_->SetHorizontalAlignment(gfx::ALIGN_CENTER);
380effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    const gfx::FontList& medium_font_list =
381effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch        rb->GetFontList(ui::ResourceBundle::MediumFont);
382effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    title_label_->SetFontList(medium_font_list);
383effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
384effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    AddChildView(back_button_);
385effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    AddChildView(title_label_);
386effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  }
387effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
388010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // Creates a new view that has the |title_card| with padding at the top, an
389010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // edge-to-edge separator below, and the specified |view| at the bottom.
390010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  static views::View* AddPaddedTitleCard(views::View* view,
391010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                                         TitleCard* title_card,
392010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                                         int width) {
393010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    views::View* titled_view = new views::View();
394010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    views::GridLayout* layout = new views::GridLayout(titled_view);
395010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    titled_view->SetLayoutManager(layout);
396010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
397010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    // Column set 0 is a single column layout with horizontal padding at left
398010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    // and right, and column set 1 is a single column layout with no padding.
399010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    views::ColumnSet* columns = layout->AddColumnSet(0);
400010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    columns->AddPaddingColumn(1, views::kButtonHEdgeMarginNew);
401010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    int available_width = width - 2 * views::kButtonHEdgeMarginNew;
402010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    columns->AddColumn(views::GridLayout::FILL, views::GridLayout::FILL, 0,
403010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)        views::GridLayout::FIXED, available_width, available_width);
404010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    columns->AddPaddingColumn(1, views::kButtonHEdgeMarginNew);
405010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    layout->AddColumnSet(1)->AddColumn(views::GridLayout::FILL,
406010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)        views::GridLayout::FILL, 0,views::GridLayout::FIXED, width, width);
407010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
408010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    layout->StartRowWithPadding(1, 0, 0, views::kButtonVEdgeMarginNew);
409010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    layout->AddView(title_card);
410010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    layout->StartRowWithPadding(1, 1, 0, views::kRelatedControlVerticalSpacing);
411010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    layout->AddView(new views::Separator(views::Separator::HORIZONTAL));
412010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
413010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    layout->StartRow(1, 1);
414010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    layout->AddView(view);
415010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
416010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    return titled_view;
417010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  }
418010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
419effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch private:
420effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  virtual void Layout() OVERRIDE{
421c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    back_button_->SetBounds(
422c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch        0, 0, back_button_->GetPreferredSize().width(), height());
423effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    title_label_->SetBoundsRect(GetContentsBounds());
424effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  }
425effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
426cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual gfx::Size GetPreferredSize() const OVERRIDE{
427010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    int height = std::max(title_label_->GetPreferredSize().height(),
428010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)        back_button_->GetPreferredSize().height());
429effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    return gfx::Size(width(), height);
430effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  }
431effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
432effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  views::ImageButton* back_button_;
433effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  views::Label* title_label_;
434effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
435effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  DISALLOW_COPY_AND_ASSIGN(TitleCard);
436effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch};
437d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
438d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)// ProfileChooserView ---------------------------------------------------------
439d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
4407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// static
4417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)ProfileChooserView* ProfileChooserView::profile_bubble_ = NULL;
442f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)bool ProfileChooserView::close_on_deactivate_for_testing_ = true;
4437d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
4447d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// static
4457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)void ProfileChooserView::ShowBubble(
446cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    profiles::BubbleViewMode view_mode,
4476d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    const signin::ManageAccountsParams& manage_accounts_params,
4487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    views::View* anchor_view,
4497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    views::BubbleBorder::Arrow arrow,
4507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    views::BubbleBorder::BubbleAlignment border_alignment,
4517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    Browser* browser) {
452cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  if (IsShowing())
453cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    return;
454cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
455f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  profile_bubble_ = new ProfileChooserView(anchor_view, arrow, browser,
4566d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)      view_mode, manage_accounts_params.service_type);
4577d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  views::BubbleDelegateView::CreateBubble(profile_bubble_);
458f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  profile_bubble_->set_close_on_deactivate(close_on_deactivate_for_testing_);
4597d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  profile_bubble_->SetAlignment(border_alignment);
4607d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  profile_bubble_->GetWidget()->Show();
4618bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  profile_bubble_->SetArrowPaintType(views::BubbleBorder::PAINT_NONE);
4627d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
4637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
4647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// static
4657d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)bool ProfileChooserView::IsShowing() {
4667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  return profile_bubble_ != NULL;
4677d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
4687d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
4697d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// static
4707d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)void ProfileChooserView::Hide() {
4717d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  if (IsShowing())
4727d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    profile_bubble_->GetWidget()->Close();
4737d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
4747d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
475d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)ProfileChooserView::ProfileChooserView(views::View* anchor_view,
476d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)                                       views::BubbleBorder::Arrow arrow,
477a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch                                       Browser* browser,
478cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                                       profiles::BubbleViewMode view_mode,
479cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                                       signin::GAIAServiceType service_type)
4807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    : BubbleDelegateView(anchor_view, arrow),
481f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      browser_(browser),
482a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      view_mode_(view_mode),
483cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      tutorial_mode_(profiles::TUTORIAL_MODE_NONE),
484cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      gaia_service_type_(service_type) {
485d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  // Reset the default margins inherited from the BubbleDelegateView.
486d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  set_margins(gfx::Insets());
487116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  set_background(views::Background::CreateSolidBackground(
488116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      GetNativeTheme()->GetSystemColor(
489116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch          ui::NativeTheme::kColorId_DialogBackground)));
490f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  ResetView();
49168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
49268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  avatar_menu_.reset(new AvatarMenu(
4937d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)      &g_browser_process->profile_manager()->GetProfileInfoCache(),
49468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      this,
49568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      browser_));
49668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  avatar_menu_->RebuildMenu();
497f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
498f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  ProfileOAuth2TokenService* oauth2_token_service =
499f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      ProfileOAuth2TokenServiceFactory::GetForProfile(browser_->profile());
500f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  if (oauth2_token_service)
501f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    oauth2_token_service->AddObserver(this);
5027d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
5037d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
5047d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)ProfileChooserView::~ProfileChooserView() {
505f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  ProfileOAuth2TokenService* oauth2_token_service =
506f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      ProfileOAuth2TokenServiceFactory::GetForProfile(browser_->profile());
507f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  if (oauth2_token_service)
508f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    oauth2_token_service->RemoveObserver(this);
5097d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
5107d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
511f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void ProfileChooserView::ResetView() {
5125c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  question_mark_button_ = NULL;
513d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  manage_accounts_link_ = NULL;
514d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  signin_current_profile_link_ = NULL;
515d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  users_button_ = NULL;
516effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  lock_button_ = NULL;
5175c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  add_account_link_ = NULL;
518f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  current_profile_photo_ = NULL;
519f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  current_profile_name_ = NULL;
520a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  tutorial_ok_button_ = NULL;
521a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  tutorial_learn_more_link_ = NULL;
522a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  tutorial_enable_new_profile_management_button_ = NULL;
5235c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  tutorial_end_preview_link_ = NULL;
5245c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  tutorial_send_feedback_button_ = NULL;
5255c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  end_preview_and_relaunch_button_ = NULL;
5265c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  end_preview_cancel_button_ = NULL;
527010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  remove_account_button_ = NULL;
528effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  account_removal_cancel_button_ = NULL;
529effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  gaia_signin_cancel_button_ = NULL;
530d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  open_other_profile_indexes_map_.clear();
531cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  delete_account_button_map_.clear();
532cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  reauth_account_button_map_.clear();
533cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  tutorial_mode_ = profiles::TUTORIAL_MODE_NONE;
5347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
5357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
536d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)void ProfileChooserView::Init() {
537cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // If view mode is PROFILE_CHOOSER but there is an auth error, force
538cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // ACCOUNT_MANAGEMENT mode.
539cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  if (view_mode_ == profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER &&
540cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      HasAuthError(browser_->profile())) {
541cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    view_mode_ = profiles::BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT;
542cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  }
543cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
544a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  ShowView(view_mode_, avatar_menu_.get());
5457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
5467d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
54768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)void ProfileChooserView::OnAvatarMenuChanged(
54868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    AvatarMenu* avatar_menu) {
54968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  // Refresh the view with the new menu. We can't just update the local copy
550d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  // as this may have been triggered by a sign out action, in which case
551d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  // the view is being destroyed.
552cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  ShowView(profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER, avatar_menu);
5537d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
5547d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
555f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void ProfileChooserView::OnRefreshTokenAvailable(
556f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    const std::string& account_id) {
557f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Refresh the account management view when a new account is added to the
558f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // profile.
559cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  if (view_mode_ == profiles::BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT ||
560cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      view_mode_ == profiles::BUBBLE_VIEW_MODE_GAIA_SIGNIN ||
561cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      view_mode_ == profiles::BUBBLE_VIEW_MODE_GAIA_ADD_ACCOUNT ||
562cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      view_mode_ == profiles::BUBBLE_VIEW_MODE_GAIA_REAUTH) {
563cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    ShowView(profiles::BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT, avatar_menu_.get());
564f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
565f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
566f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
567f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void ProfileChooserView::OnRefreshTokenRevoked(const std::string& account_id) {
568f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Refresh the account management view when an account is removed from the
569f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // profile.
570cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  if (view_mode_ == profiles::BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT)
571cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    ShowView(profiles::BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT, avatar_menu_.get());
572f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
573f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
574cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void ProfileChooserView::ShowView(profiles::BubbleViewMode view_to_display,
57568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)                                  AvatarMenu* avatar_menu) {
576d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  // The account management view should only be displayed if the active profile
577d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  // is signed in.
578cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  if (view_to_display == profiles::BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT) {
57968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    const AvatarMenu::Item& active_item = avatar_menu->GetItemAt(
58068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        avatar_menu->GetActiveProfileIndex());
581d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    DCHECK(active_item.signed_in);
5827dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  }
5837d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
584116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  if (browser_->profile()->IsSupervised() &&
585116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      (view_to_display == profiles::BUBBLE_VIEW_MODE_GAIA_ADD_ACCOUNT ||
586116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch       view_to_display == profiles::BUBBLE_VIEW_MODE_ACCOUNT_REMOVAL)) {
587116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    LOG(WARNING) << "Supervised user attempted to add/remove account";
588116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    return;
589116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  }
590116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
5915c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  // Records the last tutorial mode.
592cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  profiles::TutorialMode last_tutorial_mode = tutorial_mode_;
593f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  ResetView();
5947d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  RemoveAllChildViews(true);
595f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  view_mode_ = view_to_display;
5967d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
597a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  views::GridLayout* layout;
598a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  views::View* sub_view;
599a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  switch (view_mode_) {
600cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    case profiles::BUBBLE_VIEW_MODE_GAIA_SIGNIN:
601cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    case profiles::BUBBLE_VIEW_MODE_GAIA_ADD_ACCOUNT:
602cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    case profiles::BUBBLE_VIEW_MODE_GAIA_REAUTH:
603a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      layout = CreateSingleColumnLayout(this, kFixedGaiaViewWidth);
604cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      sub_view = CreateGaiaSigninView();
605a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      break;
606cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    case profiles::BUBBLE_VIEW_MODE_ACCOUNT_REMOVAL:
607a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      layout = CreateSingleColumnLayout(this, kFixedAccountRemovalViewWidth);
608a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      sub_view = CreateAccountRemovalView();
609a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      break;
610cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    case profiles::BUBBLE_VIEW_MODE_END_PREVIEW:
6115c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      layout = CreateSingleColumnLayout(this, kFixedEndPreviewViewWidth);
6125c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      sub_view = CreateEndPreviewView();
6135c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      break;
614a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    default:
615a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      layout = CreateSingleColumnLayout(this, kFixedMenuWidth);
6165c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      sub_view = CreateProfileChooserView(avatar_menu, last_tutorial_mode);
617effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  }
6187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  layout->StartRow(1, 0);
619a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  layout->AddView(sub_view);
6207d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  Layout();
6218bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  if (GetBubbleFrameView())
6228bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)    SizeToContents();
6237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
6247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
625d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)void ProfileChooserView::WindowClosing() {
626d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  DCHECK_EQ(profile_bubble_, this);
627d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  profile_bubble_ = NULL;
628d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)}
6297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
630d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)void ProfileChooserView::ButtonPressed(views::Button* sender,
631d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)                                       const ui::Event& event) {
632d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  // Disable button after clicking so that it doesn't get clicked twice and
633d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  // start a second action... which can crash Chrome.  But don't disable if it
634d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  // has no parent (like in tests) because that will also crash.
635d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  if (sender->parent())
636d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    sender->SetEnabled(false);
6377d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
638effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  if (sender == users_button_) {
639c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    profiles::ShowUserManagerMaybeWithTutorial(browser_->profile());
6405c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    // If this is a guest session, also close all the guest browser windows.
6415c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    if (browser_->profile()->IsGuestSession())
6425c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      profiles::CloseGuestProfileWindows();
643effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  } else if (sender == lock_button_) {
644effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    profiles::LockProfile(browser_->profile());
645cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    PostActionPerformed(ProfileMetrics::PROFILE_DESKTOP_MENU_LOCK);
646a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  } else if (sender == tutorial_ok_button_) {
64723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    // If the user manually dismissed the tutorial, never show it again by
64823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    // setting the number of times shown to the maximum plus 1, so that later we
64923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    // could distinguish between the dismiss case and the case when the tutorial
65023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    // is indeed shown for the maximum number of times.
651a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    browser_->profile()->GetPrefs()->SetInteger(
65223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)        prefs::kProfileAvatarTutorialShown, kProfileAvatarTutorialShowMax + 1);
653010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
654010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    ProfileMetrics::LogProfileUpgradeEnrollment(
655010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)        ProfileMetrics::PROFILE_ENROLLMENT_CLOSE_WELCOME_CARD);
656cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    ShowView(profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER, avatar_menu_.get());
657a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  } else if (sender == tutorial_enable_new_profile_management_button_) {
658010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    ProfileMetrics::LogProfileUpgradeEnrollment(
659010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)        ProfileMetrics::PROFILE_ENROLLMENT_ACCEPT_NEW_PROFILE_MGMT);
660f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    profiles::EnableNewProfileManagementPreview(browser_->profile());
661010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  } else if (sender == remove_account_button_) {
662effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    RemoveAccount();
663effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  } else if (sender == account_removal_cancel_button_) {
664effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    account_id_to_remove_.clear();
665cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    ShowView(profiles::BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT, avatar_menu_.get());
666effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  } else if (sender == gaia_signin_cancel_button_) {
667effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    std::string primary_account =
668effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch        SigninManagerFactory::GetForProfile(browser_->profile())->
669effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch        GetAuthenticatedUsername();
670cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    ShowView(primary_account.empty() ?
671cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                 profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER :
672cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                 profiles::BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT,
673effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch             avatar_menu_.get());
6745c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  } else if (sender == question_mark_button_) {
675cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    tutorial_mode_ = profiles::TUTORIAL_MODE_SEND_FEEDBACK;
676cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    ShowView(profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER, avatar_menu_.get());
6775c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  } else if (sender == tutorial_send_feedback_button_) {
678cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    ProfileMetrics::LogProfileUpgradeEnrollment(
679cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        ProfileMetrics::PROFILE_ENROLLMENT_SEND_FEEDBACK);
6805c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    chrome::OpenFeedbackDialog(browser_);
6815c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  } else if (sender == end_preview_and_relaunch_button_) {
682cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    ProfileMetrics::LogProfileUpgradeEnrollment(
683cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        ProfileMetrics::PROFILE_ENROLLMENT_DISABLE_NEW_PROFILE_MGMT);
684f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    profiles::DisableNewProfileManagementPreview(browser_->profile());
6855c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  } else if (sender == end_preview_cancel_button_) {
686cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    tutorial_mode_ = profiles::TUTORIAL_MODE_SEND_FEEDBACK;
687cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    ShowView(profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER, avatar_menu_.get());
688effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  } else if (current_profile_photo_ &&
689effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch             sender == current_profile_photo_->change_photo_button()) {
690effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    avatar_menu_->EditProfile(avatar_menu_->GetActiveProfileIndex());
691cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    PostActionPerformed(ProfileMetrics::PROFILE_DESKTOP_MENU_EDIT_IMAGE);
6925c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  } else if (sender == signin_current_profile_link_) {
693010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    // Only show the inline signin if the new UI flag is flipped. Otherwise,
694010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    // use the tab signin page.
695010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    if (switches::IsNewProfileManagement())
696cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      ShowView(profiles::BUBBLE_VIEW_MODE_GAIA_SIGNIN, avatar_menu_.get());
697010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    else
698010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      chrome::ShowBrowserSignin(browser_, signin::SOURCE_MENU);
699d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  } else {
7005c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    // Either one of the "other profiles", or one of the profile accounts
7015c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    // buttons was pressed.
7025c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    ButtonIndexes::const_iterator profile_match =
703d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        open_other_profile_indexes_map_.find(sender);
7045c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    if (profile_match != open_other_profile_indexes_map_.end()) {
7055c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      avatar_menu_->SwitchToProfile(
7065c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu          profile_match->second,
7075c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu          ui::DispositionFromEventFlags(event.flags()) == NEW_WINDOW,
7085c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu          ProfileMetrics::SWITCH_PROFILE_ICON);
7095c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    } else {
7105c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      // This was a profile accounts button.
7115c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      AccountButtonIndexes::const_iterator account_match =
712cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)          delete_account_button_map_.find(sender);
713cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      if (account_match != delete_account_button_map_.end()) {
714cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        account_id_to_remove_ = account_match->second;
715cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        ShowView(profiles::BUBBLE_VIEW_MODE_ACCOUNT_REMOVAL,
716cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)            avatar_menu_.get());
717cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      } else {
718cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        account_match = reauth_account_button_map_.find(sender);
719cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        DCHECK(account_match != reauth_account_button_map_.end());
720cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        ShowView(profiles::BUBBLE_VIEW_MODE_GAIA_REAUTH, avatar_menu_.get());
721cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      }
7225c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    }
723d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  }
7247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
7257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
726effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochvoid ProfileChooserView::RemoveAccount() {
727effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  DCHECK(!account_id_to_remove_.empty());
7285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  MutableProfileOAuth2TokenService* oauth2_token_service =
7295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      ProfileOAuth2TokenServiceFactory::GetPlatformSpecificForProfile(
730effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      browser_->profile());
731cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  if (oauth2_token_service) {
732effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    oauth2_token_service->RevokeCredentials(account_id_to_remove_);
733cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    PostActionPerformed(ProfileMetrics::PROFILE_DESKTOP_MENU_REMOVE_ACCT);
734cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  }
735effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  account_id_to_remove_.clear();
736effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
737cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  ShowView(profiles::BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT, avatar_menu_.get());
738f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
739f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
740d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)void ProfileChooserView::LinkClicked(views::Link* sender, int event_flags) {
741d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  if (sender == manage_accounts_link_) {
7425c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    // This link can either mean show/hide the account management view,
7435c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    // depending on which view it is displayed. ShowView() will DCHECK if
7445c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    // the account management view is displayed for non signed-in users.
7455c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    ShowView(
746cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        view_mode_ == profiles::BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT ?
747cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)            profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER :
748cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)            profiles::BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT,
7495c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu        avatar_menu_.get());
7505c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  } else if (sender == add_account_link_) {
751cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    ShowView(profiles::BUBBLE_VIEW_MODE_GAIA_ADD_ACCOUNT, avatar_menu_.get());
752cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    PostActionPerformed(ProfileMetrics::PROFILE_DESKTOP_MENU_ADD_ACCT);
753a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  } else if (sender == tutorial_learn_more_link_) {
754010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    ProfileMetrics::LogProfileUpgradeEnrollment(
755010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)        ProfileMetrics::PROFILE_ENROLLMENT_LAUNCH_LEARN_MORE);
756a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    // TODO(guohui): update |learn_more_url| once it is decided.
757a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    const GURL lear_more_url("https://support.google.com/chrome/?hl=en#to");
758a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    chrome::NavigateParams params(
759a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)        browser_->profile(),
760a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)        lear_more_url,
761a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)        content::PAGE_TRANSITION_LINK);
762a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    params.disposition = NEW_FOREGROUND_TAB;
763a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    chrome::Navigate(&params);
764f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  } else {
7655c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    DCHECK(sender == tutorial_end_preview_link_);
766cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    ShowView(profiles::BUBBLE_VIEW_MODE_END_PREVIEW, avatar_menu_.get());
767f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
768f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
769f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
770c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochvoid ProfileChooserView::StyledLabelLinkClicked(
771c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    const gfx::Range& range, int event_flags) {
772c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  chrome::ShowSettings(browser_);
773c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch}
774c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
775f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)bool ProfileChooserView::HandleKeyEvent(views::Textfield* sender,
776f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                                        const ui::KeyEvent& key_event) {
777f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  views::Textfield* name_textfield =
778f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      current_profile_name_->profile_name_textfield();
779f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  DCHECK(sender == name_textfield);
780f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
781f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  if (key_event.key_code() == ui::VKEY_RETURN ||
782f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      key_event.key_code() == ui::VKEY_TAB) {
783f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    // Pressing Tab/Enter commits the new profile name, unless it's empty.
784f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    base::string16 new_profile_name = name_textfield->text();
785f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    if (new_profile_name.empty())
786f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      return true;
787f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
788f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    const AvatarMenu::Item& active_item = avatar_menu_->GetItemAt(
78968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        avatar_menu_->GetActiveProfileIndex());
790f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    Profile* profile = g_browser_process->profile_manager()->GetProfile(
791f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        active_item.profile_path);
792f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    DCHECK(profile);
793f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
794f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    if (profile->IsSupervised())
795f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      return true;
796f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
797f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    profiles::UpdateProfileName(profile, new_profile_name);
798cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    PostActionPerformed(ProfileMetrics::PROFILE_DESKTOP_MENU_EDIT_NAME);
799f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    current_profile_name_->ShowReadOnlyView();
800f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    return true;
801d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  }
802f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  return false;
803d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)}
8047d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
805cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void ProfileChooserView::PostActionPerformed(
806cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    ProfileMetrics::ProfileDesktopMenu action_performed) {
807cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  ProfileMetrics::LogProfileDesktopMenu(action_performed, gaia_service_type_);
808cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  gaia_service_type_ = signin::GAIA_SERVICE_TYPE_NONE;
809cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
810cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
811a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochviews::View* ProfileChooserView::CreateProfileChooserView(
812010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    AvatarMenu* avatar_menu,
813cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    profiles::TutorialMode last_tutorial_mode) {
814a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  // TODO(guohui, noms): the view should be customized based on whether new
815a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  // profile management preview is enabled or not.
816a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
817a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  views::View* view = new views::View();
818a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  views::GridLayout* layout = CreateSingleColumnLayout(view, kFixedMenuWidth);
819a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  // Separate items into active and alternatives.
820a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  Indexes other_profiles;
821a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  views::View* tutorial_view = NULL;
822a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  views::View* current_profile_view = NULL;
823a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  views::View* current_profile_accounts = NULL;
824a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  views::View* option_buttons_view = NULL;
8255c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  bool is_new_profile_management = switches::IsNewProfileManagement();
826a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  for (size_t i = 0; i < avatar_menu->GetNumberOfItems(); ++i) {
827a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    const AvatarMenu::Item& item = avatar_menu->GetItemAt(i);
828a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    if (item.active) {
829a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      option_buttons_view = CreateOptionsView(item.signed_in);
8305c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      current_profile_view = CreateCurrentProfileView(item, false);
831cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      if (view_mode_ == profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER) {
8325c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu        if (is_new_profile_management) {
833cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)          tutorial_view =
834cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)              last_tutorial_mode == profiles::TUTORIAL_MODE_SEND_FEEDBACK ?
8355c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu              CreateSendPreviewFeedbackView() :
8365c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu              CreatePreviewEnabledTutorialView(
837cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                  item, last_tutorial_mode == profiles::TUTORIAL_MODE_WELCOME);
8385c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu        } else {
8395c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu          tutorial_view = CreateNewProfileManagementPreviewView();
8405c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu        }
841a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      } else {
842a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        current_profile_accounts = CreateCurrentProfileAccountsView(item);
843a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      }
844a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    } else {
845a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      other_profiles.push_back(i);
846a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    }
847a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  }
848a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
849a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  if (tutorial_view) {
850010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    // Be sure not to track the tutorial display on View refresh, and only count
851010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    // the preview-promo view, shown when New Profile Management is off.
852010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    if (tutorial_mode_ != last_tutorial_mode && !is_new_profile_management) {
853010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      ProfileMetrics::LogProfileUpgradeEnrollment(
854010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)          ProfileMetrics::PROFILE_ENROLLMENT_SHOW_PREVIEW_PROMO);
855010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    }
856a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    layout->StartRow(1, 0);
857a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    layout->AddView(tutorial_view);
858a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  }
859a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
860a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  if (!current_profile_view) {
861a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    // Guest windows don't have an active profile.
862a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    current_profile_view = CreateGuestProfileView();
863a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    option_buttons_view = CreateOptionsView(false);
864a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  }
865a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
866a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  layout->StartRow(1, 0);
867a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  layout->AddView(current_profile_view);
868a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
869f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  if (view_mode_ != profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER) {
870f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    DCHECK(current_profile_accounts);
871f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    layout->StartRow(0, 0);
872f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    layout->AddView(new views::Separator(views::Separator::HORIZONTAL));
873f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    layout->StartRow(1, 0);
874f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    layout->AddView(current_profile_accounts);
875f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  }
876f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
877f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  if (browser_->profile()->IsSupervised()) {
878cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    layout->StartRow(0, 0);
879cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    layout->AddView(new views::Separator(views::Separator::HORIZONTAL));
880cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    layout->StartRow(1, 0);
881cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    layout->AddView(CreateSupervisedUserDisclaimerView());
882cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  }
883cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
884cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  if (view_mode_ == profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER) {
885a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    layout->StartRow(1, 0);
886a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    if (switches::IsFastUserSwitching())
887a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      layout->AddView(CreateOtherProfilesView(other_profiles));
888a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  }
889a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
890a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  layout->StartRow(0, 0);
891a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  layout->AddView(new views::Separator(views::Separator::HORIZONTAL));
892a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
8935c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  // Option buttons. Only available with the new profile management flag.
894010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  if (option_buttons_view) {
8955c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    layout->StartRow(0, 0);
8965c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    layout->AddView(option_buttons_view);
8975c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  }
898a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
899a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  return view;
900a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch}
901a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
902a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochviews::View* ProfileChooserView::CreatePreviewEnabledTutorialView(
903a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    const AvatarMenu::Item& current_avatar_item,
904a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    bool tutorial_shown) {
905a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  if (!switches::IsNewProfileManagementPreviewEnabled())
906a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    return NULL;
907a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
908a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  Profile* profile = browser_->profile();
90923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  const int show_count = profile->GetPrefs()->GetInteger(
910a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      prefs::kProfileAvatarTutorialShown);
91123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  // Do not show the tutorial if user has dismissed it.
91223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  if (show_count > kProfileAvatarTutorialShowMax)
913a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    return NULL;
914a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
91523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  if (!tutorial_shown) {
91623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    if (show_count == kProfileAvatarTutorialShowMax)
91723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)      return NULL;
91823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    profile->GetPrefs()->SetInteger(
91923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)        prefs::kProfileAvatarTutorialShown, show_count + 1);
92023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  }
921a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
922a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  return CreateTutorialView(
923cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      profiles::TUTORIAL_MODE_WELCOME,
924a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      l10n_util::GetStringUTF16(IDS_PROFILES_PREVIEW_ENABLED_TUTORIAL_TITLE),
925a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      l10n_util::GetStringUTF16(
926a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch          IDS_PROFILES_PREVIEW_ENABLED_TUTORIAL_CONTENT_TEXT),
927a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      l10n_util::GetStringUTF16(IDS_PROFILES_PROFILE_TUTORIAL_LEARN_MORE),
928a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      l10n_util::GetStringUTF16(IDS_PROFILES_TUTORIAL_OK_BUTTON),
929a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      &tutorial_learn_more_link_,
930a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      &tutorial_ok_button_);
931a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch}
932a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
9335c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuviews::View* ProfileChooserView::CreateSendPreviewFeedbackView() {
9345c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  return CreateTutorialView(
935cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      profiles::TUTORIAL_MODE_SEND_FEEDBACK,
9365c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      l10n_util::GetStringUTF16(IDS_PROFILES_FEEDBACK_TUTORIAL_TITLE),
9375c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      l10n_util::GetStringUTF16(
9385c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu          IDS_PROFILES_FEEDBACK_TUTORIAL_CONTENT_TEXT),
9395c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      l10n_util::GetStringUTF16(IDS_PROFILES_END_PREVIEW),
9405c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      l10n_util::GetStringUTF16(IDS_PROFILES_SEND_FEEDBACK_BUTTON),
9415c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      &tutorial_end_preview_link_,
9425c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      &tutorial_send_feedback_button_);
9435c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu}
9445c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
945a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochviews::View* ProfileChooserView::CreateTutorialView(
946cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    profiles::TutorialMode tutorial_mode,
947a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    const base::string16& title_text,
948a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    const base::string16& content_text,
949a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    const base::string16& link_text,
950a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    const base::string16& button_text,
951a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    views::Link** link,
952a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    views::LabelButton** button) {
9535c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  tutorial_mode_ = tutorial_mode;
9545c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
955a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  views::View* view = new views::View();
956c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  view->set_background(views::Background::CreateSolidBackground(
957c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      profiles::kAvatarTutorialBackgroundColor));
958a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  views::GridLayout* layout = CreateSingleColumnLayout(view,
959a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      kFixedMenuWidth - 2 * views::kButtonHEdgeMarginNew);
960a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  layout->SetInsets(views::kButtonVEdgeMarginNew,
961a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                    views::kButtonHEdgeMarginNew,
962a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                    views::kButtonVEdgeMarginNew,
963a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                    views::kButtonHEdgeMarginNew);
964a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
965a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Adds title.
966a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  views::Label* title_label = new views::Label(title_text);
967a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  title_label->SetHorizontalAlignment(gfx::ALIGN_LEFT);
968c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  title_label->SetAutoColorReadabilityEnabled(false);
969c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  title_label->SetEnabledColor(SK_ColorWHITE);
970010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  title_label->SetFontList(ui::ResourceBundle::GetSharedInstance().GetFontList(
971c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      ui::ResourceBundle::MediumFont));
972a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  layout->StartRow(1, 0);
973a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  layout->AddView(title_label);
974a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
975c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  // Adds body content.
976a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  views::Label* content_label = new views::Label(content_text);
977c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  content_label->SetMultiLine(true);
978c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  content_label->SetHorizontalAlignment(gfx::ALIGN_LEFT);
979c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  content_label->SetAutoColorReadabilityEnabled(false);
980c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  content_label->SetEnabledColor(profiles::kAvatarTutorialContentTextColor);
981a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  layout->StartRowWithPadding(1, 0, 0, views::kRelatedControlVerticalSpacing);
982c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  layout->AddView(content_label);
983a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
984c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  // Adds links and buttons.
985a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  views::View* button_row = new views::View();
986a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  views::GridLayout* button_layout = new views::GridLayout(button_row);
987a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  views::ColumnSet* button_columns = button_layout->AddColumnSet(0);
988a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  button_columns->AddColumn(views::GridLayout::LEADING,
989a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      views::GridLayout::CENTER, 0, views::GridLayout::USE_PREF, 0, 0);
990a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  button_columns->AddPaddingColumn(
991a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      1, views::kUnrelatedControlHorizontalSpacing);
992a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  button_columns->AddColumn(views::GridLayout::TRAILING,
993a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      views::GridLayout::CENTER, 0, views::GridLayout::USE_PREF, 0, 0);
994a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  button_row->SetLayoutManager(button_layout);
995a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
996a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  *link = CreateLink(link_text, this);
997a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  (*link)->SetHorizontalAlignment(gfx::ALIGN_LEFT);
998a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  (*link)->SetAutoColorReadabilityEnabled(false);
999a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  (*link)->SetEnabledColor(SK_ColorWHITE);
1000a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  button_layout->StartRow(1, 0);
1001a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  button_layout->AddView(*link);
1002a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1003a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  *button = new views::LabelButton(this, button_text);
1004a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  (*button)->SetHorizontalAlignment(gfx::ALIGN_CENTER);
1005a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  (*button)->SetStyle(views::Button::STYLE_BUTTON);
1006a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  button_layout->AddView(*button);
1007a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1008a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  layout->StartRowWithPadding(1, 0, 0, views::kUnrelatedControlVerticalSpacing);
1009a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  layout->AddView(button_row);
1010a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1011c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  // Adds a padded caret image at the bottom.
1012c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  views::View* padded_caret_view = new views::View();
1013c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  views::GridLayout* padded_caret_layout =
1014c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      new views::GridLayout(padded_caret_view);
1015c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  views::ColumnSet* padded_columns = padded_caret_layout->AddColumnSet(0);
1016c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  padded_columns->AddPaddingColumn(0, views::kButtonHEdgeMarginNew);
1017c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  padded_columns->AddColumn(views::GridLayout::LEADING,
1018c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      views::GridLayout::CENTER, 0, views::GridLayout::USE_PREF, 0, 0);
1019c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  padded_caret_view->SetLayoutManager(padded_caret_layout);
1020c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
1021c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  views::ImageView* caret_image_view = new views::ImageView();
1022c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  ui::ResourceBundle* rb = &ui::ResourceBundle::GetSharedInstance();
1023c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  caret_image_view->SetImage(
1024c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      *rb->GetImageSkiaNamed(IDR_ICON_PROFILES_MENU_CARET));
1025c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
1026c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  padded_caret_layout->StartRow(1, 0);
1027c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  padded_caret_layout->AddView(caret_image_view);
1028c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
1029c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  views::View* view_with_caret = new views::View();
1030c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  views::GridLayout* layout_with_caret =
1031c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      CreateSingleColumnLayout(view_with_caret, kFixedMenuWidth);
1032c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  layout_with_caret->StartRow(1, 0);
1033c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  layout_with_caret->AddView(view);
1034c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  layout_with_caret->StartRow(1, 0);
1035c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  layout_with_caret->AddView(padded_caret_view);
1036c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  return view_with_caret;
1037a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
1038a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1039d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)views::View* ProfileChooserView::CreateCurrentProfileView(
104068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    const AvatarMenu::Item& avatar_item,
1041d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    bool is_guest) {
1042d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  views::View* view = new views::View();
10435c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  int column_width = kFixedMenuWidth - 2 * views::kButtonHEdgeMarginNew;
10445c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  views::GridLayout* layout = CreateSingleColumnLayout(view, column_width);
104568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  layout->SetInsets(views::kButtonVEdgeMarginNew,
1046d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)                    views::kButtonHEdgeMarginNew,
1047010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                    views::kUnrelatedControlVerticalSpacing,
104868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)                    views::kButtonHEdgeMarginNew);
10497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
10505c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  // Profile icon, centered.
1051f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  int x_offset = (column_width - kLargeImageSide) / 2;
10525c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  current_profile_photo_ = new EditableProfilePhoto(
10535c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      this, avatar_item.icon, !is_guest,
10545c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      gfx::Rect(x_offset, 0, kLargeImageSide, kLargeImageSide));
1055f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  SizedContainer* profile_icon_container =
1056f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      new SizedContainer(gfx::Size(column_width, kLargeImageSide));
1057f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  profile_icon_container->AddChildView(current_profile_photo_);
1058d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
10595c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  if (switches::IsNewProfileManagementPreviewEnabled()) {
10605c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    question_mark_button_ = new views::ImageButton(this);
10615c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    question_mark_button_->SetImageAlignment(
10625c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu        views::ImageButton::ALIGN_LEFT, views::ImageButton::ALIGN_MIDDLE);
10635c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    ui::ResourceBundle* rb = &ui::ResourceBundle::GetSharedInstance();
10645c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    question_mark_button_->SetImage(views::ImageButton::STATE_NORMAL,
1065010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)        rb->GetImageSkiaNamed(IDR_ICON_PROFILES_MENU_QUESTION_STABLE));
1066010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    question_mark_button_->SetImage(views::ImageButton::STATE_HOVERED,
1067010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)        rb->GetImageSkiaNamed(IDR_ICON_PROFILES_MENU_QUESTION_HOVER));
1068010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    question_mark_button_->SetImage(views::ImageButton::STATE_PRESSED,
1069010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)        rb->GetImageSkiaNamed(IDR_ICON_PROFILES_MENU_QUESTION_SELECT));
10705c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    gfx::Size preferred_size = question_mark_button_->GetPreferredSize();
10715c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    question_mark_button_->SetBounds(
10725c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu        0, 0, preferred_size.width(), preferred_size.height());
1073f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    profile_icon_container->AddChildView(question_mark_button_);
1074d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  }
10757d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
1076f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  if (browser_->profile()->IsSupervised()) {
107746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    views::ImageView* supervised_icon = new views::ImageView();
107846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    ui::ResourceBundle* rb = &ui::ResourceBundle::GetSharedInstance();
107946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    supervised_icon->SetImage(
108046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)        rb->GetImageSkiaNamed(IDR_ICON_PROFILES_MENU_SUPERVISED));
108146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    gfx::Size preferred_size = supervised_icon->GetPreferredSize();
108246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    gfx::Rect parent_bounds = current_profile_photo_->bounds();
108346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    supervised_icon->SetBounds(
108446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)        parent_bounds.right() - preferred_size.width(),
108546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)        parent_bounds.bottom() - preferred_size.height(),
108646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)        preferred_size.width(),
108746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)        preferred_size.height());
1088f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    profile_icon_container->AddChildView(supervised_icon);
108946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  }
109046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
10915c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  layout->StartRow(1, 0);
1092f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  layout->AddView(profile_icon_container);
10937d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
10945c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  // Profile name, centered.
1095f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  bool editing_allowed = !is_guest && !browser_->profile()->IsSupervised();
1096a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  current_profile_name_ = new EditableProfileName(
1097116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      this,
1098116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      profiles::GetAvatarNameForProfile(browser_->profile()->GetPath()),
1099116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      editing_allowed);
1100d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  layout->StartRow(1, 0);
1101f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  layout->AddView(current_profile_name_);
11023551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
11035c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  if (is_guest)
11045c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    return view;
11053551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
11065c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  // The available links depend on the type of profile that is active.
11075c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  if (avatar_item.signed_in) {
1108cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    layout->StartRow(1, 0);
11095c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    if (switches::IsNewProfileManagement()) {
11105c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      base::string16 link_title = l10n_util::GetStringUTF16(
1111cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)          view_mode_ == profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER ?
11125c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu              IDS_PROFILES_PROFILE_MANAGE_ACCOUNTS_BUTTON :
11135c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu              IDS_PROFILES_PROFILE_HIDE_MANAGE_ACCOUNTS_BUTTON);
11145c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      manage_accounts_link_ = CreateLink(link_title, this);
11155c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      manage_accounts_link_->SetHorizontalAlignment(gfx::ALIGN_CENTER);
11165c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      layout->AddView(manage_accounts_link_);
11175c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    } else {
11185c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      views::Label* email_label = new views::Label(avatar_item.sync_state);
11195c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      email_label->SetHorizontalAlignment(gfx::ALIGN_CENTER);
11205c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      layout->AddView(email_label);
11215c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    }
11225c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  } else {
1123cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    SigninManagerBase* signin_manager =
1124cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        SigninManagerFactory::GetForProfile(
1125cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)            browser_->profile()->GetOriginalProfile());
1126cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    if (signin_manager->IsSigninAllowed()) {
1127cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      signin_current_profile_link_ = new views::BlueButton(
1128cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        this, l10n_util::GetStringFUTF16(IDS_SYNC_START_SYNC_BUTTON_LABEL,
1129cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)            l10n_util::GetStringUTF16(IDS_SHORT_PRODUCT_NAME)));
1130cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      layout->StartRow(1, 0);
1131cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      layout->AddView(signin_current_profile_link_);
1132cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    }
11335c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  }
11345c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
11353551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  return view;
11363551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}
11373551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
11383551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)views::View* ProfileChooserView::CreateGuestProfileView() {
1139d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  gfx::Image guest_icon =
11400529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch      ui::ResourceBundle::GetSharedInstance().GetImageNamed(
11410529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch          profiles::GetPlaceholderAvatarIconResourceID());
114268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  AvatarMenu::Item guest_avatar_item(0, 0, guest_icon);
11433551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  guest_avatar_item.active = true;
11443551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  guest_avatar_item.name = l10n_util::GetStringUTF16(
1145d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)      IDS_PROFILES_GUEST_PROFILE_NAME);
11463551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  guest_avatar_item.signed_in = false;
11473551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
1148d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  return CreateCurrentProfileView(guest_avatar_item, true);
11497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
11507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
11517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)views::View* ProfileChooserView::CreateOtherProfilesView(
11527d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)    const Indexes& avatars_to_show) {
11537d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  views::View* view = new views::View();
11545c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  views::GridLayout* layout = CreateSingleColumnLayout(view, kFixedMenuWidth);
11555c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
115668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  int num_avatars_to_show = avatars_to_show.size();
115768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  for (int i = 0; i < num_avatars_to_show; ++i) {
115868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    const size_t index = avatars_to_show[i];
115968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    const AvatarMenu::Item& item = avatar_menu_->GetItemAt(index);
1160f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    const int kSmallImageSide = 32;
1161d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
11620529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    gfx::Image image = profiles::GetSizedAvatarIcon(
1163010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)        item.icon, true, kSmallImageSide, kSmallImageSide);
1164d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
11655c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    views::LabelButton* button = new BackgroundColorHoverButton(
11665c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu        this,
11675c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu        item.name,
11685c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu        *image.ToImageSkia(),
11695c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu        *image.ToImageSkia());
11705c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    button->set_min_size(gfx::Size(
11715c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu        0, kButtonHeight + views::kRelatedControlVerticalSpacing));
11725c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
1173d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    open_other_profile_indexes_map_[button] = index;
1174d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
1175d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    layout->StartRow(1, 0);
11765c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    layout->AddView(new views::Separator(views::Separator::HORIZONTAL));
11775c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    layout->StartRow(1, 0);
1178d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    layout->AddView(button);
11797d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  }
11807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
11817d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  return view;
11827d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
11837d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
1184effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochviews::View* ProfileChooserView::CreateOptionsView(bool enable_lock) {
1185010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  if (!switches::IsNewProfileManagement())
1186010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    return NULL;
1187010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
1188d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  views::View* view = new views::View();
1189effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  views::GridLayout* layout;
1190effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
1191effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // Only signed-in users have the ability to lock.
1192effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  if (enable_lock) {
1193effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    layout = new views::GridLayout(view);
1194effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    views::ColumnSet* columns = layout->AddColumnSet(0);
1195effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    int width_of_lock_button =
1196effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch        2 * views::kUnrelatedControlLargeHorizontalSpacing + 12;
1197effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    int width_of_users_button = kFixedMenuWidth - width_of_lock_button;
1198effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    columns->AddColumn(views::GridLayout::FILL, views::GridLayout::FILL, 0,
1199effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                       views::GridLayout::FIXED, width_of_users_button,
1200effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                       width_of_users_button);
1201effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    columns->AddColumn(views::GridLayout::FILL, views::GridLayout::FILL, 0,
1202effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                       views::GridLayout::FIXED, width_of_lock_button,
1203effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                       width_of_lock_button);
1204effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    view->SetLayoutManager(layout);
1205effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  } else {
1206effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    layout = CreateSingleColumnLayout(view, kFixedMenuWidth);
1207effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  }
1208effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
12095c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  base::string16 text = browser_->profile()->IsGuestSession() ?
12105c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      l10n_util::GetStringUTF16(IDS_PROFILES_EXIT_GUEST) :
12115c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      l10n_util::GetStringFUTF16(IDS_PROFILES_NOT_YOU_BUTTON,
1212116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch          profiles::GetAvatarNameForProfile(
1213116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch              browser_->profile()->GetPath()));
1214d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  ui::ResourceBundle* rb = &ui::ResourceBundle::GetSharedInstance();
121568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  users_button_ = new BackgroundColorHoverButton(
121668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      this,
12175c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      text,
1218effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      *rb->GetImageSkiaNamed(IDR_ICON_PROFILES_MENU_AVATAR),
1219effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      *rb->GetImageSkiaNamed(IDR_ICON_PROFILES_MENU_AVATAR));
12205c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  users_button_->set_min_size(gfx::Size(
12215c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      0, kButtonHeight + views::kRelatedControlVerticalSpacing));
1222effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
1223d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  layout->StartRow(1, 0);
1224d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  layout->AddView(users_button_);
1225a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch
1226effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  if (enable_lock) {
1227effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    lock_button_ = new BackgroundColorHoverButton(
1228effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch        this,
1229effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch        base::string16(),
1230effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch        *rb->GetImageSkiaNamed(IDR_ICON_PROFILES_MENU_LOCK),
1231effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch        *rb->GetImageSkiaNamed(IDR_ICON_PROFILES_MENU_LOCK));
12325c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu    lock_button_->set_min_size(gfx::Size(
12335c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      0, kButtonHeight + views::kRelatedControlVerticalSpacing));
1234effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    layout->AddView(lock_button_);
1235effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  }
1236d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  return view;
1237d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)}
12387dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
1239cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)views::View* ProfileChooserView::CreateSupervisedUserDisclaimerView() {
1240cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  views::View* view = new views::View();
1241cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  views::GridLayout* layout = CreateSingleColumnLayout(
1242cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      view, kFixedMenuWidth - 2 * views::kButtonHEdgeMarginNew);
1243cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  layout->SetInsets(views::kRelatedControlVerticalSpacing,
1244cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                    views::kButtonHEdgeMarginNew,
1245cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                    views::kRelatedControlVerticalSpacing,
1246cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                    views::kButtonHEdgeMarginNew);
1247cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  views::Label* disclaimer = new views::Label(
1248f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      avatar_menu_->GetSupervisedUserInformation());
1249cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  disclaimer->SetMultiLine(true);
1250cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  disclaimer->SetHorizontalAlignment(gfx::ALIGN_LEFT);
1251cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  ui::ResourceBundle* rb = &ui::ResourceBundle::GetSharedInstance();
1252cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  disclaimer->SetFontList(rb->GetFontList(ui::ResourceBundle::SmallFont));
1253cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  layout->StartRow(1, 0);
1254cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  layout->AddView(disclaimer);
1255cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
1256cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  return view;
1257cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
1258cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
1259d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)views::View* ProfileChooserView::CreateCurrentProfileAccountsView(
126068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    const AvatarMenu::Item& avatar_item) {
1261d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  DCHECK(avatar_item.signed_in);
1262a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch  views::View* view = new views::View();
12635c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  view->set_background(views::Background::CreateSolidBackground(
12645c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      profiles::kAvatarBubbleAccountsBackgroundColor));
12655c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  views::GridLayout* layout = CreateSingleColumnLayout(view, kFixedMenuWidth);
12667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
12671e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  Profile* profile = browser_->profile();
1268a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  std::string primary_account =
1269a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      SigninManagerFactory::GetForProfile(profile)->GetAuthenticatedUsername();
1270a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  DCHECK(!primary_account.empty());
12715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  std::vector<std::string>accounts =
12725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      profiles::GetSecondaryAccountsForProfile(profile, primary_account);
12737d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
1274cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Get state of authentication error, if any.
1275cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  std::string error_account_id = GetAuthErrorAccountId(profile);
1276cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
12775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // The primary account should always be listed first.
12785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // TODO(rogerta): we still need to further differentiate the primary account
12795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // from the others in the UI, so more work is likely required here:
12805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // crbug.com/311124.
1281cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  CreateAccountButton(layout, primary_account, true,
1282cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                      error_account_id == primary_account, kFixedMenuWidth);
12835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  for (size_t i = 0; i < accounts.size(); ++i)
1284cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    CreateAccountButton(layout, accounts[i], false,
1285cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                        error_account_id == accounts[i], kFixedMenuWidth);
12867d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
1287116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  if (!profile->IsSupervised()) {
1288116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing);
1289116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1290116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    add_account_link_ = CreateLink(l10n_util::GetStringFUTF16(
1291116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        IDS_PROFILES_PROFILE_ADD_ACCOUNT_BUTTON, avatar_item.name), this);
1292116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    add_account_link_->SetBorder(views::Border::CreateEmptyBorder(
1293116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        0, views::kButtonVEdgeMarginNew,
1294116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        views::kRelatedControlVerticalSpacing, 0));
1295116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    layout->StartRow(1, 0);
1296116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    layout->AddView(add_account_link_);
1297116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  }
1298116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
12997d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  return view;
13007d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
1301a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
1302a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)void ProfileChooserView::CreateAccountButton(views::GridLayout* layout,
1303a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                                             const std::string& account,
13045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                             bool is_primary_account,
1305cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                                             bool reauth_required,
13065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                             int width) {
1307a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  ui::ResourceBundle* rb = &ui::ResourceBundle::GetSharedInstance();
1308cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  const gfx::ImageSkia* delete_default_image =
13095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      rb->GetImageNamed(IDR_CLOSE_1).ToImageSkia();
1310cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  const int kDeleteButtonWidth = delete_default_image->width();
13116d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  const gfx::ImageSkia warning_default_image = reauth_required ?
13126d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)      *rb->GetImageNamed(IDR_ICON_PROFILES_ACCOUNT_BUTTON_ERROR).ToImageSkia() :
13136d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)      gfx::ImageSkia();
1314cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  const int kWarningButtonWidth = reauth_required ?
13156d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)      warning_default_image.width() + views::kRelatedButtonHSpacing : 0;
13166d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  int available_width = width - 2 * views::kButtonHEdgeMarginNew
13176d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)      - kDeleteButtonWidth - kWarningButtonWidth;
13185c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  views::LabelButton* email_button = new BackgroundColorHoverButton(
13196d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)      reauth_required ? this : NULL,
132046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)      gfx::ElideText(base::UTF8ToUTF16(account), gfx::FontList(),
132146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)                     available_width, gfx::ELIDE_EMAIL),
13226d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)      warning_default_image,
13236d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)      warning_default_image);
1324a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  layout->StartRow(1, 0);
1325a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  layout->AddView(email_button);
1326a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
13276d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  if (reauth_required)
13286d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    reauth_account_button_map_[email_button] = account;
1329116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1330116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // Delete button.
1331116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  if (!browser_->profile()->IsSupervised()) {
1332116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    views::ImageButton* delete_button = new views::ImageButton(this);
1333116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    delete_button->SetImageAlignment(views::ImageButton::ALIGN_RIGHT,
1334116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                                     views::ImageButton::ALIGN_MIDDLE);
1335116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    delete_button->SetImage(views::ImageButton::STATE_NORMAL,
1336116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                            delete_default_image);
1337116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    delete_button->SetImage(views::ImageButton::STATE_HOVERED,
1338116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                            rb->GetImageSkiaNamed(IDR_CLOSE_1_H));
1339116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    delete_button->SetImage(views::ImageButton::STATE_PRESSED,
1340116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                            rb->GetImageSkiaNamed(IDR_CLOSE_1_P));
1341116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    delete_button->SetBounds(
1342116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        width - views::kButtonHEdgeMarginNew - kDeleteButtonWidth,
1343116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch        0, kDeleteButtonWidth, kButtonHeight);
1344116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1345116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    email_button->set_notify_enter_exit_on_child(true);
1346116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    email_button->AddChildView(delete_button);
1347116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
1348116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    // Save the original email address, as the button text could be elided.
1349116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    delete_account_button_map_[delete_button] = account;
1350116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  }
1351a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
1352effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
1353cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)views::View* ProfileChooserView::CreateGaiaSigninView() {
1354cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  GURL url;
1355cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  int message_id;
1356cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
1357cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  switch (view_mode_) {
1358cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    case profiles::BUBBLE_VIEW_MODE_GAIA_SIGNIN:
1359cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      url = signin::GetPromoURL(signin::SOURCE_AVATAR_BUBBLE_SIGN_IN,
1360cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                                false /* auto_close */,
1361cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                                true /* is_constrained */);
1362cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      message_id = IDS_PROFILES_GAIA_SIGNIN_TITLE;
1363cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      break;
1364cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    case profiles::BUBBLE_VIEW_MODE_GAIA_ADD_ACCOUNT:
1365cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      url = signin::GetPromoURL(signin::SOURCE_AVATAR_BUBBLE_ADD_ACCOUNT,
1366cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                                false /* auto_close */,
1367cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                                true /* is_constrained */);
1368cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      message_id = IDS_PROFILES_GAIA_ADD_ACCOUNT_TITLE;
1369cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      break;
1370cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    case profiles::BUBBLE_VIEW_MODE_GAIA_REAUTH: {
1371cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      DCHECK(HasAuthError(browser_->profile()));
1372cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      url = signin::GetReauthURL(browser_->profile(),
1373cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                                 GetAuthErrorUsername(browser_->profile()));
1374cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      message_id = IDS_PROFILES_GAIA_REAUTH_TITLE;
1375cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      break;
1376cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    }
1377cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    default:
1378cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      NOTREACHED() << "Called with invalid mode=" << view_mode_;
1379cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      return NULL;
1380cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  }
1381cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
1382effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // Adds Gaia signin webview
1383effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  Profile* profile = browser_->profile();
1384effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  views::WebView* web_view = new views::WebView(profile);
1385effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  web_view->LoadInitialURL(url);
1386effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  web_view->SetPreferredSize(
1387effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      gfx::Size(kFixedGaiaViewWidth, kFixedGaiaViewHeight));
1388effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
1389cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  TitleCard* title_card = new TitleCard(message_id, this,
1390cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                                        &gaia_signin_cancel_button_);
1391010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  return TitleCard::AddPaddedTitleCard(
1392010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      web_view, title_card, kFixedGaiaViewWidth);
1393effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}
1394effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
1395effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochviews::View* ProfileChooserView::CreateAccountRemovalView() {
1396effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  views::View* view = new views::View();
1397effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  views::GridLayout* layout = CreateSingleColumnLayout(
1398effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      view, kFixedAccountRemovalViewWidth - 2 * views::kButtonHEdgeMarginNew);
1399010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  layout->SetInsets(0,
1400effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                    views::kButtonHEdgeMarginNew,
1401effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                    views::kButtonVEdgeMarginNew,
1402effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                    views::kButtonHEdgeMarginNew);
1403effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
1404effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  const std::string& primary_account = SigninManagerFactory::GetForProfile(
1405effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      browser_->profile())->GetAuthenticatedUsername();
1406effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  bool is_primary_account = primary_account == account_id_to_remove_;
1407effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
1408effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // Adds main text.
1409c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  layout->StartRowWithPadding(1, 0, 0, views::kUnrelatedControlVerticalSpacing);
1410effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  ui::ResourceBundle* rb = &ui::ResourceBundle::GetSharedInstance();
1411effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  const gfx::FontList& small_font_list =
1412effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      rb->GetFontList(ui::ResourceBundle::SmallFont);
1413c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
1414c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  if (is_primary_account) {
1415c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    std::vector<size_t> offsets;
1416c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    const base::string16 settings_text =
1417c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch        l10n_util::GetStringUTF16(IDS_PROFILES_SETTINGS_LINK);
14180529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    const base::string16 primary_account_removal_text =
1419c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch        l10n_util::GetStringFUTF16(IDS_PROFILES_PRIMARY_ACCOUNT_REMOVAL_TEXT,
1420c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch            base::UTF8ToUTF16(account_id_to_remove_), settings_text, &offsets);
1421c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    views::StyledLabel* primary_account_removal_label =
14220529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch        new views::StyledLabel(primary_account_removal_text, this);
1423c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    primary_account_removal_label->AddStyleRange(
1424c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch        gfx::Range(offsets[1], offsets[1] + settings_text.size()),
1425c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch        views::StyledLabel::RangeStyleInfo::CreateForLink());
1426c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    primary_account_removal_label->SetBaseFontList(small_font_list);
1427c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    layout->AddView(primary_account_removal_label);
1428c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  } else {
1429c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    views::Label* content_label = new views::Label(
1430c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch        l10n_util::GetStringUTF16(IDS_PROFILES_ACCOUNT_REMOVAL_TEXT));
1431c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    content_label->SetMultiLine(true);
1432c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    content_label->SetHorizontalAlignment(gfx::ALIGN_LEFT);
1433c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    content_label->SetFontList(small_font_list);
1434c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    layout->AddView(content_label);
1435c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  }
1436effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
1437effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // Adds button.
1438effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  if (!is_primary_account) {
1439010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    remove_account_button_ = new views::BlueButton(
1440effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch        this, l10n_util::GetStringUTF16(IDS_PROFILES_ACCOUNT_REMOVAL_BUTTON));
1441010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    remove_account_button_->SetHorizontalAlignment(
1442effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch        gfx::ALIGN_CENTER);
1443effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    layout->StartRowWithPadding(
1444effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch        1, 0, 0, views::kUnrelatedControlVerticalSpacing);
1445010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)    layout->AddView(remove_account_button_);
1446effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  } else {
1447effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    layout->AddPaddingRow(0, views::kUnrelatedControlVerticalSpacing);
1448effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  }
1449effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
1450010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  TitleCard* title_card = new TitleCard(IDS_PROFILES_ACCOUNT_REMOVAL_TITLE,
1451010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      this, &account_removal_cancel_button_);
1452010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  return TitleCard::AddPaddedTitleCard(view, title_card,
1453010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      kFixedAccountRemovalViewWidth);
1454effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}
1455a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch
1456a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochviews::View* ProfileChooserView::CreateNewProfileManagementPreviewView() {
1457a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  return CreateTutorialView(
1458cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      profiles::TUTORIAL_MODE_ENABLE_PREVIEW,
1459a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      l10n_util::GetStringUTF16(IDS_PROFILES_PREVIEW_TUTORIAL_TITLE),
1460a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      l10n_util::GetStringUTF16(IDS_PROFILES_PREVIEW_TUTORIAL_CONTENT_TEXT),
1461a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      l10n_util::GetStringUTF16(IDS_PROFILES_PROFILE_TUTORIAL_LEARN_MORE),
1462a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      l10n_util::GetStringUTF16(IDS_PROFILES_TUTORIAL_TRY_BUTTON),
1463a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      &tutorial_learn_more_link_,
1464a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      &tutorial_enable_new_profile_management_button_);
1465a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch}
14665c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
14675c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuviews::View* ProfileChooserView::CreateEndPreviewView() {
14685c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  views::View* view = new views::View();
14695c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  views::GridLayout* layout = CreateSingleColumnLayout(
14705c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      view, kFixedAccountRemovalViewWidth - 2 * views::kButtonHEdgeMarginNew);
1471010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  layout->SetInsets(0,
14725c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu                    views::kButtonHEdgeMarginNew,
14735c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu                    views::kButtonVEdgeMarginNew,
14745c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu                    views::kButtonHEdgeMarginNew);
14755c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
14765c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  // Adds main text.
14775c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  views::Label* content_label = new views::Label(
14785c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      l10n_util::GetStringUTF16(IDS_PROFILES_END_PREVIEW_TEXT));
14795c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  content_label->SetMultiLine(true);
14805c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  content_label->SetHorizontalAlignment(gfx::ALIGN_LEFT);
14815c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  ui::ResourceBundle* rb = &ui::ResourceBundle::GetSharedInstance();
14825c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  const gfx::FontList& small_font_list =
14835c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      rb->GetFontList(ui::ResourceBundle::SmallFont);
14845c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  content_label->SetFontList(small_font_list);
14855c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  layout->StartRowWithPadding(1, 0, 0, views::kUnrelatedControlVerticalSpacing);
14865c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  layout->AddView(content_label);
14875c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
14885c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  // Adds button.
14895c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  end_preview_and_relaunch_button_ = new views::BlueButton(
14905c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      this, l10n_util::GetStringUTF16(IDS_PROFILES_END_PREVIEW_AND_RELAUNCH));
14915c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  end_preview_and_relaunch_button_->SetHorizontalAlignment(
14925c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      gfx::ALIGN_CENTER);
14935c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  layout->StartRowWithPadding(
14945c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu      1, 0, 0, views::kUnrelatedControlVerticalSpacing);
14955c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  layout->AddView(end_preview_and_relaunch_button_);
14965c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
1497010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  TitleCard* title_card = new TitleCard(
1498010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      IDS_PROFILES_END_PREVIEW, this, &end_preview_cancel_button_);
1499010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  return TitleCard::AddPaddedTitleCard(
1500010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      view, title_card, kFixedAccountRemovalViewWidth);
15015c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu}
15025c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
1503