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