15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/views/sync/one_click_signin_bubble_view.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/callback_helpers.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser.h"
10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/ui/sync/one_click_signin_helper.h"
11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/ui/sync/one_click_signin_histogram.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/url_constants.h"
131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/grit/chromium_strings.h"
141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/grit/generated_resources.h"
156d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#include "components/google/core/browser/google_util.h"
161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "grit/components_strings.h"
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/l10n/l10n_util.h"
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/resource/resource_bundle.h"
19d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "ui/events/keycodes/keyboard_codes.h"
2003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "ui/resources/grit/ui_resources.h"
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/views/controls/button/image_button.h"
22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ui/views/controls/button/label_button.h"
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/views/controls/image_view.h"
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/controls/label.h"
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/controls/link.h"
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/layout/grid_layout.h"
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/layout/layout_constants.h"
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/widget/widget.h"
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Minimum width of the the bubble.
315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)const int kMinBubbleWidth = 310;
325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Minimum width for the multi-line label.
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const int kMinimumDialogLabelWidth = 400;
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int kMinimumLabelWidth = 240;
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const int kDialogMargin = 16;
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace {
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// The column set constants that can be used in the InitContent() function
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// to layout views.
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)enum OneClickSigninBubbleColumnTypes {
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  COLUMN_SET_FILL_ALIGN,
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  COLUMN_SET_CONTROLS,
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  COLUMN_SET_TITLE_BAR
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)OneClickSigninBubbleView* OneClickSigninBubbleView::bubble_view_ = NULL;
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void OneClickSigninBubbleView::ShowBubble(
542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    BrowserWindow::OneClickSigninBubbleType type,
55a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    const base::string16& email,
56a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    const base::string16& error_message,
57a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    scoped_ptr<OneClickSigninBubbleDelegate> delegate,
58a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    views::View* anchor_view,
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const BrowserWindow::StartSyncCallback& start_sync) {
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (IsShowing())
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  switch (type) {
64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    case BrowserWindow::ONE_CLICK_SIGNIN_BUBBLE_TYPE_BUBBLE:
65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      bubble_view_ = new OneClickSigninBubbleView(
66a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)          error_message, base::string16(), delegate.Pass(),
67a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)          anchor_view, start_sync, false);
68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      break;
69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    case BrowserWindow::ONE_CLICK_SIGNIN_BUBBLE_TYPE_MODAL_DIALOG:
70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      bubble_view_ = new OneClickSigninBubbleView(
71a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)          base::string16(), base::string16(), delegate.Pass(),
72a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)          anchor_view, start_sync, true);
73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      break;
74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    case BrowserWindow::ONE_CLICK_SIGNIN_BUBBLE_TYPE_SAML_MODAL_DIALOG:
75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      bubble_view_ = new OneClickSigninBubbleView(
76a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)          base::string16(), email, delegate.Pass(),
77a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)          anchor_view, start_sync, true);
78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      break;
79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  views::BubbleDelegateView::CreateBubble(bubble_view_)->Show();
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool OneClickSigninBubbleView::IsShowing() {
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return bubble_view_ != NULL;
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void OneClickSigninBubbleView::Hide() {
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (IsShowing())
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bubble_view_->GetWidget()->Close();
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)OneClickSigninBubbleView::OneClickSigninBubbleView(
96a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    const base::string16& error_message,
97a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    const base::string16& email,
98a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    scoped_ptr<OneClickSigninBubbleDelegate> delegate,
99a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    views::View* anchor_view,
100c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    const BrowserWindow::StartSyncCallback& start_sync_callback,
101c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    bool is_sync_dialog)
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : BubbleDelegateView(anchor_view, views::BubbleBorder::TOP_RIGHT),
103a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)      delegate_(delegate.Pass()),
104c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      error_message_(error_message),
105c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      email_(email),
106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      start_sync_callback_(start_sync_callback),
107c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      is_sync_dialog_(is_sync_dialog),
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      advanced_link_(NULL),
109c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      learn_more_link_(NULL),
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ok_button_(NULL),
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      undo_button_(NULL),
112c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      close_button_(NULL),
113a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      clicked_learn_more_(false) {
114c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  if (is_sync_dialog_) {
115c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    DCHECK(!start_sync_callback_.is_null());
116c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    set_arrow(views::BubbleBorder::NONE);
117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    set_anchor_view_insets(gfx::Insets(0, 0, anchor_view->height() / 2, 0));
118c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    set_close_on_deactivate(false);
119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
1205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  int margin = is_sync_dialog_ ? kDialogMargin : views::kButtonVEdgeMarginNew;
1215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  set_margins(gfx::Insets(margin, margin, margin, margin));
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)OneClickSigninBubbleView::~OneClickSigninBubbleView() {
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
127c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)ui::ModalType OneClickSigninBubbleView::GetModalType() const {
128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  return is_sync_dialog_? ui::MODAL_TYPE_CHILD : ui::MODAL_TYPE_NONE;
129c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
130c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void OneClickSigninBubbleView::Init() {
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  views::GridLayout* layout = new views::GridLayout(this);
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetLayoutManager(layout);
1345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  SetBorder(views::Border::CreateEmptyBorder(8, 8, 8, 8));
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Column set for descriptive text and link.
1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  views::ColumnSet* cs = layout->AddColumnSet(COLUMN_SET_FILL_ALIGN);
1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cs->AddColumn(views::GridLayout::FILL, views::GridLayout::CENTER, 1,
1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                views::GridLayout::USE_PREF, 0, 0);
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Column set for buttons at bottom of bubble.
1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  cs = layout->AddColumnSet(COLUMN_SET_CONTROLS);
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cs->AddColumn(views::GridLayout::LEADING, views::GridLayout::CENTER, 0,
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                views::GridLayout::USE_PREF, 0, 0);
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cs->AddPaddingColumn(1, views::kUnrelatedControlHorizontalSpacing);
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cs->AddColumn(views::GridLayout::TRAILING, views::GridLayout::CENTER, 0,
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                views::GridLayout::USE_PREF, 0, 0);
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cs->AddColumn(views::GridLayout::TRAILING, views::GridLayout::CENTER, 0,
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                views::GridLayout::USE_PREF, 0, 0);
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
152c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  is_sync_dialog_ ? InitDialogContent(layout) : InitBubbleContent(layout);
1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Add controls at the bottom.
15590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // Don't display the advanced link for the error bubble.
15690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  if (is_sync_dialog_ || error_message_.empty()) {
15790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    InitAdvancedLink();
15890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    layout->StartRow(0, COLUMN_SET_CONTROLS);
15990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    layout->AddView(advanced_link_);
16090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  }
161c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
162c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  InitButtons(layout);
163c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ok_button_->SetIsDefault(true);
1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  AddAccelerator(ui::Accelerator(ui::VKEY_RETURN, 0));
1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
168c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void OneClickSigninBubbleView::InitBubbleContent(views::GridLayout* layout) {
1695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  layout->set_minimum_size(gfx::Size(kMinBubbleWidth, 0));
1705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // If no error occurred, add title message.
1725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (error_message_.empty()) {
1735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    views::ColumnSet* cs = layout->AddColumnSet(COLUMN_SET_TITLE_BAR);
1745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    cs->AddColumn(views::GridLayout::LEADING, views::GridLayout::LEADING, 0,
1755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                  views::GridLayout::USE_PREF, 0, 0);
1765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    {
1775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      layout->StartRow(0, COLUMN_SET_TITLE_BAR);
1785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
1805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      views::Label* label = new views::Label(
1815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          l10n_util::GetStringUTF16(IDS_ONE_CLICK_SIGNIN_DIALOG_TITLE_NEW),
1825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          rb.GetFontList(ui::ResourceBundle::MediumFont));
1835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      label->SetHorizontalAlignment(gfx::ALIGN_LEFT);
1845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      layout->AddView(label);
1855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    }
1865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    layout->AddPaddingRow(0, views::kUnrelatedControlLargeVerticalSpacing);
1885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  }
1895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Add main text description.
191c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  layout->StartRow(0, COLUMN_SET_FILL_ALIGN);
192c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
193c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  views::Label* label = !error_message_.empty() ?
194c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      new views::Label(error_message_) :
195c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      new views::Label(
196c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)          l10n_util::GetStringUTF16(IDS_ONE_CLICK_SIGNIN_BUBBLE_MESSAGE));
197c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  label->SetMultiLine(true);
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  label->SetHorizontalAlignment(gfx::ALIGN_LEFT);
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  label->SizeToFit(kMinimumLabelWidth);
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  layout->AddView(label);
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  layout->AddPaddingRow(0, views::kUnrelatedControlVerticalSpacing);
2045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
205c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  layout->StartRow(0, COLUMN_SET_CONTROLS);
206c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
207c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  InitLearnMoreLink();
208c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  layout->AddView(learn_more_link_);
2092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
211c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void OneClickSigninBubbleView::InitDialogContent(views::GridLayout* layout) {
212c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  OneClickSigninHelper::LogConfirmHistogramValue(
213c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      one_click_signin::HISTOGRAM_CONFIRM_SHOWN);
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
215c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // Column set for title bar.
216c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  views::ColumnSet* cs = layout->AddColumnSet(COLUMN_SET_TITLE_BAR);
217c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  cs->AddColumn(views::GridLayout::LEADING, views::GridLayout::CENTER, 0,
218c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                views::GridLayout::USE_PREF, 0, 0);
219c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  cs->AddPaddingColumn(1, views::kUnrelatedControlHorizontalSpacing);
220c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  cs->AddColumn(views::GridLayout::TRAILING, views::GridLayout::CENTER, 0,
221c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                views::GridLayout::USE_PREF, 0, 0);
222c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
223c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
224c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
225c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  {
226c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    layout->StartRow(0, COLUMN_SET_TITLE_BAR);
227c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
2287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    views::Label* label = new views::Label(
2295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        l10n_util::GetStringUTF16(IDS_ONE_CLICK_SIGNIN_DIALOG_TITLE_NEW),
2305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        rb.GetFontList(ui::ResourceBundle::MediumBoldFont));
231c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    label->SetHorizontalAlignment(gfx::ALIGN_LEFT);
232c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    layout->AddView(label);
233c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
234c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    close_button_ = new views::ImageButton(this);
235c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    close_button_->SetImage(views::ImageButton::STATE_NORMAL,
236c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                            rb.GetImageNamed(IDR_CLOSE_2).ToImageSkia());
237c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    close_button_->SetImage(views::ImageButton::STATE_HOVERED,
238c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                            rb.GetImageNamed(IDR_CLOSE_2_H).ToImageSkia());
239c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    close_button_->SetImage(views::ImageButton::STATE_PRESSED,
240c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                            rb.GetImageNamed(IDR_CLOSE_2_P).ToImageSkia());
241c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
242c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    layout->AddView(close_button_);
243c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
244c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
245c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  layout->AddPaddingRow(0, views::kUnrelatedControlVerticalSpacing);
246c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
247c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  {
248c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    layout->StartRow(0, COLUMN_SET_FILL_ALIGN);
249c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
2507dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    views::Label* label = new views::Label(
251c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        l10n_util::GetStringFUTF16(IDS_ONE_CLICK_SIGNIN_DIALOG_MESSAGE_NEW,
252c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                   email_));
253c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    label->SetMultiLine(true);
254c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    label->SetHorizontalAlignment(gfx::ALIGN_LEFT);
255c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    label->SizeToFit(kMinimumDialogLabelWidth);
256c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    layout->AddView(label);
257c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
258c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    layout->StartRow(0, COLUMN_SET_FILL_ALIGN);
259c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
260c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    InitLearnMoreLink();
261c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    layout->AddView(learn_more_link_, 1, 1, views::GridLayout::TRAILING,
262c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                    views::GridLayout::CENTER);
263c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
264c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
265c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  layout->AddPaddingRow(0, views::kUnrelatedControlVerticalSpacing);
2662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
268c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void OneClickSigninBubbleView::InitButtons(views::GridLayout* layout) {
269c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  GetButtons(&ok_button_, &undo_button_);
270c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  layout->AddView(ok_button_);
271c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
272c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  if (is_sync_dialog_)
273c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    layout->AddView(undo_button_);
2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
276c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void OneClickSigninBubbleView::GetButtons(views::LabelButton** ok_button,
277c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                          views::LabelButton** undo_button) {
2785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  base::string16 ok_label = !error_message_.empty() ?
2795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      l10n_util::GetStringUTF16(IDS_OK) :
2805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      l10n_util::GetStringUTF16(IDS_ONE_CLICK_SIGNIN_DIALOG_OK_BUTTON);
2815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
2825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  *ok_button = new views::LabelButton(this, ok_label);
2835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  (*ok_button)->SetStyle(views::Button::STYLE_BUTTON);
2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
285c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // The default size of the buttons is too large.  To allow them to be smaller
286c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // ignore the minimum default size.,
2875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  (*ok_button)->SetMinSize(gfx::Size());
288c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
289c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  if (is_sync_dialog_) {
290a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    *undo_button = new views::LabelButton(this, base::string16());
2915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    (*undo_button)->SetStyle(views::Button::STYLE_BUTTON);
2925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    (*undo_button)->SetMinSize(gfx::Size());
293c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
294a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    base::string16 undo_label =
295c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        l10n_util::GetStringUTF16(IDS_ONE_CLICK_SIGNIN_DIALOG_UNDO_BUTTON);
296c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    (*undo_button)->SetText(undo_label);
2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
300c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void OneClickSigninBubbleView::InitAdvancedLink() {
30190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  advanced_link_ = new views::Link(
30290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      l10n_util::GetStringUTF16(IDS_ONE_CLICK_SIGNIN_DIALOG_ADVANCED));
303c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
304c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  advanced_link_->set_listener(this);
305c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  advanced_link_->SetHorizontalAlignment(gfx::ALIGN_LEFT);
306c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
307c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
308c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void OneClickSigninBubbleView::InitLearnMoreLink() {
309c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  learn_more_link_ = new views::Link(
310c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      l10n_util::GetStringUTF16(IDS_LEARN_MORE));
311c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  learn_more_link_->set_listener(this);
312c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  learn_more_link_->SetHorizontalAlignment(gfx::ALIGN_LEFT);
313c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
314c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool OneClickSigninBubbleView::AcceleratorPressed(
316c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  const ui::Accelerator& accelerator) {
3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (accelerator.key_code() == ui::VKEY_RETURN ||
3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      accelerator.key_code() == ui::VKEY_ESCAPE) {
319c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    OneClickSigninBubbleView::Hide();
320c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
321c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    if (is_sync_dialog_) {
322c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      if (accelerator.key_code() == ui::VKEY_RETURN) {
323c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        OneClickSigninHelper::LogConfirmHistogramValue(
324c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        clicked_learn_more_ ?
325c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            one_click_signin::HISTOGRAM_CONFIRM_LEARN_MORE_RETURN :
326c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            one_click_signin::HISTOGRAM_CONFIRM_RETURN);
327c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
328c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        base::ResetAndReturn(&start_sync_callback_).Run(
3293551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)            OneClickSigninSyncStarter::SYNC_WITH_DEFAULT_SETTINGS);
330c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      } else if (accelerator.key_code() == ui::VKEY_ESCAPE) {
331c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        OneClickSigninHelper::LogConfirmHistogramValue(
332c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        clicked_learn_more_ ?
333c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            one_click_signin::HISTOGRAM_CONFIRM_LEARN_MORE_ESCAPE :
334c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            one_click_signin::HISTOGRAM_CONFIRM_ESCAPE);
335c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
3363551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)        base::ResetAndReturn(&start_sync_callback_).Run(
3373551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)            OneClickSigninSyncStarter::UNDO_SYNC);
338c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      }
3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return true;
3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return BubbleDelegateView::AcceleratorPressed(accelerator);
3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void OneClickSigninBubbleView::LinkClicked(views::Link* source,
3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                           int event_flags) {
349c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  if (source == learn_more_link_) {
350c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    if (is_sync_dialog_ && !clicked_learn_more_) {
351c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      OneClickSigninHelper::LogConfirmHistogramValue(
352c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)          one_click_signin::HISTOGRAM_CONFIRM_LEARN_MORE);
353c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      clicked_learn_more_ = true;
354c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
355a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    delegate_->OnLearnMoreLinkClicked(is_sync_dialog_);
356c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
357c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    // don't hide the modal dialog, as this is an informational link
358c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    if (is_sync_dialog_)
359c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      return;
36090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  } else if (advanced_link_ && source == advanced_link_) {
361c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    if (is_sync_dialog_) {
362c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      OneClickSigninHelper::LogConfirmHistogramValue(
363c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        clicked_learn_more_ ?
364c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            one_click_signin::HISTOGRAM_CONFIRM_LEARN_MORE_ADVANCED :
365c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            one_click_signin::HISTOGRAM_CONFIRM_ADVANCED);
366c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
367c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      base::ResetAndReturn(&start_sync_callback_).Run(
3683551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)          OneClickSigninSyncStarter::CONFIGURE_SYNC_FIRST);
369c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    } else {
370a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)      delegate_->OnAdvancedLinkClicked();
371c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
372c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
373c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
374c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  Hide();
3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void OneClickSigninBubbleView::ButtonPressed(views::Button* sender,
3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                             const ui::Event& event) {
379c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  Hide();
380c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
381c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  if (is_sync_dialog_) {
382c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    if (sender == ok_button_)
383c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      OneClickSigninHelper::LogConfirmHistogramValue(
384c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)          clicked_learn_more_ ?
385c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              one_click_signin::HISTOGRAM_CONFIRM_LEARN_MORE_OK :
386c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              one_click_signin::HISTOGRAM_CONFIRM_OK);
387c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
388c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    if (sender == undo_button_)
389c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      OneClickSigninHelper::LogConfirmHistogramValue(
390c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)          clicked_learn_more_ ?
391c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              one_click_signin::HISTOGRAM_CONFIRM_LEARN_MORE_UNDO :
392c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              one_click_signin::HISTOGRAM_CONFIRM_UNDO);
393c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
394c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    if (sender == close_button_)
395c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      OneClickSigninHelper::LogConfirmHistogramValue(
396c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)          clicked_learn_more_ ?
397c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              one_click_signin::HISTOGRAM_CONFIRM_LEARN_MORE_CLOSE :
398c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              one_click_signin::HISTOGRAM_CONFIRM_CLOSE);
399c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
400c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    base::ResetAndReturn(&start_sync_callback_).Run((sender == ok_button_) ?
4012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      OneClickSigninSyncStarter::SYNC_WITH_DEFAULT_SETTINGS :
4022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      OneClickSigninSyncStarter::UNDO_SYNC);
403c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
404c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
405c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
406c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void OneClickSigninBubbleView::WindowClosing() {
407c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // We have to reset |bubble_view_| here, not in our destructor, because
408c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // we'll be destroyed asynchronously and the shown state will be checked
409c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // before then.
410c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  DCHECK_EQ(bubble_view_, this);
411c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  bubble_view_ = NULL;
412c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
413c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  if (is_sync_dialog_ && !start_sync_callback_.is_null()) {
414c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    base::ResetAndReturn(&start_sync_callback_).Run(
415f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        OneClickSigninSyncStarter::UNDO_SYNC);
416c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
418