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