profile_chooser_view.cc revision 5f1c94371a64b3196d4be9466099bb892df9b88e
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" 105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/browser/first_run/first_run.h" 11effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "chrome/browser/lifetime/application_lifetime.h" 125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/browser/prefs/incognito_mode_prefs.h" 13c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "chrome/browser/profiles/profile_avatar_icon_util.h" 140529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "chrome/browser/profiles/profile_info_cache.h" 157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "chrome/browser/profiles/profile_manager.h" 16010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "chrome/browser/profiles/profile_metrics.h" 17d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "chrome/browser/profiles/profile_window.h" 18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/profiles/profiles_state.h" 191e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "chrome/browser/signin/profile_oauth2_token_service_factory.h" 20cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/signin/signin_header_helper.h" 21a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "chrome/browser/signin/signin_manager_factory.h" 22d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "chrome/browser/signin/signin_promo.h" 2368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "chrome/browser/ui/browser.h" 245c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "chrome/browser/ui/browser_commands.h" 250f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "chrome/browser/ui/browser_dialogs.h" 26c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "chrome/browser/ui/chrome_pages.h" 27d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "chrome/browser/ui/singleton_tabs.h" 28c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "chrome/browser/ui/views/profiles/user_manager_view.h" 295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/browser/ui/webui/signin/login_ui_service.h" 305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/browser/ui/webui/signin/login_ui_service_factory.h" 31a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "chrome/common/pref_names.h" 324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "chrome/common/url_constants.h" 33effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "components/signin/core/browser/mutable_profile_oauth2_token_service.h" 34effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "components/signin/core/browser/profile_oauth2_token_service.h" 35cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "components/signin/core/browser/signin_error_controller.h" 36e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include "components/signin/core/browser/signin_manager.h" 370529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "components/signin/core/common/profile_management_switches.h" 38d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "grit/chromium_strings.h" 397d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "grit/generated_resources.h" 403551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "grit/theme_resources.h" 4168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "third_party/skia/include/core/SkColor.h" 427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "ui/base/l10n/l10n_util.h" 437d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "ui/base/resource/resource_bundle.h" 445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ui/gfx/canvas.h" 457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "ui/gfx/image/image.h" 467d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "ui/gfx/image/image_skia.h" 47cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "ui/gfx/path.h" 48cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "ui/gfx/skia_util.h" 49f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "ui/gfx/text_elider.h" 505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ui/native_theme/native_theme.h" 51d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "ui/views/controls/button/blue_button.h" 52effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "ui/views/controls/button/image_button.h" 535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ui/views/controls/button/label_button.h" 54d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "ui/views/controls/button/menu_button.h" 557d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "ui/views/controls/label.h" 567d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "ui/views/controls/link.h" 577d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "ui/views/controls/separator.h" 58c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "ui/views/controls/styled_label.h" 59f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "ui/views/controls/textfield/textfield.h" 604e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "ui/views/controls/webview/webview.h" 617d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "ui/views/layout/grid_layout.h" 627d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "ui/views/layout/layout_constants.h" 637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "ui/views/widget/widget.h" 647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 65d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)namespace { 66d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 6768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// Helpers -------------------------------------------------------------------- 6868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)const int kFixedMenuWidth = 250; 705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)const int kButtonHeight = 32; 71effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochconst int kFixedGaiaViewHeight = 400; 72effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochconst int kFixedGaiaViewWidth = 360; 73effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochconst int kFixedAccountRemovalViewWidth = 280; 745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)const int kFixedSwitchUserViewWidth = 280; 755c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuconst int kLargeImageSide = 88; 76d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// The maximum number of times to show the welcome tutorial for an upgrade user. 785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)const int kUpgradeWelcomeTutorialShowMax = 1; 795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 80d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)// Creates a GridLayout with a single column. This ensures that all the child 81d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)// views added get auto-expanded to fill the full width of the bubble. 825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)views::GridLayout* CreateSingleColumnLayout(views::View* view, int width) { 83d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) views::GridLayout* layout = new views::GridLayout(view); 84d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) view->SetLayoutManager(layout); 85d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 86d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) views::ColumnSet* columns = layout->AddColumnSet(0); 875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) columns->AddColumn(views::GridLayout::FILL, views::GridLayout::FILL, 0, 885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) views::GridLayout::FIXED, width, width); 89d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return layout; 90d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)} 91d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 92f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)views::Link* CreateLink(const base::string16& link_text, 93d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) views::LinkListener* listener) { 94d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) views::Link* link_button = new views::Link(link_text); 95d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) link_button->SetHorizontalAlignment(gfx::ALIGN_LEFT); 96d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) link_button->SetUnderline(false); 97d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) link_button->set_listener(listener); 98d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return link_button; 99d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)} 100d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 1015c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liugfx::ImageSkia CreateSquarePlaceholderImage(int size) { 1025c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu SkBitmap bitmap; 103116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bitmap.allocPixels(SkImageInfo::MakeA8(size, size)); 1045c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu bitmap.eraseARGB(0, 0, 0, 0); 1055c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return gfx::ImageSkia::CreateFrom1xBitmap(bitmap); 1065c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 10768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 108cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)bool HasAuthError(Profile* profile) { 109cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const SigninErrorController* error = 110cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) profiles::GetSigninErrorController(profile); 111cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return error && error->HasError(); 112cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 113cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 114cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)std::string GetAuthErrorAccountId(Profile* profile) { 115cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const SigninErrorController* error = 116cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) profiles::GetSigninErrorController(profile); 117cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (!error) 118cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return std::string(); 119cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 120cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return error->error_account_id(); 121cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 122cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 123cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)std::string GetAuthErrorUsername(Profile* profile) { 124cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const SigninErrorController* error = 125cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) profiles::GetSigninErrorController(profile); 126cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (!error) 127cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return std::string(); 128cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 129cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return error->error_username(); 130cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 131cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 132f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// BackgroundColorHoverButton ------------------------------------------------- 13368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 134f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// A custom button that allows for setting a background color when hovered over. 1355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class BackgroundColorHoverButton : public views::LabelButton { 13668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) public: 137f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) BackgroundColorHoverButton(views::ButtonListener* listener, 138f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const base::string16& text, 1395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const gfx::ImageSkia& icon) 1405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) : views::LabelButton(listener, text) { 1415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) SetBorder(views::Border::CreateEmptyBorder( 1425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 0, views::kButtonHEdgeMarginNew, 0, views::kButtonHEdgeMarginNew)); 1435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) SetMinSize(gfx::Size(0, 1445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) kButtonHeight + views::kRelatedControlVerticalSpacing)); 1455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) SetImage(STATE_NORMAL, icon); 1465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 1475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual ~BackgroundColorHoverButton() {} 14968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 15068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) private: 1515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // views::LabelButton: 1525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE { 1535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if ((state() == STATE_PRESSED) || 1545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) (state() == STATE_HOVERED) || 1555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) HasFocus()) { 1565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) canvas->DrawColor(GetNativeTheme()->GetSystemColor( 1575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ui::NativeTheme::kColorId_ButtonHoverBackgroundColor)); 1585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 1595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) LabelButton::OnPaint(canvas); 1605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 16168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 162f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(BackgroundColorHoverButton); 16368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)}; 16468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 165f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// SizedContainer ------------------------------------------------- 166f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 167f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// A simple container view that takes an explicit preferred size. 168f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class SizedContainer : public views::View { 169f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) public: 170f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) explicit SizedContainer(const gfx::Size& preferred_size) 171f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) : preferred_size_(preferred_size) {} 172f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 173f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual gfx::Size GetPreferredSize() const OVERRIDE { 174f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return preferred_size_; 175f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 176f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 177f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) private: 178f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) gfx::Size preferred_size_; 179f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}; 180f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 181f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} // namespace 182f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// RightAlignedIconLabelButton ------------------------------------------------- 1845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// A custom LabelButton that has a centered text and right aligned icon. 1865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class RightAlignedIconLabelButton : public views::LabelButton { 1875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) public: 1885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) RightAlignedIconLabelButton(views::ButtonListener* listener, 1895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const base::string16& text) 1905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) : views::LabelButton(listener, text) { 1915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 1925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) protected: 1945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual void Layout() OVERRIDE { 1955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // This layout trick keeps the text left-aligned and the icon right-aligned. 1965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) SetHorizontalAlignment(gfx::ALIGN_RIGHT); 1975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) views::LabelButton::Layout(); 1985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) label()->SetHorizontalAlignment(gfx::ALIGN_CENTER); 1995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 2005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 2015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(RightAlignedIconLabelButton); 2025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}; 203f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 204f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// EditableProfilePhoto ------------------------------------------------- 205f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 206f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// A custom Image control that shows a "change" button when moused over. 207f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class EditableProfilePhoto : public views::ImageView { 20868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) public: 209a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EditableProfilePhoto(views::ButtonListener* listener, 210a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const gfx::Image& icon, 2115c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu bool is_editing_allowed, 2125c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const gfx::Rect& bounds) 213a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) : views::ImageView(), 214a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) change_photo_button_(NULL) { 2150529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch gfx::Image image = profiles::GetSizedAvatarIcon( 216010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) icon, true, kLargeImageSide, kLargeImageSide); 217f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SetImage(image.ToImageSkia()); 2185c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu SetBoundsRect(bounds); 219a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 220cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Calculate the circular mask that will be used to display the photo. 221f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) circular_mask_.addCircle(SkIntToScalar(bounds.width() / 2), 222f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SkIntToScalar(bounds.height() / 2), 223cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) SkIntToScalar(bounds.width() / 2)); 224010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 225a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) if (!is_editing_allowed) 226a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return; 227a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 228f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) set_notify_enter_exit_on_child(true); 229f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 230f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Button overlay that appears when hovering over the image. 231010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) change_photo_button_ = new views::LabelButton(listener, base::string16()); 2325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) change_photo_button_->SetHorizontalAlignment(gfx::ALIGN_CENTER); 2335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) change_photo_button_->SetBorder(views::Border::NullBorder()); 234f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 235010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const SkColor kBackgroundColor = SkColorSetARGB(65, 255, 255, 255); 236f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) change_photo_button_->set_background( 237f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) views::Background::CreateSolidBackground(kBackgroundColor)); 238010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) change_photo_button_->SetImage(views::LabelButton::STATE_NORMAL, 239cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) *ui::ResourceBundle::GetSharedInstance().GetImageSkiaNamed( 240cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) IDR_ICON_PROFILES_EDIT_CAMERA)); 241010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 242f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) change_photo_button_->SetSize(bounds.size()); 243f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) change_photo_button_->SetVisible(false); 244f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddChildView(change_photo_button_); 245f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 246f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 247cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE { 248cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Display the profile picture as a circle. 249cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) canvas->ClipPath(circular_mask_, true); 250cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) views::ImageView::OnPaint(canvas); 251cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 252cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 253cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual void PaintChildren(gfx::Canvas* canvas, 254f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const views::CullSet& cull_set) OVERRIDE { 255cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Display any children (the "change photo" overlay) as a circle. 256cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) canvas->ClipPath(circular_mask_, true); 257cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) View::PaintChildren(canvas, cull_set); 258cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 259cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 2605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) views::LabelButton* change_photo_button() { return change_photo_button_; } 26168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 26268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) private: 263f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // views::View: 26468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) virtual void OnMouseEntered(const ui::MouseEvent& event) OVERRIDE { 265a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) if (change_photo_button_) 266a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) change_photo_button_->SetVisible(true); 267f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 26868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 26968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) virtual void OnMouseExited(const ui::MouseEvent& event) OVERRIDE { 270a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) if (change_photo_button_) 271a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) change_photo_button_->SetVisible(false); 272f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 27368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 274cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) gfx::Path circular_mask_; 275cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 276a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Button that is shown when hovering over the image view. Can be NULL if 277a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // the photo isn't allowed to be edited (e.g. for guest profiles). 2785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) views::LabelButton* change_photo_button_; 279f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 280f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(EditableProfilePhoto); 28168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)}; 28268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 283f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// EditableProfileName ------------------------------------------------- 284f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 285f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// A custom text control that turns into a textfield for editing when clicked. 2865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class EditableProfileName : public RightAlignedIconLabelButton, 287f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) public views::ButtonListener { 288f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) public: 289f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EditableProfileName(views::TextfieldController* controller, 290a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16& text, 291a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) bool is_editing_allowed) 2925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) : RightAlignedIconLabelButton(this, text), 293a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) profile_name_textfield_(NULL) { 294f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ui::ResourceBundle* rb = &ui::ResourceBundle::GetSharedInstance(); 2955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const gfx::FontList& medium_font_list = 2965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) rb->GetFontList(ui::ResourceBundle::MediumFont); 2975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) SetFontList(medium_font_list); 2985c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu SetHorizontalAlignment(gfx::ALIGN_CENTER); 299a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 300cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (!is_editing_allowed) { 301cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) SetBorder(views::Border::CreateEmptyBorder(2, 0, 2, 0)); 302a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return; 303cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 304f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 3055c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Show an "edit" pencil icon when hovering over. In the default state, 3065c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // we need to create an empty placeholder of the correct size, so that 3075c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // the text doesn't jump around when the hovered icon appears. 3085c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu gfx::ImageSkia hover_image = 3095c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu *rb->GetImageSkiaNamed(IDR_ICON_PROFILES_EDIT_HOVER); 3105c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu SetImage(STATE_NORMAL, CreateSquarePlaceholderImage(hover_image.width())); 3115c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu SetImage(STATE_HOVERED, hover_image); 3125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) SetImage(STATE_PRESSED, 3135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) *rb->GetImageSkiaNamed(IDR_ICON_PROFILES_EDIT_PRESSED)); 3145c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // To center the text, we need to offest it by the width of the icon we 3155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // are adding and its padding. We need to also add a small top/bottom 3165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // padding to account for the textfield's border. 3175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const int kIconTextLabelButtonSpacing = 5; 3185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) SetBorder(views::Border::CreateEmptyBorder( 3195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 2, hover_image.width() + kIconTextLabelButtonSpacing, 2, 0)); 320f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 321f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Textfield that overlaps the button. 322f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) profile_name_textfield_ = new views::Textfield(); 3235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) profile_name_textfield_->set_controller(controller); 3245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) profile_name_textfield_->SetFontList(medium_font_list); 3255c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu profile_name_textfield_->SetHorizontalAlignment(gfx::ALIGN_CENTER); 3265c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 327f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) profile_name_textfield_->SetVisible(false); 328f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AddChildView(profile_name_textfield_); 329f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 330f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 331f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) views::Textfield* profile_name_textfield() { 332f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return profile_name_textfield_; 333f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 334f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 3355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Hide the editable textfield to show the profile name button instead. 336f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void ShowReadOnlyView() { 337a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) if (profile_name_textfield_) 338a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) profile_name_textfield_->SetVisible(false); 339f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 340f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 341f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) private: 342f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // views::ButtonListener: 343f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual void ButtonPressed(views::Button* sender, 344f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const ui::Event& event) OVERRIDE { 345a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) if (profile_name_textfield_) { 346a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) profile_name_textfield_->SetVisible(true); 3475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) profile_name_textfield_->SetText(GetText()); 348a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) profile_name_textfield_->SelectAll(false); 349a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) profile_name_textfield_->RequestFocus(); 350a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } 351f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 352f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 3535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // views::LabelButton: 354f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual bool OnKeyReleased(const ui::KeyEvent& event) OVERRIDE { 355f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Override CustomButton's implementation, which presses the button when 356f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // you press space and clicks it when you release space, as the space can be 357f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // part of the new profile name typed in the textfield. 358f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return false; 359f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 360f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 361f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual void Layout() OVERRIDE { 362a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) if (profile_name_textfield_) 363a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) profile_name_textfield_->SetBounds(0, 0, width(), height()); 3645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) RightAlignedIconLabelButton::Layout(); 365f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 366f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 3675c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Textfield that is shown when editing the profile name. Can be NULL if 368a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // the profile name isn't allowed to be edited (e.g. for guest profiles). 369f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) views::Textfield* profile_name_textfield_; 370f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 371f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(EditableProfileName); 372f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}; 373d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 374effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// A title card with one back button right aligned and one label center aligned. 375effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochclass TitleCard : public views::View { 376effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch public: 3775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) TitleCard(const base::string16& message, views::ButtonListener* listener, 3785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) views::ImageButton** back_button) { 379effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch back_button_ = new views::ImageButton(listener); 380effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch back_button_->SetImageAlignment(views::ImageButton::ALIGN_LEFT, 381effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch views::ImageButton::ALIGN_MIDDLE); 382effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ui::ResourceBundle* rb = &ui::ResourceBundle::GetSharedInstance(); 383effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch back_button_->SetImage(views::ImageButton::STATE_NORMAL, 384effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch rb->GetImageSkiaNamed(IDR_BACK)); 385effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch back_button_->SetImage(views::ImageButton::STATE_HOVERED, 386effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch rb->GetImageSkiaNamed(IDR_BACK_H)); 387effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch back_button_->SetImage(views::ImageButton::STATE_PRESSED, 388effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch rb->GetImageSkiaNamed(IDR_BACK_P)); 389effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch back_button_->SetImage(views::ImageButton::STATE_DISABLED, 390effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch rb->GetImageSkiaNamed(IDR_BACK_D)); 391effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch *back_button = back_button_; 392effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 3935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) title_label_ = new views::Label(message); 394effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch title_label_->SetHorizontalAlignment(gfx::ALIGN_CENTER); 395effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch const gfx::FontList& medium_font_list = 396effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch rb->GetFontList(ui::ResourceBundle::MediumFont); 397effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch title_label_->SetFontList(medium_font_list); 398effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 399effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch AddChildView(back_button_); 400effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch AddChildView(title_label_); 401effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 402effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 403010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // Creates a new view that has the |title_card| with padding at the top, an 404010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // edge-to-edge separator below, and the specified |view| at the bottom. 405010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) static views::View* AddPaddedTitleCard(views::View* view, 406010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) TitleCard* title_card, 407010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) int width) { 408010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) views::View* titled_view = new views::View(); 409010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) views::GridLayout* layout = new views::GridLayout(titled_view); 410010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) titled_view->SetLayoutManager(layout); 411010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 412010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // Column set 0 is a single column layout with horizontal padding at left 413010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // and right, and column set 1 is a single column layout with no padding. 414010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) views::ColumnSet* columns = layout->AddColumnSet(0); 415010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) columns->AddPaddingColumn(1, views::kButtonHEdgeMarginNew); 416010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) int available_width = width - 2 * views::kButtonHEdgeMarginNew; 417010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) columns->AddColumn(views::GridLayout::FILL, views::GridLayout::FILL, 0, 418010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) views::GridLayout::FIXED, available_width, available_width); 419010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) columns->AddPaddingColumn(1, views::kButtonHEdgeMarginNew); 420010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) layout->AddColumnSet(1)->AddColumn(views::GridLayout::FILL, 421010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) views::GridLayout::FILL, 0,views::GridLayout::FIXED, width, width); 422010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 423010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) layout->StartRowWithPadding(1, 0, 0, views::kButtonVEdgeMarginNew); 424010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) layout->AddView(title_card); 425010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) layout->StartRowWithPadding(1, 1, 0, views::kRelatedControlVerticalSpacing); 426010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) layout->AddView(new views::Separator(views::Separator::HORIZONTAL)); 427010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 428010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) layout->StartRow(1, 1); 429010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) layout->AddView(view); 430010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 431010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return titled_view; 432010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } 433010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 434effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch private: 435effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual void Layout() OVERRIDE{ 436c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch back_button_->SetBounds( 437c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 0, 0, back_button_->GetPreferredSize().width(), height()); 438effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch title_label_->SetBoundsRect(GetContentsBounds()); 439effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 440effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 441cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual gfx::Size GetPreferredSize() const OVERRIDE{ 442010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) int height = std::max(title_label_->GetPreferredSize().height(), 443010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) back_button_->GetPreferredSize().height()); 444effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return gfx::Size(width(), height); 445effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 446effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 447effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch views::ImageButton* back_button_; 448effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch views::Label* title_label_; 449effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 450effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch DISALLOW_COPY_AND_ASSIGN(TitleCard); 451effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}; 452d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 453d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)// ProfileChooserView --------------------------------------------------------- 454d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 4557d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// static 4567d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)ProfileChooserView* ProfileChooserView::profile_bubble_ = NULL; 457f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)bool ProfileChooserView::close_on_deactivate_for_testing_ = true; 4587d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 4597d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// static 4607d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)void ProfileChooserView::ShowBubble( 461cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) profiles::BubbleViewMode view_mode, 4626d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) const signin::ManageAccountsParams& manage_accounts_params, 4637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) views::View* anchor_view, 4647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) views::BubbleBorder::Arrow arrow, 4657d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) views::BubbleBorder::BubbleAlignment border_alignment, 4667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) Browser* browser) { 467cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (IsShowing()) 468cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return; 469cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 470f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) profile_bubble_ = new ProfileChooserView(anchor_view, arrow, browser, 4716d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) view_mode, manage_accounts_params.service_type); 4727d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) views::BubbleDelegateView::CreateBubble(profile_bubble_); 473f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) profile_bubble_->set_close_on_deactivate(close_on_deactivate_for_testing_); 4747d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) profile_bubble_->SetAlignment(border_alignment); 4757d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) profile_bubble_->GetWidget()->Show(); 4768bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) profile_bubble_->SetArrowPaintType(views::BubbleBorder::PAINT_NONE); 4777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 4787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 4797d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// static 4807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)bool ProfileChooserView::IsShowing() { 4817d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return profile_bubble_ != NULL; 4827d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 4837d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 4847d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// static 4857d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)void ProfileChooserView::Hide() { 4867d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (IsShowing()) 4877d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) profile_bubble_->GetWidget()->Close(); 4887d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 4897d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 490d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)ProfileChooserView::ProfileChooserView(views::View* anchor_view, 491d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) views::BubbleBorder::Arrow arrow, 492a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch Browser* browser, 493cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) profiles::BubbleViewMode view_mode, 494cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) signin::GAIAServiceType service_type) 4957d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) : BubbleDelegateView(anchor_view, arrow), 496f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) browser_(browser), 497a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch view_mode_(view_mode), 498cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) tutorial_mode_(profiles::TUTORIAL_MODE_NONE), 499cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) gaia_service_type_(service_type) { 500d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // Reset the default margins inherited from the BubbleDelegateView. 5015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Add a small top/bottom inset so that the bubble's rounded corners show up. 5025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) set_margins(gfx::Insets(1, 0, 1, 0)); 503116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch set_background(views::Background::CreateSolidBackground( 504116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch GetNativeTheme()->GetSystemColor( 505116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ui::NativeTheme::kColorId_DialogBackground))); 506f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ResetView(); 50768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 50868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) avatar_menu_.reset(new AvatarMenu( 5097d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) &g_browser_process->profile_manager()->GetProfileInfoCache(), 51068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) this, 51168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) browser_)); 51268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) avatar_menu_->RebuildMenu(); 513f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 514f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ProfileOAuth2TokenService* oauth2_token_service = 515f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ProfileOAuth2TokenServiceFactory::GetForProfile(browser_->profile()); 516f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (oauth2_token_service) 517f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) oauth2_token_service->AddObserver(this); 5187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 5197d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 5207d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)ProfileChooserView::~ProfileChooserView() { 521f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ProfileOAuth2TokenService* oauth2_token_service = 522f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ProfileOAuth2TokenServiceFactory::GetForProfile(browser_->profile()); 523f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (oauth2_token_service) 524f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) oauth2_token_service->RemoveObserver(this); 5257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 5267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 527f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void ProfileChooserView::ResetView() { 5285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) open_other_profile_indexes_map_.clear(); 5295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) delete_account_button_map_.clear(); 5305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) reauth_account_button_map_.clear(); 531d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) manage_accounts_link_ = NULL; 532d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) signin_current_profile_link_ = NULL; 5335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) auth_error_email_button_ = NULL; 5345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) current_profile_photo_ = NULL; 5355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) current_profile_name_ = NULL; 536d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) users_button_ = NULL; 5375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) go_incognito_button_ = NULL; 538effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch lock_button_ = NULL; 5395c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu add_account_link_ = NULL; 5405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) gaia_signin_cancel_button_ = NULL; 541010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) remove_account_button_ = NULL; 542effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch account_removal_cancel_button_ = NULL; 5435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) add_person_button_ = NULL; 5445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) disconnect_button_ = NULL; 5455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) switch_user_cancel_button_ = NULL; 5465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) tutorial_sync_settings_ok_button_ = NULL; 5475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) tutorial_sync_settings_link_ = NULL; 5485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) tutorial_see_whats_new_button_ = NULL; 5495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) tutorial_not_you_link_ = NULL; 550cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) tutorial_mode_ = profiles::TUTORIAL_MODE_NONE; 5517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 5527d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 553d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)void ProfileChooserView::Init() { 554cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // If view mode is PROFILE_CHOOSER but there is an auth error, force 555cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // ACCOUNT_MANAGEMENT mode. 556cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (view_mode_ == profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER && 5575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) HasAuthError(browser_->profile()) && 5585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) switches::IsEnableAccountConsistency() && 5595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) avatar_menu_->GetItemAt(avatar_menu_->GetActiveProfileIndex()). 5605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) signed_in) { 561cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) view_mode_ = profiles::BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT; 562cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 563cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 564a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch ShowView(view_mode_, avatar_menu_.get()); 5657d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 5667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 56768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)void ProfileChooserView::OnAvatarMenuChanged( 56868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) AvatarMenu* avatar_menu) { 5695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Do not refresh the avatar menu if the user is on a signin related view. 5705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (view_mode_ == profiles::BUBBLE_VIEW_MODE_GAIA_SIGNIN || 5715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) view_mode_ == profiles::BUBBLE_VIEW_MODE_GAIA_ADD_ACCOUNT || 5725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) view_mode_ == profiles::BUBBLE_VIEW_MODE_GAIA_REAUTH) { 5735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return; 5745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 5755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 57668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // Refresh the view with the new menu. We can't just update the local copy 577d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // as this may have been triggered by a sign out action, in which case 578d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // the view is being destroyed. 579cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ShowView(profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER, avatar_menu); 5807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 5817d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 582f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void ProfileChooserView::OnRefreshTokenAvailable( 583f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const std::string& account_id) { 584cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (view_mode_ == profiles::BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT || 585cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) view_mode_ == profiles::BUBBLE_VIEW_MODE_GAIA_SIGNIN || 586cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) view_mode_ == profiles::BUBBLE_VIEW_MODE_GAIA_ADD_ACCOUNT || 587cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) view_mode_ == profiles::BUBBLE_VIEW_MODE_GAIA_REAUTH) { 5885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (view_mode_ == profiles::BUBBLE_VIEW_MODE_GAIA_SIGNIN) 5895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) tutorial_mode_ = profiles::TUTORIAL_MODE_CONFIRM_SIGNIN; 5905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // The account management UI is only available through the 5915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // --enable-account-consistency flag. 5925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ShowView(switches::IsEnableAccountConsistency() ? 5935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) profiles::BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT : 5945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER, avatar_menu_.get()); 595f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 596f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 597f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 598f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void ProfileChooserView::OnRefreshTokenRevoked(const std::string& account_id) { 599f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Refresh the account management view when an account is removed from the 600f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // profile. 601cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (view_mode_ == profiles::BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT) 602cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ShowView(profiles::BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT, avatar_menu_.get()); 603f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 604f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 605cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void ProfileChooserView::ShowView(profiles::BubbleViewMode view_to_display, 60668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) AvatarMenu* avatar_menu) { 607d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // The account management view should only be displayed if the active profile 608d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // is signed in. 6095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const AvatarMenu::Item& active_item = avatar_menu->GetItemAt( 6105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) avatar_menu->GetActiveProfileIndex()); 611cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (view_to_display == profiles::BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT) { 6125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) DCHECK(switches::IsEnableAccountConsistency()); 613d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) DCHECK(active_item.signed_in); 6147dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 6157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 616116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (browser_->profile()->IsSupervised() && 617116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch (view_to_display == profiles::BUBBLE_VIEW_MODE_GAIA_ADD_ACCOUNT || 618116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch view_to_display == profiles::BUBBLE_VIEW_MODE_ACCOUNT_REMOVAL)) { 619116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch LOG(WARNING) << "Supervised user attempted to add/remove account"; 620116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return; 621116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 622116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 6235c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Records the last tutorial mode. 624cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) profiles::TutorialMode last_tutorial_mode = tutorial_mode_; 625f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ResetView(); 6267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) RemoveAllChildViews(true); 627f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) view_mode_ = view_to_display; 6287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 629a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch views::GridLayout* layout; 630a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch views::View* sub_view; 631a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch switch (view_mode_) { 632cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) case profiles::BUBBLE_VIEW_MODE_GAIA_SIGNIN: 633cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) case profiles::BUBBLE_VIEW_MODE_GAIA_ADD_ACCOUNT: 634cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) case profiles::BUBBLE_VIEW_MODE_GAIA_REAUTH: 635a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch layout = CreateSingleColumnLayout(this, kFixedGaiaViewWidth); 636cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) sub_view = CreateGaiaSigninView(); 637a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch break; 638cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) case profiles::BUBBLE_VIEW_MODE_ACCOUNT_REMOVAL: 639a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch layout = CreateSingleColumnLayout(this, kFixedAccountRemovalViewWidth); 640a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch sub_view = CreateAccountRemovalView(); 641a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch break; 6425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) case profiles::BUBBLE_VIEW_MODE_SWITCH_USER: 6435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) layout = CreateSingleColumnLayout(this, kFixedSwitchUserViewWidth); 6445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) sub_view = CreateSwitchUserView(active_item); 6455c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu break; 646a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch default: 647a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch layout = CreateSingleColumnLayout(this, kFixedMenuWidth); 6485c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu sub_view = CreateProfileChooserView(avatar_menu, last_tutorial_mode); 649effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 6507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) layout->StartRow(1, 0); 651a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch layout->AddView(sub_view); 6527d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) Layout(); 6538bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) if (GetBubbleFrameView()) 6548bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) SizeToContents(); 6557d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 6567d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 657d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)void ProfileChooserView::WindowClosing() { 658d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) DCHECK_EQ(profile_bubble_, this); 659d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) profile_bubble_ = NULL; 6605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 6615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (tutorial_mode_ == profiles::TUTORIAL_MODE_CONFIRM_SIGNIN) { 6625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) LoginUIServiceFactory::GetForProfile(browser_->profile())-> 6635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) SyncConfirmationUIClosed(false /* configure_sync_first */); 6645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 665d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)} 6667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 667d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)void ProfileChooserView::ButtonPressed(views::Button* sender, 668d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) const ui::Event& event) { 669d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // Disable button after clicking so that it doesn't get clicked twice and 670d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // start a second action... which can crash Chrome. But don't disable if it 671d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // has no parent (like in tests) because that will also crash. 672d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) if (sender->parent()) 673d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) sender->SetEnabled(false); 6747d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 675effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (sender == users_button_) { 676c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch profiles::ShowUserManagerMaybeWithTutorial(browser_->profile()); 6775c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // If this is a guest session, also close all the guest browser windows. 6785c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu if (browser_->profile()->IsGuestSession()) 6795c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu profiles::CloseGuestProfileWindows(); 6805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } else if (sender == go_incognito_button_) { 6815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) DCHECK(ShouldShowGoIncognito()); 6825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) chrome::NewIncognitoWindow(browser_); 683effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } else if (sender == lock_button_) { 684effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch profiles::LockProfile(browser_->profile()); 685cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) PostActionPerformed(ProfileMetrics::PROFILE_DESKTOP_MENU_LOCK); 6865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } else if (sender == auth_error_email_button_) { 6875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ShowView(profiles::BUBBLE_VIEW_MODE_GAIA_REAUTH, avatar_menu_.get()); 6885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } else if (sender == tutorial_sync_settings_ok_button_) { 6895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) LoginUIServiceFactory::GetForProfile(browser_->profile())-> 6905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) SyncConfirmationUIClosed(false /* configure_sync_first */); 6915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) tutorial_mode_ = profiles::TUTORIAL_MODE_NONE; 692cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ShowView(profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER, avatar_menu_.get()); 6935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } else if (sender == tutorial_see_whats_new_button_) { 6945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) chrome::ShowUserManagerWithTutorial( 6955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) profiles::USER_MANAGER_TUTORIAL_OVERVIEW); 696010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } else if (sender == remove_account_button_) { 697effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch RemoveAccount(); 698effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } else if (sender == account_removal_cancel_button_) { 699effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch account_id_to_remove_.clear(); 700cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ShowView(profiles::BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT, avatar_menu_.get()); 701effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } else if (sender == gaia_signin_cancel_button_) { 702effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch std::string primary_account = 703effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch SigninManagerFactory::GetForProfile(browser_->profile())-> 704effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch GetAuthenticatedUsername(); 7055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // The account management view is only available with the 7065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // --enable-account-consistency flag. 7075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) bool account_management_available = !primary_account.empty() && 7085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) switches::IsEnableAccountConsistency(); 7095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ShowView(account_management_available ? 7105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) profiles::BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT : 7115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER, avatar_menu_.get()); 712effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } else if (current_profile_photo_ && 713effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch sender == current_profile_photo_->change_photo_button()) { 714effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch avatar_menu_->EditProfile(avatar_menu_->GetActiveProfileIndex()); 715cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) PostActionPerformed(ProfileMetrics::PROFILE_DESKTOP_MENU_EDIT_IMAGE); 7165c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu } else if (sender == signin_current_profile_link_) { 7175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ShowView(profiles::BUBBLE_VIEW_MODE_GAIA_SIGNIN, avatar_menu_.get()); 7185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } else if (sender == add_person_button_) { 7195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) profiles::ShowUserManagerMaybeWithTutorial(browser_->profile()); 7205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } else if (sender == disconnect_button_) { 7215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) chrome::ShowSettings(browser_); 7225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } else if (sender == switch_user_cancel_button_) { 7235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ShowView(profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER, avatar_menu_.get()); 724d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) } else { 7255c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Either one of the "other profiles", or one of the profile accounts 7265c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // buttons was pressed. 7275c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ButtonIndexes::const_iterator profile_match = 728d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) open_other_profile_indexes_map_.find(sender); 7295c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu if (profile_match != open_other_profile_indexes_map_.end()) { 7305c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu avatar_menu_->SwitchToProfile( 7315c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu profile_match->second, 7325c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ui::DispositionFromEventFlags(event.flags()) == NEW_WINDOW, 7335c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ProfileMetrics::SWITCH_PROFILE_ICON); 7345c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu } else { 7355c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // This was a profile accounts button. 7365c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu AccountButtonIndexes::const_iterator account_match = 737cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) delete_account_button_map_.find(sender); 738cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (account_match != delete_account_button_map_.end()) { 739cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) account_id_to_remove_ = account_match->second; 740cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ShowView(profiles::BUBBLE_VIEW_MODE_ACCOUNT_REMOVAL, 741cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) avatar_menu_.get()); 742cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } else { 743cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) account_match = reauth_account_button_map_.find(sender); 744cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DCHECK(account_match != reauth_account_button_map_.end()); 745cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ShowView(profiles::BUBBLE_VIEW_MODE_GAIA_REAUTH, avatar_menu_.get()); 746cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 7475c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu } 748d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) } 7497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 7507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 751effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochvoid ProfileChooserView::RemoveAccount() { 752effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch DCHECK(!account_id_to_remove_.empty()); 7535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) MutableProfileOAuth2TokenService* oauth2_token_service = 7545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ProfileOAuth2TokenServiceFactory::GetPlatformSpecificForProfile( 755effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch browser_->profile()); 756cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (oauth2_token_service) { 757effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch oauth2_token_service->RevokeCredentials(account_id_to_remove_); 758cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) PostActionPerformed(ProfileMetrics::PROFILE_DESKTOP_MENU_REMOVE_ACCT); 759cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 760effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch account_id_to_remove_.clear(); 761effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 762cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ShowView(profiles::BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT, avatar_menu_.get()); 763f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 764f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 765d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)void ProfileChooserView::LinkClicked(views::Link* sender, int event_flags) { 766d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) if (sender == manage_accounts_link_) { 7675c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // This link can either mean show/hide the account management view, 7685c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // depending on which view it is displayed. ShowView() will DCHECK if 7695c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // the account management view is displayed for non signed-in users. 7705c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ShowView( 771cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) view_mode_ == profiles::BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT ? 772cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER : 773cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) profiles::BUBBLE_VIEW_MODE_ACCOUNT_MANAGEMENT, 7745c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu avatar_menu_.get()); 7755c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu } else if (sender == add_account_link_) { 776cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ShowView(profiles::BUBBLE_VIEW_MODE_GAIA_ADD_ACCOUNT, avatar_menu_.get()); 777cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) PostActionPerformed(ProfileMetrics::PROFILE_DESKTOP_MENU_ADD_ACCT); 7785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } else if (sender == tutorial_sync_settings_link_) { 7795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) LoginUIServiceFactory::GetForProfile(browser_->profile())-> 7805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) SyncConfirmationUIClosed(true /* configure_sync_first */); 7815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) tutorial_mode_ = profiles::TUTORIAL_MODE_NONE; 782f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } else { 7835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) DCHECK(sender == tutorial_not_you_link_); 7845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ShowView(profiles::BUBBLE_VIEW_MODE_SWITCH_USER, avatar_menu_.get()); 785f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 786f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 787f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 788c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochvoid ProfileChooserView::StyledLabelLinkClicked( 789c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch const gfx::Range& range, int event_flags) { 790c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch chrome::ShowSettings(browser_); 791c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} 792c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 793f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)bool ProfileChooserView::HandleKeyEvent(views::Textfield* sender, 794f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const ui::KeyEvent& key_event) { 795f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) views::Textfield* name_textfield = 796f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) current_profile_name_->profile_name_textfield(); 797f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DCHECK(sender == name_textfield); 798f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 799f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (key_event.key_code() == ui::VKEY_RETURN || 800f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) key_event.key_code() == ui::VKEY_TAB) { 801f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Pressing Tab/Enter commits the new profile name, unless it's empty. 802f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::string16 new_profile_name = name_textfield->text(); 803f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (new_profile_name.empty()) 804f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return true; 805f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 806f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const AvatarMenu::Item& active_item = avatar_menu_->GetItemAt( 80768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) avatar_menu_->GetActiveProfileIndex()); 808f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Profile* profile = g_browser_process->profile_manager()->GetProfile( 809f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) active_item.profile_path); 810f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DCHECK(profile); 811f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 812f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (profile->IsSupervised()) 813f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return true; 814f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 815f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) profiles::UpdateProfileName(profile, new_profile_name); 816cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) PostActionPerformed(ProfileMetrics::PROFILE_DESKTOP_MENU_EDIT_NAME); 817f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) current_profile_name_->ShowReadOnlyView(); 818f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return true; 819d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) } 820f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return false; 821d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)} 8227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 823a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochviews::View* ProfileChooserView::CreateProfileChooserView( 824010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) AvatarMenu* avatar_menu, 825cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) profiles::TutorialMode last_tutorial_mode) { 826a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // TODO(guohui, noms): the view should be customized based on whether new 827a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // profile management preview is enabled or not. 828a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 829a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch views::View* view = new views::View(); 830a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch views::GridLayout* layout = CreateSingleColumnLayout(view, kFixedMenuWidth); 831a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // Separate items into active and alternatives. 832a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch Indexes other_profiles; 833a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch views::View* tutorial_view = NULL; 834a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch views::View* current_profile_view = NULL; 835a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch views::View* current_profile_accounts = NULL; 836a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch views::View* option_buttons_view = NULL; 837a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch for (size_t i = 0; i < avatar_menu->GetNumberOfItems(); ++i) { 838a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch const AvatarMenu::Item& item = avatar_menu->GetItemAt(i); 839a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch if (item.active) { 8405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) option_buttons_view = CreateOptionsView( 8415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) switches::IsNewProfileManagement() && item.signed_in); 8425c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu current_profile_view = CreateCurrentProfileView(item, false); 843cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (view_mode_ == profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER) { 8445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) switch (last_tutorial_mode) { 8455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) case profiles::TUTORIAL_MODE_NONE: 8465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) case profiles::TUTORIAL_MODE_WELCOME_UPGRADE: 8475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) tutorial_view = CreateWelcomeUpgradeTutorialViewIfNeeded( 8485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) last_tutorial_mode == profiles::TUTORIAL_MODE_WELCOME_UPGRADE, 8495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) item); 8505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) break; 8515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) case profiles::TUTORIAL_MODE_CONFIRM_SIGNIN: 8525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) tutorial_view = CreateSigninConfirmationView(); 8535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) break; 8545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) case profiles::TUTORIAL_MODE_SHOW_ERROR: 8555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // TODO(guohui): not implemented yet. 8565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) NOTREACHED(); 8575c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu } 858a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch } else { 859a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch current_profile_accounts = CreateCurrentProfileAccountsView(item); 860a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch } 861a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch } else { 862a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch other_profiles.push_back(i); 863a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch } 864a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch } 865a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 866a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch if (tutorial_view) { 8675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // TODO(mlerman): update UMA stats for the new tutorial. 868a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch layout->StartRow(1, 0); 869a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch layout->AddView(tutorial_view); 870a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch } 871a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 872a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch if (!current_profile_view) { 873a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch // Guest windows don't have an active profile. 874a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch current_profile_view = CreateGuestProfileView(); 875a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch option_buttons_view = CreateOptionsView(false); 876a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch } 877a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 878a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch layout->StartRow(1, 0); 879a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch layout->AddView(current_profile_view); 880a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 881f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (view_mode_ != profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER) { 882f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) DCHECK(current_profile_accounts); 883f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) layout->StartRow(0, 0); 884f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) layout->AddView(new views::Separator(views::Separator::HORIZONTAL)); 885f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) layout->StartRow(1, 0); 886f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) layout->AddView(current_profile_accounts); 887f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 888f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 889f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (browser_->profile()->IsSupervised()) { 890cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) layout->StartRow(0, 0); 891cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) layout->AddView(new views::Separator(views::Separator::HORIZONTAL)); 892cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) layout->StartRow(1, 0); 893cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) layout->AddView(CreateSupervisedUserDisclaimerView()); 894cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 895cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 896cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (view_mode_ == profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER) { 897a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch layout->StartRow(1, 0); 898a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch if (switches::IsFastUserSwitching()) 899a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch layout->AddView(CreateOtherProfilesView(other_profiles)); 900a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch } 901a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 902a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch layout->StartRow(0, 0); 903a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch layout->AddView(new views::Separator(views::Separator::HORIZONTAL)); 904a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 905010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) if (option_buttons_view) { 9065c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu layout->StartRow(0, 0); 9075c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu layout->AddView(option_buttons_view); 9085c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu } 909a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 910a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch return view; 911a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch} 912a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 913a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochviews::View* ProfileChooserView::CreateTutorialView( 914cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) profiles::TutorialMode tutorial_mode, 915a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch const base::string16& title_text, 916a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch const base::string16& content_text, 917a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch const base::string16& link_text, 918a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch const base::string16& button_text, 919a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch views::Link** link, 920a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch views::LabelButton** button) { 9215c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu tutorial_mode_ = tutorial_mode; 9225c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 923a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) views::View* view = new views::View(); 924c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch view->set_background(views::Background::CreateSolidBackground( 925c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch profiles::kAvatarTutorialBackgroundColor)); 926a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) views::GridLayout* layout = CreateSingleColumnLayout(view, 927a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) kFixedMenuWidth - 2 * views::kButtonHEdgeMarginNew); 928a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) layout->SetInsets(views::kButtonVEdgeMarginNew, 929a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) views::kButtonHEdgeMarginNew, 930a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) views::kButtonVEdgeMarginNew, 931a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) views::kButtonHEdgeMarginNew); 932a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 933a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Adds title. 934a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch views::Label* title_label = new views::Label(title_text); 935a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) title_label->SetHorizontalAlignment(gfx::ALIGN_LEFT); 936c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch title_label->SetAutoColorReadabilityEnabled(false); 937c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch title_label->SetEnabledColor(SK_ColorWHITE); 938010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) title_label->SetFontList(ui::ResourceBundle::GetSharedInstance().GetFontList( 939c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch ui::ResourceBundle::MediumFont)); 940a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) layout->StartRow(1, 0); 941a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) layout->AddView(title_label); 942a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 943c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Adds body content. 944a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch views::Label* content_label = new views::Label(content_text); 945c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch content_label->SetMultiLine(true); 946c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch content_label->SetHorizontalAlignment(gfx::ALIGN_LEFT); 947c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch content_label->SetAutoColorReadabilityEnabled(false); 948c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch content_label->SetEnabledColor(profiles::kAvatarTutorialContentTextColor); 949a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) layout->StartRowWithPadding(1, 0, 0, views::kRelatedControlVerticalSpacing); 950c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch layout->AddView(content_label); 951a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 952c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Adds links and buttons. 9535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) views::ColumnSet* button_columns = layout->AddColumnSet(1); 954a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) button_columns->AddColumn(views::GridLayout::LEADING, 955a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) views::GridLayout::CENTER, 0, views::GridLayout::USE_PREF, 0, 0); 956a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) button_columns->AddPaddingColumn( 957a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 1, views::kUnrelatedControlHorizontalSpacing); 958a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) button_columns->AddColumn(views::GridLayout::TRAILING, 959a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) views::GridLayout::CENTER, 0, views::GridLayout::USE_PREF, 0, 0); 960a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 961a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch *link = CreateLink(link_text, this); 962a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch (*link)->SetHorizontalAlignment(gfx::ALIGN_LEFT); 963a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch (*link)->SetAutoColorReadabilityEnabled(false); 964a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch (*link)->SetEnabledColor(SK_ColorWHITE); 9655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) layout->StartRowWithPadding(1, 1, 0, views::kUnrelatedControlVerticalSpacing); 9665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) layout->AddView(*link); 967a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 968a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch *button = new views::LabelButton(this, button_text); 969a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch (*button)->SetHorizontalAlignment(gfx::ALIGN_CENTER); 970a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch (*button)->SetStyle(views::Button::STYLE_BUTTON); 9715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) layout->AddView(*button); 972c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 9735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return view; 974a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 975a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 976d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)views::View* ProfileChooserView::CreateCurrentProfileView( 97768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) const AvatarMenu::Item& avatar_item, 978d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) bool is_guest) { 979d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) views::View* view = new views::View(); 9805c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu int column_width = kFixedMenuWidth - 2 * views::kButtonHEdgeMarginNew; 9815c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu views::GridLayout* layout = CreateSingleColumnLayout(view, column_width); 98268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) layout->SetInsets(views::kButtonVEdgeMarginNew, 983d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) views::kButtonHEdgeMarginNew, 984010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) views::kUnrelatedControlVerticalSpacing, 98568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) views::kButtonHEdgeMarginNew); 9867d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 9875c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Profile icon, centered. 988f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) int x_offset = (column_width - kLargeImageSide) / 2; 9895c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu current_profile_photo_ = new EditableProfilePhoto( 9905c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu this, avatar_item.icon, !is_guest, 9915c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu gfx::Rect(x_offset, 0, kLargeImageSide, kLargeImageSide)); 992f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SizedContainer* profile_icon_container = 993f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) new SizedContainer(gfx::Size(column_width, kLargeImageSide)); 994f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) profile_icon_container->AddChildView(current_profile_photo_); 995d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 9965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ui::ResourceBundle* rb = &ui::ResourceBundle::GetSharedInstance(); 997f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (browser_->profile()->IsSupervised()) { 99846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) views::ImageView* supervised_icon = new views::ImageView(); 99946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) supervised_icon->SetImage( 100046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) rb->GetImageSkiaNamed(IDR_ICON_PROFILES_MENU_SUPERVISED)); 100146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) gfx::Size preferred_size = supervised_icon->GetPreferredSize(); 100246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) gfx::Rect parent_bounds = current_profile_photo_->bounds(); 100346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) supervised_icon->SetBounds( 100446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) parent_bounds.right() - preferred_size.width(), 100546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) parent_bounds.bottom() - preferred_size.height(), 100646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) preferred_size.width(), 100746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) preferred_size.height()); 1008f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) profile_icon_container->AddChildView(supervised_icon); 100946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 101046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 10115c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu layout->StartRow(1, 0); 1012f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) layout->AddView(profile_icon_container); 10137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 10145c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Profile name, centered. 1015f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) bool editing_allowed = !is_guest && !browser_->profile()->IsSupervised(); 1016a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) current_profile_name_ = new EditableProfileName( 1017116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch this, 1018116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch profiles::GetAvatarNameForProfile(browser_->profile()->GetPath()), 1019116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch editing_allowed); 10205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) layout->StartRowWithPadding(1, 0, 0, 10215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) views::kRelatedControlSmallVerticalSpacing); 1022d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) layout->StartRow(1, 0); 1023f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) layout->AddView(current_profile_name_); 10243551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 10255c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu if (is_guest) 10265c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu return view; 10273551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 10285c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // The available links depend on the type of profile that is active. 10295c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu if (avatar_item.signed_in) { 1030cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) layout->StartRow(1, 0); 10315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (switches::IsEnableAccountConsistency()) { 10325c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::string16 link_title = l10n_util::GetStringUTF16( 1033cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) view_mode_ == profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER ? 10345c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu IDS_PROFILES_PROFILE_MANAGE_ACCOUNTS_BUTTON : 10355c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu IDS_PROFILES_PROFILE_HIDE_MANAGE_ACCOUNTS_BUTTON); 10365c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu manage_accounts_link_ = CreateLink(link_title, this); 10375c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu manage_accounts_link_->SetHorizontalAlignment(gfx::ALIGN_CENTER); 10385c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu layout->AddView(manage_accounts_link_); 10395c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu } else { 10405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Badge the email address if there's an authentication error. 10415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (HasAuthError(browser_->profile())) { 10425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const gfx::ImageSkia warning_image = *rb->GetImageNamed( 10435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) IDR_ICON_PROFILES_ACCOUNT_BUTTON_ERROR).ToImageSkia(); 10445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) auth_error_email_button_ = 10455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) new RightAlignedIconLabelButton(this, avatar_item.sync_state); 10465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) auth_error_email_button_->SetElideBehavior(gfx::ELIDE_EMAIL); 10475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) auth_error_email_button_->SetBorder(views::Border::NullBorder()); 10485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) auth_error_email_button_->SetImage( 10495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) views::LabelButton::STATE_NORMAL, warning_image); 10505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) auth_error_email_button_->SetTextColor( 10515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) views::LabelButton::STATE_NORMAL, 10525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) views::Link::GetDefaultEnabledColor()); 10535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) layout->AddView(auth_error_email_button_); 10545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } else { 10555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) views::Label* email_label = new views::Label(avatar_item.sync_state); 10565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) email_label->SetElideBehavior(gfx::ELIDE_EMAIL); 10575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) layout->AddView(email_label); 10585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 10595c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu } 10605c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu } else { 10615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) SigninManagerBase* signin_manager = SigninManagerFactory::GetForProfile( 10625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) browser_->profile()->GetOriginalProfile()); 1063cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (signin_manager->IsSigninAllowed()) { 10645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) views::Label* promo = new views::Label( 10655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) l10n_util::GetStringUTF16(IDS_PROFILES_SIGNIN_PROMO)); 10665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) promo->SetMultiLine(true); 10675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) promo->SetHorizontalAlignment(gfx::ALIGN_LEFT); 10685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) layout->StartRowWithPadding(1, 0, 0, 10695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) views::kRelatedControlSmallVerticalSpacing); 10705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) layout->StartRow(1, 0); 10715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) layout->AddView(promo); 10725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1073cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) signin_current_profile_link_ = new views::BlueButton( 1074cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) this, l10n_util::GetStringFUTF16(IDS_SYNC_START_SYNC_BUTTON_LABEL, 1075cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) l10n_util::GetStringUTF16(IDS_SHORT_PRODUCT_NAME))); 10765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) layout->StartRowWithPadding(1, 0, 0, 10775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) views::kRelatedControlVerticalSpacing); 1078cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) layout->StartRow(1, 0); 1079cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) layout->AddView(signin_current_profile_link_); 1080cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 10815c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu } 10825c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 10833551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return view; 10843551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} 10853551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 10863551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)views::View* ProfileChooserView::CreateGuestProfileView() { 1087d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) gfx::Image guest_icon = 10880529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ui::ResourceBundle::GetSharedInstance().GetImageNamed( 10890529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch profiles::GetPlaceholderAvatarIconResourceID()); 109068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) AvatarMenu::Item guest_avatar_item(0, 0, guest_icon); 10913551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) guest_avatar_item.active = true; 10923551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) guest_avatar_item.name = l10n_util::GetStringUTF16( 1093d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) IDS_PROFILES_GUEST_PROFILE_NAME); 10943551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) guest_avatar_item.signed_in = false; 10953551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 1096d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return CreateCurrentProfileView(guest_avatar_item, true); 10977d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 10987d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 10997d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)views::View* ProfileChooserView::CreateOtherProfilesView( 11007d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const Indexes& avatars_to_show) { 11017d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) views::View* view = new views::View(); 11025c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu views::GridLayout* layout = CreateSingleColumnLayout(view, kFixedMenuWidth); 11035c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 110468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) int num_avatars_to_show = avatars_to_show.size(); 110568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) for (int i = 0; i < num_avatars_to_show; ++i) { 110668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) const size_t index = avatars_to_show[i]; 110768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) const AvatarMenu::Item& item = avatar_menu_->GetItemAt(index); 1108f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const int kSmallImageSide = 32; 1109d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 11100529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch gfx::Image image = profiles::GetSizedAvatarIcon( 1111010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) item.icon, true, kSmallImageSide, kSmallImageSide); 1112d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 11135c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu views::LabelButton* button = new BackgroundColorHoverButton( 11145c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu this, 11155c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu item.name, 11165c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu *image.ToImageSkia()); 1117d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) open_other_profile_indexes_map_[button] = index; 1118d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 1119d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) layout->StartRow(1, 0); 11205c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu layout->AddView(new views::Separator(views::Separator::HORIZONTAL)); 11215c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu layout->StartRow(1, 0); 1122d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) layout->AddView(button); 11237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 11247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 11257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return view; 11267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 11277d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1128effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochviews::View* ProfileChooserView::CreateOptionsView(bool enable_lock) { 1129d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) views::View* view = new views::View(); 11305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) views::GridLayout* layout = CreateSingleColumnLayout(view, kFixedMenuWidth); 1131effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 11325c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::string16 text = browser_->profile()->IsGuestSession() ? 11335c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu l10n_util::GetStringUTF16(IDS_PROFILES_EXIT_GUEST) : 11345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) l10n_util::GetStringUTF16(IDS_PROFILES_SWITCH_USERS_BUTTON); 1135d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) ui::ResourceBundle* rb = &ui::ResourceBundle::GetSharedInstance(); 113668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) users_button_ = new BackgroundColorHoverButton( 113768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) this, 11385c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu text, 1139effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch *rb->GetImageSkiaNamed(IDR_ICON_PROFILES_MENU_AVATAR)); 1140d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) layout->StartRow(1, 0); 1141d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) layout->AddView(users_button_); 1142a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch 11435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (ShouldShowGoIncognito()) { 11445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) layout->StartRow(1, 0); 11455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) layout->AddView(new views::Separator(views::Separator::HORIZONTAL)); 11465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 11475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // TODO(noms): Use the correct incognito icon when it's available. 11485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) go_incognito_button_ = new BackgroundColorHoverButton( 11495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) this, 11505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) l10n_util::GetStringUTF16(IDS_PROFILES_GO_INCOGNITO_BUTTON), 11515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) *rb->GetImageSkiaNamed(IDR_ICON_PROFILES_MENU_AVATAR)); 11525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) layout->StartRow(1, 0); 11535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) layout->AddView(go_incognito_button_); 11545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 11555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1156effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (enable_lock) { 11575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) layout->StartRow(1, 0); 11585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) layout->AddView(new views::Separator(views::Separator::HORIZONTAL)); 11595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1160effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch lock_button_ = new BackgroundColorHoverButton( 1161effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch this, 11625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) l10n_util::GetStringUTF16(IDS_PROFILES_PROFILE_SIGNOUT_BUTTON), 1163effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch *rb->GetImageSkiaNamed(IDR_ICON_PROFILES_MENU_LOCK)); 11645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) layout->StartRow(1, 0); 1165effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch layout->AddView(lock_button_); 1166effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 1167d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return view; 1168d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)} 11697dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1170cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)views::View* ProfileChooserView::CreateSupervisedUserDisclaimerView() { 1171cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) views::View* view = new views::View(); 1172cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) views::GridLayout* layout = CreateSingleColumnLayout( 1173cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) view, kFixedMenuWidth - 2 * views::kButtonHEdgeMarginNew); 1174cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) layout->SetInsets(views::kRelatedControlVerticalSpacing, 1175cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) views::kButtonHEdgeMarginNew, 1176cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) views::kRelatedControlVerticalSpacing, 1177cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) views::kButtonHEdgeMarginNew); 1178cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) views::Label* disclaimer = new views::Label( 1179f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) avatar_menu_->GetSupervisedUserInformation()); 1180cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) disclaimer->SetMultiLine(true); 1181cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) disclaimer->SetHorizontalAlignment(gfx::ALIGN_LEFT); 1182cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ui::ResourceBundle* rb = &ui::ResourceBundle::GetSharedInstance(); 1183cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) disclaimer->SetFontList(rb->GetFontList(ui::ResourceBundle::SmallFont)); 1184cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) layout->StartRow(1, 0); 1185cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) layout->AddView(disclaimer); 1186cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 1187cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return view; 1188cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 1189cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 1190d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)views::View* ProfileChooserView::CreateCurrentProfileAccountsView( 119168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) const AvatarMenu::Item& avatar_item) { 1192d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) DCHECK(avatar_item.signed_in); 1193a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch views::View* view = new views::View(); 11945c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu view->set_background(views::Background::CreateSolidBackground( 11955c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu profiles::kAvatarBubbleAccountsBackgroundColor)); 11965c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu views::GridLayout* layout = CreateSingleColumnLayout(view, kFixedMenuWidth); 11977d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 11981e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) Profile* profile = browser_->profile(); 1199a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) std::string primary_account = 1200a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) SigninManagerFactory::GetForProfile(profile)->GetAuthenticatedUsername(); 1201a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) DCHECK(!primary_account.empty()); 12025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::vector<std::string>accounts = 12035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) profiles::GetSecondaryAccountsForProfile(profile, primary_account); 12047d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1205cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Get state of authentication error, if any. 1206cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) std::string error_account_id = GetAuthErrorAccountId(profile); 1207cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 12085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // The primary account should always be listed first. 12095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // TODO(rogerta): we still need to further differentiate the primary account 12105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // from the others in the UI, so more work is likely required here: 12115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // crbug.com/311124. 1212cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) CreateAccountButton(layout, primary_account, true, 1213cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) error_account_id == primary_account, kFixedMenuWidth); 12145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) for (size_t i = 0; i < accounts.size(); ++i) 1215cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) CreateAccountButton(layout, accounts[i], false, 1216cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) error_account_id == accounts[i], kFixedMenuWidth); 12177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1218116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (!profile->IsSupervised()) { 1219116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing); 1220116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1221116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add_account_link_ = CreateLink(l10n_util::GetStringFUTF16( 1222116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch IDS_PROFILES_PROFILE_ADD_ACCOUNT_BUTTON, avatar_item.name), this); 1223116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add_account_link_->SetBorder(views::Border::CreateEmptyBorder( 1224116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 0, views::kButtonVEdgeMarginNew, 1225116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch views::kRelatedControlVerticalSpacing, 0)); 1226116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch layout->StartRow(1, 0); 1227116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch layout->AddView(add_account_link_); 1228116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 1229116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 12307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return view; 12317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 1232a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 1233a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)void ProfileChooserView::CreateAccountButton(views::GridLayout* layout, 1234a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const std::string& account, 12355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool is_primary_account, 1236cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) bool reauth_required, 12375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int width) { 1238a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ui::ResourceBundle* rb = &ui::ResourceBundle::GetSharedInstance(); 1239cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const gfx::ImageSkia* delete_default_image = 12405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) rb->GetImageNamed(IDR_CLOSE_1).ToImageSkia(); 1241cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const int kDeleteButtonWidth = delete_default_image->width(); 12426d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) const gfx::ImageSkia warning_default_image = reauth_required ? 12436d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) *rb->GetImageNamed(IDR_ICON_PROFILES_ACCOUNT_BUTTON_ERROR).ToImageSkia() : 12446d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) gfx::ImageSkia(); 1245cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const int kWarningButtonWidth = reauth_required ? 12466d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) warning_default_image.width() + views::kRelatedButtonHSpacing : 0; 12476d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) int available_width = width - 2 * views::kButtonHEdgeMarginNew 12486d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) - kDeleteButtonWidth - kWarningButtonWidth; 12495c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu views::LabelButton* email_button = new BackgroundColorHoverButton( 12506d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) reauth_required ? this : NULL, 12515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) base::UTF8ToUTF16(account), 12526d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) warning_default_image); 12535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) email_button->SetElideBehavior(gfx::ELIDE_EMAIL); 12545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) email_button->SetMinSize(gfx::Size(0, kButtonHeight)); 12555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) email_button->SetMaxSize(gfx::Size(available_width, kButtonHeight)); 1256a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) layout->StartRow(1, 0); 1257a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) layout->AddView(email_button); 1258a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 12596d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) if (reauth_required) 12606d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) reauth_account_button_map_[email_button] = account; 1261116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1262116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Delete button. 1263116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (!browser_->profile()->IsSupervised()) { 1264116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch views::ImageButton* delete_button = new views::ImageButton(this); 1265116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch delete_button->SetImageAlignment(views::ImageButton::ALIGN_RIGHT, 1266116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch views::ImageButton::ALIGN_MIDDLE); 1267116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch delete_button->SetImage(views::ImageButton::STATE_NORMAL, 1268116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch delete_default_image); 1269116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch delete_button->SetImage(views::ImageButton::STATE_HOVERED, 1270116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch rb->GetImageSkiaNamed(IDR_CLOSE_1_H)); 1271116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch delete_button->SetImage(views::ImageButton::STATE_PRESSED, 1272116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch rb->GetImageSkiaNamed(IDR_CLOSE_1_P)); 1273116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch delete_button->SetBounds( 1274116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch width - views::kButtonHEdgeMarginNew - kDeleteButtonWidth, 1275116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 0, kDeleteButtonWidth, kButtonHeight); 1276116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1277116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch email_button->set_notify_enter_exit_on_child(true); 1278116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch email_button->AddChildView(delete_button); 1279116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1280116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Save the original email address, as the button text could be elided. 1281116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch delete_account_button_map_[delete_button] = account; 1282116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 1283a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 1284effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 1285cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)views::View* ProfileChooserView::CreateGaiaSigninView() { 1286cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) GURL url; 1287cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) int message_id; 1288cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 1289cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) switch (view_mode_) { 1290cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) case profiles::BUBBLE_VIEW_MODE_GAIA_SIGNIN: 1291cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) url = signin::GetPromoURL(signin::SOURCE_AVATAR_BUBBLE_SIGN_IN, 1292cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) false /* auto_close */, 1293cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) true /* is_constrained */); 1294cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) message_id = IDS_PROFILES_GAIA_SIGNIN_TITLE; 1295cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) break; 1296cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) case profiles::BUBBLE_VIEW_MODE_GAIA_ADD_ACCOUNT: 1297cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) url = signin::GetPromoURL(signin::SOURCE_AVATAR_BUBBLE_ADD_ACCOUNT, 1298cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) false /* auto_close */, 1299cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) true /* is_constrained */); 1300cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) message_id = IDS_PROFILES_GAIA_ADD_ACCOUNT_TITLE; 1301cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) break; 1302cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) case profiles::BUBBLE_VIEW_MODE_GAIA_REAUTH: { 1303cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DCHECK(HasAuthError(browser_->profile())); 1304cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) url = signin::GetReauthURL(browser_->profile(), 1305cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) GetAuthErrorUsername(browser_->profile())); 1306cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) message_id = IDS_PROFILES_GAIA_REAUTH_TITLE; 1307cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) break; 1308cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 1309cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) default: 1310cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) NOTREACHED() << "Called with invalid mode=" << view_mode_; 1311cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) return NULL; 1312cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 1313cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 1314effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Adds Gaia signin webview 1315effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch Profile* profile = browser_->profile(); 1316effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch views::WebView* web_view = new views::WebView(profile); 1317effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch web_view->LoadInitialURL(url); 1318effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch web_view->SetPreferredSize( 1319effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch gfx::Size(kFixedGaiaViewWidth, kFixedGaiaViewHeight)); 1320effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 13215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) TitleCard* title_card = new TitleCard(l10n_util::GetStringUTF16(message_id), 13225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) this, 1323cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) &gaia_signin_cancel_button_); 1324010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return TitleCard::AddPaddedTitleCard( 1325010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) web_view, title_card, kFixedGaiaViewWidth); 1326effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 1327effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 1328effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochviews::View* ProfileChooserView::CreateAccountRemovalView() { 1329effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch views::View* view = new views::View(); 1330effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch views::GridLayout* layout = CreateSingleColumnLayout( 1331effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch view, kFixedAccountRemovalViewWidth - 2 * views::kButtonHEdgeMarginNew); 1332010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) layout->SetInsets(0, 1333effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch views::kButtonHEdgeMarginNew, 1334effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch views::kButtonVEdgeMarginNew, 1335effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch views::kButtonHEdgeMarginNew); 1336effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 1337effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch const std::string& primary_account = SigninManagerFactory::GetForProfile( 1338effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch browser_->profile())->GetAuthenticatedUsername(); 1339effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch bool is_primary_account = primary_account == account_id_to_remove_; 1340effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 1341effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Adds main text. 1342c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch layout->StartRowWithPadding(1, 0, 0, views::kUnrelatedControlVerticalSpacing); 1343effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ui::ResourceBundle* rb = &ui::ResourceBundle::GetSharedInstance(); 1344effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch const gfx::FontList& small_font_list = 1345effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch rb->GetFontList(ui::ResourceBundle::SmallFont); 1346c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 1347c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch if (is_primary_account) { 1348c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch std::vector<size_t> offsets; 1349c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch const base::string16 settings_text = 1350c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch l10n_util::GetStringUTF16(IDS_PROFILES_SETTINGS_LINK); 13510529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch const base::string16 primary_account_removal_text = 1352c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch l10n_util::GetStringFUTF16(IDS_PROFILES_PRIMARY_ACCOUNT_REMOVAL_TEXT, 1353c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch base::UTF8ToUTF16(account_id_to_remove_), settings_text, &offsets); 1354c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch views::StyledLabel* primary_account_removal_label = 13550529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch new views::StyledLabel(primary_account_removal_text, this); 1356c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch primary_account_removal_label->AddStyleRange( 1357c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch gfx::Range(offsets[1], offsets[1] + settings_text.size()), 1358c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch views::StyledLabel::RangeStyleInfo::CreateForLink()); 1359c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch primary_account_removal_label->SetBaseFontList(small_font_list); 1360c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch layout->AddView(primary_account_removal_label); 1361c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } else { 1362c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch views::Label* content_label = new views::Label( 1363c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch l10n_util::GetStringUTF16(IDS_PROFILES_ACCOUNT_REMOVAL_TEXT)); 1364c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch content_label->SetMultiLine(true); 1365c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch content_label->SetHorizontalAlignment(gfx::ALIGN_LEFT); 1366c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch content_label->SetFontList(small_font_list); 1367c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch layout->AddView(content_label); 1368c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 1369effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 1370effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Adds button. 1371effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (!is_primary_account) { 1372010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) remove_account_button_ = new views::BlueButton( 1373effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch this, l10n_util::GetStringUTF16(IDS_PROFILES_ACCOUNT_REMOVAL_BUTTON)); 1374010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) remove_account_button_->SetHorizontalAlignment( 1375effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch gfx::ALIGN_CENTER); 1376effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch layout->StartRowWithPadding( 1377effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 1, 0, 0, views::kUnrelatedControlVerticalSpacing); 1378010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) layout->AddView(remove_account_button_); 1379effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } else { 1380effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch layout->AddPaddingRow(0, views::kUnrelatedControlVerticalSpacing); 1381effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 1382effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 13835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) TitleCard* title_card = new TitleCard( 13845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) l10n_util::GetStringUTF16(IDS_PROFILES_ACCOUNT_REMOVAL_TITLE), 1385010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) this, &account_removal_cancel_button_); 1386010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return TitleCard::AddPaddedTitleCard(view, title_card, 1387010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) kFixedAccountRemovalViewWidth); 1388effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 1389a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 13905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)views::View* ProfileChooserView::CreateWelcomeUpgradeTutorialViewIfNeeded( 13915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) bool tutorial_shown, const AvatarMenu::Item& avatar_item){ 13925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (first_run::IsChromeFirstRun()) 13935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return NULL; 13945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 13955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Profile* profile = browser_->profile(); 13965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (!avatar_item.signed_in) { 13975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) profile->GetPrefs()->SetInteger( 13985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) prefs::kProfileAvatarTutorialShown, kUpgradeWelcomeTutorialShowMax + 1); 13995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return NULL; 14005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 14015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 14025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const int show_count = profile->GetPrefs()->GetInteger( 14035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) prefs::kProfileAvatarTutorialShown); 14045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Do not show the tutorial if user has dismissed it. 14055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (show_count > kUpgradeWelcomeTutorialShowMax) 14065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return NULL; 14075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 14085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (!tutorial_shown) { 14095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (show_count == kUpgradeWelcomeTutorialShowMax) 14105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return NULL; 14115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) profile->GetPrefs()->SetInteger( 14125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) prefs::kProfileAvatarTutorialShown, show_count + 1); 14135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 14145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 14155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return CreateTutorialView( 14165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) profiles::TUTORIAL_MODE_WELCOME_UPGRADE, 14175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) l10n_util::GetStringFUTF16( 14185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) IDS_PROFILES_WELCOME_UPGRADE_TUTORIAL_TITLE, avatar_item.name), 14195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) l10n_util::GetStringUTF16( 14205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) IDS_PROFILES_WELCOME_UPGRADE_TUTORIAL_CONTENT_TEXT), 14215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) l10n_util::GetStringFUTF16( 14225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) IDS_PROFILES_NOT_YOU, avatar_item.name), 14235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) l10n_util::GetStringUTF16(IDS_PROFILES_TUTORIAL_WHATS_NEW_BUTTON), 14245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) &tutorial_not_you_link_, 14255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) &tutorial_see_whats_new_button_); 14265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 14275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 14285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)views::View* ProfileChooserView::CreateSigninConfirmationView(){ 1429a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch return CreateTutorialView( 14305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) profiles::TUTORIAL_MODE_CONFIRM_SIGNIN, 14315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) l10n_util::GetStringUTF16(IDS_PROFILES_CONFIRM_SIGNIN_TUTORIAL_TITLE), 14325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) l10n_util::GetStringUTF16( 14335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) IDS_PROFILES_CONFIRM_SIGNIN_TUTORIAL_CONTENT_TEXT), 14345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) l10n_util::GetStringUTF16(IDS_PROFILES_SYNC_SETTINGS_LINK), 14355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) l10n_util::GetStringUTF16(IDS_PROFILES_TUTORIAL_OK_BUTTON), 14365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) &tutorial_sync_settings_link_, 14375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) &tutorial_sync_settings_ok_button_); 1438a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch} 14395c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 14405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)views::View* ProfileChooserView::CreateSwitchUserView( 14415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const AvatarMenu::Item& avatar_item) { 14425c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu views::View* view = new views::View(); 14435c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu views::GridLayout* layout = CreateSingleColumnLayout( 14445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) view, kFixedSwitchUserViewWidth); 14455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) views::ColumnSet* columns = layout->AddColumnSet(1); 14465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) columns->AddPaddingColumn(0, views::kButtonHEdgeMarginNew); 14475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) int label_width = 14485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) kFixedSwitchUserViewWidth - 2 * views::kButtonHEdgeMarginNew; 14495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) columns->AddColumn(views::GridLayout::FILL, views::GridLayout::FILL, 0, 14505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) views::GridLayout::FIXED, label_width, label_width); 14515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) columns->AddPaddingColumn(0, views::kButtonHEdgeMarginNew); 14525c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 14535c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu // Adds main text. 14545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) layout->StartRowWithPadding(1, 1, 0, views::kUnrelatedControlVerticalSpacing); 14555c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu ui::ResourceBundle* rb = &ui::ResourceBundle::GetSharedInstance(); 14565c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const gfx::FontList& small_font_list = 14575c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu rb->GetFontList(ui::ResourceBundle::SmallFont); 14585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) views::Label* content_label = new views::Label( 14595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) l10n_util::GetStringFUTF16( 14605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) IDS_PROFILES_NOT_YOU_CONTENT_TEXT, avatar_item.name)); 14615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) content_label->SetMultiLine(true); 14625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) content_label->SetHorizontalAlignment(gfx::ALIGN_LEFT); 14635c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu content_label->SetFontList(small_font_list); 14645c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu layout->AddView(content_label); 14655c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 14665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Adds "Add person" button. 14675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) layout->StartRowWithPadding(1, 0, 0, views::kUnrelatedControlVerticalSpacing); 14685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) layout->AddView(new views::Separator(views::Separator::HORIZONTAL)); 14695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 14705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) add_person_button_ = new BackgroundColorHoverButton( 14715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) this, 14725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) l10n_util::GetStringUTF16(IDS_PROFILES_ADD_PERSON_BUTTON), 14735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) *rb->GetImageSkiaNamed(IDR_ICON_PROFILES_MENU_AVATAR)); 14745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) layout->StartRow(1, 0); 14755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) layout->AddView(add_person_button_); 14765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 14775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Adds "Disconnect your Google Account" button. 14785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) layout->StartRow(1, 0); 14795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) layout->AddView(new views::Separator(views::Separator::HORIZONTAL)); 14805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 14815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) disconnect_button_ = new BackgroundColorHoverButton( 14825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) this, 14835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) l10n_util::GetStringUTF16(IDS_PROFILES_DISCONNECT_BUTTON), 14845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) *rb->GetImageSkiaNamed(IDR_ICON_PROFILES_MENU_AVATAR)); 14855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) layout->StartRow(1, 0); 14865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) layout->AddView(disconnect_button_); 14875c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 1488010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) TitleCard* title_card = new TitleCard( 14895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) l10n_util::GetStringFUTF16(IDS_PROFILES_NOT_YOU, avatar_item.name), 14905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) this, &switch_user_cancel_button_); 14915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return TitleCard::AddPaddedTitleCard(view, title_card, 14925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) kFixedSwitchUserViewWidth); 14935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 14945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 14955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)bool ProfileChooserView::ShouldShowGoIncognito() const { 14965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) bool incognito_available = 14975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) IncognitoModePrefs::GetAvailability(browser_->profile()->GetPrefs()) != 14985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) IncognitoModePrefs::DISABLED; 14995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return incognito_available && !browser_->profile()->IsGuestSession(); 15005c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 15015c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 15025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void ProfileChooserView::PostActionPerformed( 15035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ProfileMetrics::ProfileDesktopMenu action_performed) { 15045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ProfileMetrics::LogProfileDesktopMenu(action_performed, gaia_service_type_); 15055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) gaia_service_type_ = signin::GAIA_SERVICE_TYPE_NONE; 15065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 1507