Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1056)

Unified Diff: chrome/browser/ui/views/sync/one_click_signin_bubble_view.cc

Issue 13979003: Win: Display a native bubble (instead of the JS one) after the web signin flow. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 7 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 ca704334132c0ee2c197c084fb46b9c8c335f1bf..19f1fd9f89ede4f8655675b8993b7c037a7a46f6 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/common/url_constants.h"
@@ -28,7 +27,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;
@@ -42,164 +41,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* GetAdvancedLink() OVERRIDE;
-
- // Overridden from views::LinkListener:
- virtual void LinkClicked(views::Link* source, int event_flags) OVERRIDE;
-
- const string16 email_;
- content::WebContents* web_content_;
- views::Link* learn_more_link_;
- views::ImageButton* close_button_;
-
- 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) {
- 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) {
- // 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::GetAdvancedLink() {
- 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_) {
- content::OpenURLParams params(
- GURL(chrome::kChromeSyncLearnMoreURL), content::Referrer(),
- NEW_WINDOW, content::PAGE_TRANSITION_LINK, false);
- web_content_->OpenURL(params);
- return;
- }
-
- OneClickSigninBubbleView::LinkClicked(source, event_flags);
-}
-
} // namespace
-// OneClickSigninBubbleView ----------------------------------------------------
-
// static
OneClickSigninBubbleView* OneClickSigninBubbleView::bubble_view_ = NULL;
@@ -207,6 +50,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())
@@ -214,18 +58,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;
}
@@ -244,20 +89,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));
+ }
}
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_)
@@ -285,33 +151,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_= GetAdvancedLink();
- 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,
@@ -319,53 +255,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::GetAdvancedLink() {
- 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;
@@ -376,15 +323,53 @@ bool OneClickSigninBubbleView::AcceleratorPressed(
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);
+ }
}

Powered by Google App Engine
This is Rietveld 408576698