Chromium Code Reviews| Index: chrome/browser/ui/views/sync/one_click_signin_bubble_view.cc |
| diff --git a/chrome/browser/ui/views/sync/one_click_signin_bubble_view.cc b/chrome/browser/ui/views/sync/one_click_signin_bubble_view.cc |
| index f23f5fcd096bc892f9641cb32c8c87231e75d9ca..8177811d52309faec1312a02aa633a319a82bae5 100644 |
| --- a/chrome/browser/ui/views/sync/one_click_signin_bubble_view.cc |
| +++ b/chrome/browser/ui/views/sync/one_click_signin_bubble_view.cc |
| @@ -7,7 +7,6 @@ |
| #include "base/callback_helpers.h" |
| #include "base/logging.h" |
| #include "base/message_loop.h" |
| -#include "base/utf_string_conversions.h" |
| #include "chrome/browser/google/google_util.h" |
| #include "chrome/browser/ui/browser.h" |
| #include "chrome/browser/ui/sync/one_click_signin_helper.h" |
| @@ -30,7 +29,7 @@ |
| #include "ui/views/layout/layout_constants.h" |
| #include "ui/views/widget/widget.h" |
| -// Minimum width for the mutli-line label. |
| +// Minimum width for the multi-line label. |
| const int kMinimumDialogLabelWidth = 400; |
| const int kMinimumLabelWidth = 240; |
| const int kDialogMargin = 16; |
| @@ -44,227 +43,8 @@ enum OneClickSigninBubbleColumnTypes { |
| COLUMN_SET_CONTROLS, |
| COLUMN_SET_TITLE_BAR |
| }; |
| - |
| -class OneClickSigninDialogView : public OneClickSigninBubbleView { |
| - public: |
| - OneClickSigninDialogView( |
| - content::WebContents* web_content, |
| - views::View* anchor_view, |
| - const string16& email, |
| - const BrowserWindow::StartSyncCallback& start_sync_callback); |
| - |
| - private: |
| - // Overridden from views::WidgetDelegate: |
| - virtual ui::ModalType GetModalType() const OVERRIDE; |
| - |
| - // Overridden from OneClickSigninBubbleView: |
| - virtual void InitContent(views::GridLayout* layout) OVERRIDE; |
| - virtual void GetButtons(views::LabelButton** ok_button, |
| - views::LabelButton** undo_button) OVERRIDE; |
| - virtual views::Link* CreateAdvancedLink() OVERRIDE; |
| - |
| - // Overridden from views::LinkListener: |
| - virtual void LinkClicked(views::Link* source, int event_flags) OVERRIDE; |
| - |
| - // Overridden from views::ButtonListener: |
| - virtual void ButtonPressed(views::Button* sender, |
| - const ui::Event& event) OVERRIDE; |
| - |
| - // views::View method: |
| - virtual bool AcceleratorPressed(const ui::Accelerator& accelerator) OVERRIDE; |
| - |
| - const string16 email_; |
| - content::WebContents* web_content_; |
| - views::Link* learn_more_link_; |
| - views::ImageButton* close_button_; |
| - |
| - bool clicked_learn_more_; |
| - |
| - DISALLOW_COPY_AND_ASSIGN(OneClickSigninDialogView); |
| -}; |
| - |
| -OneClickSigninDialogView::OneClickSigninDialogView( |
| - content::WebContents* web_content, |
| - views::View* anchor_view, |
| - const string16& email, |
| - const BrowserWindow::StartSyncCallback& start_sync_callback) |
| - : OneClickSigninBubbleView(anchor_view, start_sync_callback), |
| - email_(email), |
| - web_content_(web_content), |
| - learn_more_link_(NULL), |
| - close_button_(NULL), |
| - clicked_learn_more_(false) { |
| - set_arrow(views::BubbleBorder::NONE); |
| - set_anchor_view_insets(gfx::Insets(0, 0, anchor_view->height() / 2, 0)); |
| - set_close_on_deactivate(false); |
| - set_margins(gfx::Insets(kDialogMargin, kDialogMargin, kDialogMargin, |
| - kDialogMargin)); |
| -} |
| - |
| -ui::ModalType OneClickSigninDialogView::GetModalType() const { |
| - return ui::MODAL_TYPE_CHILD; |
| -} |
| - |
| -void OneClickSigninDialogView::InitContent(views::GridLayout* layout) { |
| - OneClickSigninHelper::LogConfirmHistogramValue( |
| - one_click_signin::HISTOGRAM_CONFIRM_SHOWN); |
| - |
| - // Column set for title bar. |
| - views::ColumnSet* cs = layout->AddColumnSet(COLUMN_SET_TITLE_BAR); |
| - cs->AddColumn(views::GridLayout::LEADING, views::GridLayout::CENTER, 0, |
| - views::GridLayout::USE_PREF, 0, 0); |
| - cs->AddPaddingColumn(1, views::kUnrelatedControlHorizontalSpacing); |
| - cs->AddColumn(views::GridLayout::TRAILING, views::GridLayout::CENTER, 0, |
| - views::GridLayout::USE_PREF, 0, 0); |
| - |
| - ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); |
| - |
| - { |
| - layout->StartRow(0, COLUMN_SET_TITLE_BAR); |
| - |
| - views::Label* label = new views::Label(email_.empty() ? |
| - l10n_util::GetStringUTF16(IDS_ONE_CLICK_SIGNIN_DIALOG_TITLE) : |
| - l10n_util::GetStringFUTF16(IDS_ONE_CLICK_SIGNIN_DIALOG_TITLE_NEW, |
| - email_)); |
| - label->SetHorizontalAlignment(gfx::ALIGN_LEFT); |
| - label->SetFont(label->font().DeriveFont(3, gfx::Font::BOLD)); |
| - layout->AddView(label); |
| - |
| - close_button_ = new views::ImageButton(this); |
| - close_button_->SetImage(views::ImageButton::STATE_NORMAL, |
| - rb.GetImageNamed(IDR_CLOSE_2).ToImageSkia()); |
| - close_button_->SetImage(views::ImageButton::STATE_HOVERED, |
| - rb.GetImageNamed(IDR_CLOSE_2_H).ToImageSkia()); |
| - close_button_->SetImage(views::ImageButton::STATE_PRESSED, |
| - rb.GetImageNamed(IDR_CLOSE_2_P).ToImageSkia()); |
| - layout->AddView(close_button_); |
| - } |
| - |
| - layout->AddPaddingRow(0, views::kUnrelatedControlVerticalSpacing); |
| - |
| - { |
| - layout->StartRow(0, COLUMN_SET_FILL_ALIGN); |
| - |
| - views::Label* label = new views::Label(email_.empty() ? |
| - l10n_util::GetStringUTF16(IDS_ONE_CLICK_SIGNIN_DIALOG_MESSAGE) : |
| - l10n_util::GetStringFUTF16(IDS_ONE_CLICK_SIGNIN_DIALOG_MESSAGE_NEW, |
| - email_)); |
| - label->SetMultiLine(true); |
| - label->SetHorizontalAlignment(gfx::ALIGN_LEFT); |
| - label->SizeToFit(kMinimumDialogLabelWidth); |
| - layout->AddView(label); |
| - |
| - layout->StartRow(0, COLUMN_SET_FILL_ALIGN); |
| - |
| - learn_more_link_ = new views::Link( |
| - l10n_util::GetStringUTF16(IDS_LEARN_MORE)); |
| - learn_more_link_->set_listener(this); |
| - learn_more_link_->SetHorizontalAlignment(gfx::ALIGN_LEFT); |
| - layout->AddView(learn_more_link_, 1, 1, views::GridLayout::TRAILING, |
| - views::GridLayout::CENTER); |
| - } |
| - |
| - layout->AddPaddingRow(0, views::kUnrelatedControlVerticalSpacing); |
| -} |
| - |
| -void OneClickSigninDialogView::GetButtons(views::LabelButton** ok_button, |
| - views::LabelButton** undo_button) { |
| - *ok_button = new views::LabelButton(this, string16()); |
| - (*ok_button)->SetStyle(views::Button::STYLE_NATIVE_TEXTBUTTON); |
| - |
| - *undo_button = new views::LabelButton(this, string16()); |
| - (*undo_button)->SetStyle(views::Button::STYLE_NATIVE_TEXTBUTTON); |
| - |
| - // The default size of the buttons is too large. To allow them to be smaller |
| - // ignore the minimum default size. Furthermore, to make sure they are the |
| - // same size, SetText() is called with both strings on both buttons. |
| - (*ok_button)->set_min_size(gfx::Size()); |
| - (*undo_button)->set_min_size(gfx::Size()); |
| - string16 ok_label = |
| - l10n_util::GetStringUTF16(IDS_ONE_CLICK_SIGNIN_DIALOG_OK_BUTTON); |
| - string16 undo_label = |
| - l10n_util::GetStringUTF16(IDS_ONE_CLICK_SIGNIN_DIALOG_UNDO_BUTTON); |
| - (*ok_button)->SetText(undo_label); |
| - (*ok_button)->SetText(ok_label); |
| - (*undo_button)->SetText(ok_label); |
| - (*undo_button)->SetText(undo_label); |
| -} |
| - |
| -views::Link* OneClickSigninDialogView::CreateAdvancedLink() { |
| - views::Link* advanced_link= new views::Link( |
| - l10n_util::GetStringUTF16(IDS_ONE_CLICK_SIGNIN_DIALOG_ADVANCED)); |
| - advanced_link->set_listener(this); |
| - advanced_link->SetHorizontalAlignment(gfx::ALIGN_LEFT); |
| - return advanced_link; |
| -} |
| - |
| -void OneClickSigninDialogView::LinkClicked(views::Link* source, |
| - int event_flags) { |
| - if (source == learn_more_link_) { |
| - if (!clicked_learn_more_) { |
| - OneClickSigninHelper::LogConfirmHistogramValue( |
| - one_click_signin::HISTOGRAM_LEARN_MORE); |
| - clicked_learn_more_ = true; |
| - } |
| - content::OpenURLParams params( |
| - GURL(chrome::kChromeSyncLearnMoreURL), content::Referrer(), |
| - NEW_WINDOW, content::PAGE_TRANSITION_LINK, false); |
| - web_content_->OpenURL(params); |
| - return; |
| - } |
| - |
| - if (source == GetAdvancedLink()) |
| - OneClickSigninHelper::LogConfirmHistogramValue( |
| - clicked_learn_more_ ? |
| - one_click_signin::HISTOGRAM_CONFIRM_LEARN_MORE_ADVANCED : |
| - one_click_signin::HISTOGRAM_CONFIRM_ADVANCED); |
| - |
| - OneClickSigninBubbleView::LinkClicked(source, event_flags); |
| -} |
| - |
| -void OneClickSigninDialogView::ButtonPressed(views::Button* sender, |
| - const ui::Event& event) { |
| - if (sender == GetOkButton()) |
| - OneClickSigninHelper::LogConfirmHistogramValue( |
| - clicked_learn_more_ ? |
| - one_click_signin::HISTOGRAM_CONFIRM_LEARN_MORE_OK : |
| - one_click_signin::HISTOGRAM_CONFIRM_OK); |
| - |
| - if (sender == GetUndoButton()) |
| - OneClickSigninHelper::LogConfirmHistogramValue( |
| - clicked_learn_more_ ? |
| - one_click_signin::HISTOGRAM_CONFIRM_LEARN_MORE_UNDO : |
| - one_click_signin::HISTOGRAM_CONFIRM_UNDO); |
| - |
| - if (sender == close_button_) |
| - OneClickSigninHelper::LogConfirmHistogramValue( |
| - clicked_learn_more_ ? |
| - one_click_signin::HISTOGRAM_CONFIRM_LEARN_MORE_CLOSE : |
| - one_click_signin::HISTOGRAM_CONFIRM_CLOSE); |
| - |
| - |
| - OneClickSigninBubbleView::ButtonPressed(sender, event); |
| -} |
| - |
| -bool OneClickSigninDialogView::AcceleratorPressed( |
| - const ui::Accelerator& accelerator) { |
| - if (accelerator.key_code() == ui::VKEY_RETURN) |
| - OneClickSigninHelper::LogConfirmHistogramValue( |
| - clicked_learn_more_ ? |
| - one_click_signin::HISTOGRAM_CONFIRM_LEARN_MORE_RETURN : |
| - one_click_signin::HISTOGRAM_CONFIRM_RETURN); |
| - if (accelerator.key_code() == ui::VKEY_ESCAPE) |
| - OneClickSigninHelper::LogConfirmHistogramValue( |
| - clicked_learn_more_ ? |
| - one_click_signin::HISTOGRAM_CONFIRM_LEARN_MORE_ESCAPE : |
| - one_click_signin::HISTOGRAM_CONFIRM_ESCAPE); |
| - return OneClickSigninBubbleView::AcceleratorPressed(accelerator); |
| -} |
| - |
| } // namespace |
| -// OneClickSigninBubbleView ---------------------------------------------------- |
| - |
| // static |
| OneClickSigninBubbleView* OneClickSigninBubbleView::bubble_view_ = NULL; |
| @@ -272,6 +52,7 @@ OneClickSigninBubbleView* OneClickSigninBubbleView::bubble_view_ = NULL; |
| void OneClickSigninBubbleView::ShowBubble( |
| BrowserWindow::OneClickSigninBubbleType type, |
| const string16& email, |
| + const string16& error_message, |
| ToolbarView* toolbar_view, |
| const BrowserWindow::StartSyncCallback& start_sync) { |
| if (IsShowing()) |
| @@ -279,18 +60,19 @@ void OneClickSigninBubbleView::ShowBubble( |
| switch (type) { |
| case BrowserWindow::ONE_CLICK_SIGNIN_BUBBLE_TYPE_BUBBLE: |
| - bubble_view_ = new OneClickSigninBubbleView(toolbar_view->app_menu(), |
| - start_sync); |
| + bubble_view_ = new OneClickSigninBubbleView( |
| + toolbar_view->GetWebContents(), toolbar_view->app_menu(), |
| + error_message, string16(), start_sync, false); |
| break; |
| case BrowserWindow::ONE_CLICK_SIGNIN_BUBBLE_TYPE_MODAL_DIALOG: |
| - bubble_view_ = new OneClickSigninDialogView( |
| + bubble_view_ = new OneClickSigninBubbleView( |
| toolbar_view->GetWebContents(), toolbar_view->location_bar(), |
| - string16(), start_sync); |
| + string16(), string16(), start_sync, true); |
| break; |
| case BrowserWindow::ONE_CLICK_SIGNIN_BUBBLE_TYPE_SAML_MODAL_DIALOG: |
| - bubble_view_ = new OneClickSigninDialogView( |
| + bubble_view_ = new OneClickSigninBubbleView( |
| toolbar_view->GetWebContents(), toolbar_view->location_bar(), |
| - email, start_sync); |
| + string16(), email, start_sync, true); |
| break; |
| } |
| @@ -309,20 +91,41 @@ void OneClickSigninBubbleView::Hide() { |
| } |
| OneClickSigninBubbleView::OneClickSigninBubbleView( |
| + content::WebContents* web_contents, |
| views::View* anchor_view, |
| - const BrowserWindow::StartSyncCallback& start_sync_callback) |
| + const string16& error_message, |
| + const string16& email, |
| + const BrowserWindow::StartSyncCallback& start_sync_callback, |
| + bool is_sync_dialog) |
| : BubbleDelegateView(anchor_view, views::BubbleBorder::TOP_RIGHT), |
| + web_contents_(web_contents), |
| + error_message_(error_message), |
| + email_(email), |
| + start_sync_callback_(start_sync_callback), |
| + is_sync_dialog_(is_sync_dialog), |
| advanced_link_(NULL), |
| + learn_more_link_(NULL), |
| ok_button_(NULL), |
| undo_button_(NULL), |
| - start_sync_callback_(start_sync_callback), |
| + close_button_(NULL), |
| message_loop_for_testing_(NULL) { |
| - DCHECK(!start_sync_callback_.is_null()); |
| + if (is_sync_dialog_) { |
| + DCHECK(!start_sync_callback_.is_null()); |
| + set_arrow(views::BubbleBorder::NONE); |
| + set_anchor_view_insets(gfx::Insets(0, 0, anchor_view->height() / 2, 0)); |
| + set_close_on_deactivate(false); |
| + set_margins(gfx::Insets(kDialogMargin, kDialogMargin, kDialogMargin, |
| + kDialogMargin)); |
| + } |
|
Roger Tawa OOO till Jul 10th
2013/04/26 18:28:21
if |is_sync_dialog_| is false, might be a good ide
|
| } |
| OneClickSigninBubbleView::~OneClickSigninBubbleView() { |
| } |
| +ui::ModalType OneClickSigninBubbleView::GetModalType() const { |
| + return is_sync_dialog_? ui::MODAL_TYPE_CHILD : ui::MODAL_TYPE_NONE; |
| +} |
| + |
| void OneClickSigninBubbleView::AnimationEnded(const ui::Animation* animation) { |
| views::BubbleDelegateView::AnimationEnded(animation); |
| if (message_loop_for_testing_) |
| @@ -350,33 +153,103 @@ void OneClickSigninBubbleView::Init() { |
| cs->AddColumn(views::GridLayout::TRAILING, views::GridLayout::CENTER, 0, |
| views::GridLayout::USE_PREF, 0, 0); |
| - InitContent(layout); |
| + is_sync_dialog_ ? InitDialogContent(layout) : InitBubbleContent(layout); |
| // Add controls at the bottom. |
| - advanced_link_= CreateAdvancedLink(); |
| - GetButtons(&ok_button_, &undo_button_); |
| - ok_button_->SetIsDefault(true); |
| + InitAdvancedLink(); |
| layout->StartRow(0, COLUMN_SET_CONTROLS); |
| layout->AddView(advanced_link_); |
| - layout->AddView(ok_button_); |
| - layout->AddView(undo_button_); |
| + |
| + InitButtons(layout); |
| + ok_button_->SetIsDefault(true); |
| AddAccelerator(ui::Accelerator(ui::VKEY_RETURN, 0)); |
| } |
| -void OneClickSigninBubbleView::InitContent(views::GridLayout* layout) { |
| +void OneClickSigninBubbleView::InitBubbleContent(views::GridLayout* layout) { |
| // Add main text description. |
| - views::Label* label = new views::Label( |
| - l10n_util::GetStringUTF16(IDS_ONE_CLICK_SIGNIN_BUBBLE_MESSAGE)); |
| + layout->StartRow(0, COLUMN_SET_FILL_ALIGN); |
| + |
| + views::Label* label = !error_message_.empty() ? |
| + new views::Label(error_message_) : |
| + new views::Label( |
| + l10n_util::GetStringUTF16(IDS_ONE_CLICK_SIGNIN_BUBBLE_MESSAGE)); |
| + |
| label->SetMultiLine(true); |
| label->SetHorizontalAlignment(gfx::ALIGN_LEFT); |
| label->SizeToFit(kMinimumLabelWidth); |
| - |
| - layout->StartRow(0, COLUMN_SET_FILL_ALIGN); |
| layout->AddView(label); |
| - layout->AddPaddingRow(0, views::kRelatedControlSmallVerticalSpacing); |
| + layout->StartRow(0, COLUMN_SET_CONTROLS); |
| + |
| + InitLearnMoreLink(); |
| + layout->AddView(learn_more_link_); |
| +} |
| + |
| +void OneClickSigninBubbleView::InitDialogContent(views::GridLayout* layout) { |
| + // Column set for title bar. |
| + views::ColumnSet* cs = layout->AddColumnSet(COLUMN_SET_TITLE_BAR); |
| + cs->AddColumn(views::GridLayout::LEADING, views::GridLayout::CENTER, 0, |
| + views::GridLayout::USE_PREF, 0, 0); |
| + cs->AddPaddingColumn(1, views::kUnrelatedControlHorizontalSpacing); |
| + cs->AddColumn(views::GridLayout::TRAILING, views::GridLayout::CENTER, 0, |
| + views::GridLayout::USE_PREF, 0, 0); |
| + |
| + ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); |
| + |
| + { |
| + layout->StartRow(0, COLUMN_SET_TITLE_BAR); |
| + |
| + views::Label* label = new views::Label(email_.empty() ? |
| + l10n_util::GetStringUTF16(IDS_ONE_CLICK_SIGNIN_DIALOG_TITLE) : |
| + l10n_util::GetStringFUTF16(IDS_ONE_CLICK_SIGNIN_DIALOG_TITLE_NEW, |
| + email_)); |
| + label->SetHorizontalAlignment(gfx::ALIGN_LEFT); |
| + label->SetFont(label->font().DeriveFont(3, gfx::Font::BOLD)); |
| + layout->AddView(label); |
| + |
| + close_button_ = new views::ImageButton(this); |
| + close_button_->SetImage(views::ImageButton::STATE_NORMAL, |
| + rb.GetImageNamed(IDR_CLOSE_2).ToImageSkia()); |
| + close_button_->SetImage(views::ImageButton::STATE_HOVERED, |
| + rb.GetImageNamed(IDR_CLOSE_2_H).ToImageSkia()); |
| + close_button_->SetImage(views::ImageButton::STATE_PRESSED, |
| + rb.GetImageNamed(IDR_CLOSE_2_P).ToImageSkia()); |
| + |
| + layout->AddView(close_button_); |
| + } |
| + |
| + layout->AddPaddingRow(0, views::kUnrelatedControlVerticalSpacing); |
| + |
| + { |
| + layout->StartRow(0, COLUMN_SET_FILL_ALIGN); |
| + |
| + views::Label* label = new views::Label(email_.empty() ? |
| + l10n_util::GetStringUTF16(IDS_ONE_CLICK_SIGNIN_DIALOG_MESSAGE) : |
| + l10n_util::GetStringFUTF16(IDS_ONE_CLICK_SIGNIN_DIALOG_MESSAGE_NEW, |
| + email_)); |
| + label->SetMultiLine(true); |
| + label->SetHorizontalAlignment(gfx::ALIGN_LEFT); |
| + label->SizeToFit(kMinimumDialogLabelWidth); |
| + layout->AddView(label); |
| + |
| + layout->StartRow(0, COLUMN_SET_FILL_ALIGN); |
| + |
| + InitLearnMoreLink(); |
| + layout->AddView(learn_more_link_, 1, 1, views::GridLayout::TRAILING, |
| + views::GridLayout::CENTER); |
| + } |
| + |
| + layout->AddPaddingRow(0, views::kUnrelatedControlVerticalSpacing); |
| +} |
| + |
| +void OneClickSigninBubbleView::InitButtons(views::GridLayout* layout) { |
| + GetButtons(&ok_button_, &undo_button_); |
| + layout->AddView(ok_button_); |
| + |
| + if (is_sync_dialog_) |
| + layout->AddView(undo_button_); |
| } |
| void OneClickSigninBubbleView::GetButtons(views::LabelButton** ok_button, |
| @@ -384,53 +257,64 @@ void OneClickSigninBubbleView::GetButtons(views::LabelButton** ok_button, |
| *ok_button = new views::LabelButton(this, string16()); |
| (*ok_button)->SetStyle(views::Button::STYLE_NATIVE_TEXTBUTTON); |
| - *undo_button = new views::LabelButton(this, string16()); |
| - (*undo_button)->SetStyle(views::Button::STYLE_NATIVE_TEXTBUTTON); |
| - |
| // The default size of the buttons is too large. To allow them to be smaller |
| - // ignore the minimum default size. Furthermore, to make sure they are the |
| - // same size, SetText() is called with both strings on both buttons. |
| + // ignore the minimum default size., |
| (*ok_button)->set_min_size(gfx::Size()); |
| - (*undo_button)->set_min_size(gfx::Size()); |
| - string16 ok_label = l10n_util::GetStringUTF16(IDS_OK); |
| - string16 undo_label = l10n_util::GetStringUTF16(IDS_ONE_CLICK_BUBBLE_UNDO); |
| - (*ok_button)->SetText(undo_label); |
| - (*ok_button)->SetText(ok_label); |
| - (*undo_button)->SetText(ok_label); |
| - (*undo_button)->SetText(undo_label); |
| -} |
| -views::Link* OneClickSigninBubbleView::CreateAdvancedLink() { |
| - views::Link* advanced_link= new views::Link( |
| - l10n_util::GetStringUTF16(IDS_SYNC_PROMO_NTP_BUBBLE_ADVANCED)); |
| - advanced_link->set_listener(this); |
| - advanced_link->SetHorizontalAlignment(gfx::ALIGN_LEFT); |
| - return advanced_link; |
| + string16 ok_label; |
| + |
| + if (is_sync_dialog_) { |
| + *undo_button = new views::LabelButton(this, string16()); |
| + (*undo_button)->SetStyle(views::Button::STYLE_NATIVE_TEXTBUTTON); |
| + (*undo_button)->set_min_size(gfx::Size()); |
| + |
| + ok_label = l10n_util::GetStringUTF16(IDS_ONE_CLICK_SIGNIN_DIALOG_OK_BUTTON); |
| + string16 undo_label = |
| + l10n_util::GetStringUTF16(IDS_ONE_CLICK_SIGNIN_DIALOG_UNDO_BUTTON); |
| + |
| + // To make sure they are the same size, SetText() is called |
| + // with both strings on both buttons. |
| + (*ok_button)->SetText(undo_label); |
| + (*ok_button)->SetText(ok_label); |
| + (*undo_button)->SetText(ok_label); |
| + (*undo_button)->SetText(undo_label); |
| + } else { |
| + ok_label = l10n_util::GetStringUTF16(IDS_OK); |
| + (*ok_button)->SetText(ok_label); |
| + } |
| } |
| -void OneClickSigninBubbleView::WindowClosing() { |
| - // We have to reset |bubble_view_| here, not in our destructor, because |
| - // we'll be destroyed asynchronously and the shown state will be checked |
| - // before then. |
| - DCHECK_EQ(bubble_view_, this); |
| - bubble_view_ = NULL; |
| +void OneClickSigninBubbleView::InitAdvancedLink() { |
| + advanced_link_ = is_sync_dialog_ ? |
| + new views::Link( |
| + l10n_util::GetStringUTF16(IDS_ONE_CLICK_SIGNIN_DIALOG_ADVANCED)): |
| + new views::Link( |
| + l10n_util::GetStringUTF16(IDS_ONE_CLICK_SIGNIN_DIALOG_ADVANCED)); |
| - if (!start_sync_callback_.is_null()) { |
| - base::ResetAndReturn(&start_sync_callback_).Run( |
| - OneClickSigninSyncStarter::SYNC_WITH_DEFAULT_SETTINGS); |
| - } |
| + advanced_link_->set_listener(this); |
| + advanced_link_->SetHorizontalAlignment(gfx::ALIGN_LEFT); |
| +} |
| + |
| +void OneClickSigninBubbleView::InitLearnMoreLink() { |
| + learn_more_link_ = new views::Link( |
| + l10n_util::GetStringUTF16(IDS_LEARN_MORE)); |
| + learn_more_link_->set_listener(this); |
| + learn_more_link_->SetHorizontalAlignment(gfx::ALIGN_LEFT); |
| } |
| bool OneClickSigninBubbleView::AcceleratorPressed( |
| - const ui::Accelerator& accelerator) { |
| + const ui::Accelerator& accelerator) { |
| if (accelerator.key_code() == ui::VKEY_RETURN || |
| accelerator.key_code() == ui::VKEY_ESCAPE) { |
| - StartFade(false); |
| - if (accelerator.key_code() == ui::VKEY_RETURN) { |
| - base::ResetAndReturn(&start_sync_callback_).Run( |
| + OneClickSigninBubbleView::Hide(); |
| + |
| + if (is_sync_dialog_) { |
| + if (accelerator.key_code() == ui::VKEY_RETURN) { |
| + base::ResetAndReturn(&start_sync_callback_).Run( |
| OneClickSigninSyncStarter::SYNC_WITH_DEFAULT_SETTINGS); |
| - } else { |
| - start_sync_callback_.Reset(); |
| + } else { |
| + start_sync_callback_.Reset(); |
| + } |
| } |
| return true; |
| @@ -453,15 +337,53 @@ views::Button* OneClickSigninBubbleView::GetUndoButton() { |
| void OneClickSigninBubbleView::LinkClicked(views::Link* source, |
| int event_flags) { |
| - StartFade(false); |
| - base::ResetAndReturn(&start_sync_callback_).Run( |
| + if (source == learn_more_link_) { |
| + WindowOpenDisposition location = |
| + is_sync_dialog_ ? NEW_WINDOW : NEW_FOREGROUND_TAB; |
| + |
| + content::OpenURLParams params( |
| + GURL(chrome::kChromeSyncLearnMoreURL), content::Referrer(), |
| + location, content::PAGE_TRANSITION_LINK, false); |
| + web_contents_->OpenURL(params); |
| + |
| + // don't hide the modal dialog, as this is an informational link |
| + if (is_sync_dialog_) |
| + return; |
| + } else if (source == advanced_link_) { |
| + if (is_sync_dialog_) { |
| + base::ResetAndReturn(&start_sync_callback_).Run( |
| OneClickSigninSyncStarter::CONFIGURE_SYNC_FIRST); |
| + } else { |
| + content::OpenURLParams params( |
| + GURL(chrome::kChromeUISettingsURL), content::Referrer(), |
| + CURRENT_TAB, content::PAGE_TRANSITION_LINK, false); |
| + web_contents_->OpenURL(params); |
| + } |
| + } |
| + |
| + Hide(); |
| } |
| void OneClickSigninBubbleView::ButtonPressed(views::Button* sender, |
| const ui::Event& event) { |
| - StartFade(false); |
| - base::ResetAndReturn(&start_sync_callback_).Run((sender == ok_button_) ? |
| + Hide(); |
| + |
| + if (is_sync_dialog_) { |
| + base::ResetAndReturn(&start_sync_callback_).Run((sender == ok_button_) ? |
| OneClickSigninSyncStarter::SYNC_WITH_DEFAULT_SETTINGS : |
| OneClickSigninSyncStarter::UNDO_SYNC); |
| + } |
| +} |
| + |
| +void OneClickSigninBubbleView::WindowClosing() { |
| + // We have to reset |bubble_view_| here, not in our destructor, because |
| + // we'll be destroyed asynchronously and the shown state will be checked |
| + // before then. |
| + DCHECK_EQ(bubble_view_, this); |
| + bubble_view_ = NULL; |
| + |
| + if (is_sync_dialog_ && !start_sync_callback_.is_null()) { |
| + base::ResetAndReturn(&start_sync_callback_).Run( |
| + OneClickSigninSyncStarter::SYNC_WITH_DEFAULT_SETTINGS); |
| + } |
| } |