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

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: Fixed/reenabled browser tests (hopefully) 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..c7c2ad11c2632b3fd331652433a8fb2e478fc1ce 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
@@ -28,7 +28,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;
@@ -57,16 +57,31 @@ class OneClickSigninDialogView : public OneClickSigninBubbleView {
// Overridden from OneClickSigninBubbleView:
virtual void InitContent(views::GridLayout* layout) OVERRIDE;
+
+ virtual void InitButtons(views::GridLayout* layout) OVERRIDE;
virtual void GetButtons(views::LabelButton** ok_button,
views::LabelButton** undo_button) OVERRIDE;
- virtual views::Link* GetAdvancedLink() OVERRIDE;
+
+ // Overridden from views::ButtonListener:
+ virtual void ButtonPressed(views::Button* sender,
+ const ui::Event& event) OVERRIDE;
// Overridden from views::LinkListener:
virtual void LinkClicked(views::Link* source, int event_flags) OVERRIDE;
+ // views::View method:
tfarina 2013/04/16 17:25:28 be consistent with the file you are modifying. All
+ virtual bool AcceleratorPressed(const ui::Accelerator& accelerator) OVERRIDE;
+
+ // views::WidgetDelegate method:
+ virtual void WindowClosing() OVERRIDE;
+
const string16 email_;
- content::WebContents* web_content_;
- views::Link* learn_more_link_;
+
+ // This callback is nulled once its called, so that it is called only once.
+ // It will be called when the bubble is closed if it has not been called
+ // and nulled earlier.
+ BrowserWindow::StartSyncCallback start_sync_callback_;
+
views::ImageButton* close_button_;
DISALLOW_COPY_AND_ASSIGN(OneClickSigninDialogView);
@@ -77,11 +92,11 @@ OneClickSigninDialogView::OneClickSigninDialogView(
views::View* anchor_view,
const string16& email,
const BrowserWindow::StartSyncCallback& start_sync_callback)
- : OneClickSigninBubbleView(anchor_view, start_sync_callback),
+ : OneClickSigninBubbleView(web_content, anchor_view, ""),
bcwhite 2013/04/16 15:22:00 std::string() is better than "", here and elsewher
noms (inactive) 2013/04/16 17:15:37 Done.
tfarina 2013/04/16 17:25:28 It isn't just better: https://codereview.chromium.
email_(email),
- web_content_(web_content),
- learn_more_link_(NULL),
- close_button_(NULL) {
+ close_button_(NULL),
+ start_sync_callback_(start_sync_callback) {
+ 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);
@@ -122,6 +137,7 @@ void OneClickSigninDialogView::InitContent(views::GridLayout* layout) {
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_);
}
@@ -141,10 +157,7 @@ void OneClickSigninDialogView::InitContent(views::GridLayout* layout) {
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);
+ learn_more_link_ = GetLearnMoreLink();
layout->AddView(learn_more_link_, 1, 1, views::GridLayout::TRAILING,
views::GridLayout::CENTER);
}
@@ -152,6 +165,12 @@ void OneClickSigninDialogView::InitContent(views::GridLayout* layout) {
layout->AddPaddingRow(0, views::kUnrelatedControlVerticalSpacing);
}
+void OneClickSigninDialogView::InitButtons(views::GridLayout* layout) {
+ GetButtons(&ok_button_, &undo_button_);
+ layout->AddView(ok_button_);
+ layout->AddView(undo_button_);
+}
+
void OneClickSigninDialogView::GetButtons(views::LabelButton** ok_button,
views::LabelButton** undo_button) {
*ok_button = new views::LabelButton(this, string16());
@@ -175,12 +194,13 @@ void OneClickSigninDialogView::GetButtons(views::LabelButton** ok_button,
(*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::ButtonPressed(views::Button* sender,
+ const ui::Event& event) {
+ OneClickSigninBubbleView::ButtonPressed(sender, event);
+
+ base::ResetAndReturn(&start_sync_callback_).Run((sender == ok_button_) ?
+ OneClickSigninSyncStarter::SYNC_WITH_DEFAULT_SETTINGS :
+ OneClickSigninSyncStarter::UNDO_SYNC);
}
void OneClickSigninDialogView::LinkClicked(views::Link* source,
@@ -193,9 +213,35 @@ void OneClickSigninDialogView::LinkClicked(views::Link* source,
return;
}
- OneClickSigninBubbleView::LinkClicked(source, event_flags);
+ base::ResetAndReturn(&start_sync_callback_).Run(
+ OneClickSigninSyncStarter::CONFIGURE_SYNC_FIRST);
+
+ OneClickSigninBubbleView::Hide();
}
+bool OneClickSigninDialogView::AcceleratorPressed(
+ const ui::Accelerator& accelerator) {
+ bool isAcceleratorPressed =
+ OneClickSigninBubbleView::AcceleratorPressed(accelerator);
+
+ if (accelerator.key_code() == ui::VKEY_RETURN) {
+ base::ResetAndReturn(&start_sync_callback_).Run(
+ OneClickSigninSyncStarter::SYNC_WITH_DEFAULT_SETTINGS);
+ } else {
+ start_sync_callback_.Reset();
+ }
+
+ return isAcceleratorPressed;
+}
+
+void OneClickSigninDialogView::WindowClosing() {
+ OneClickSigninBubbleView::WindowClosing();
+
+ if (!start_sync_callback_.is_null()) {
+ base::ResetAndReturn(&start_sync_callback_).Run(
+ OneClickSigninSyncStarter::SYNC_WITH_DEFAULT_SETTINGS);
+ }
+}
} // namespace
// OneClickSigninBubbleView ----------------------------------------------------
@@ -208,14 +254,16 @@ void OneClickSigninBubbleView::ShowBubble(
BrowserWindow::OneClickSigninBubbleType type,
const string16& email,
ToolbarView* toolbar_view,
- const BrowserWindow::StartSyncCallback& start_sync) {
+ const BrowserWindow::StartSyncCallback& start_sync,
+ const std::string& error_message) {
if (IsShowing())
return;
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);
break;
case BrowserWindow::ONE_CLICK_SIGNIN_BUBBLE_TYPE_MODAL_DIALOG:
bubble_view_ = new OneClickSigninDialogView(
@@ -244,15 +292,17 @@ void OneClickSigninBubbleView::Hide() {
}
OneClickSigninBubbleView::OneClickSigninBubbleView(
+ content::WebContents* web_content,
views::View* anchor_view,
- const BrowserWindow::StartSyncCallback& start_sync_callback)
+ const std::string& error_message)
: BubbleDelegateView(anchor_view, views::BubbleBorder::TOP_RIGHT),
+ web_content_(web_content),
+ error_message_(error_message),
advanced_link_(NULL),
+ learn_more_link_(NULL),
ok_button_(NULL),
undo_button_(NULL),
- start_sync_callback_(start_sync_callback),
message_loop_for_testing_(NULL) {
- DCHECK(!start_sync_callback_.is_null());
}
OneClickSigninBubbleView::~OneClickSigninBubbleView() {
@@ -289,29 +339,41 @@ void OneClickSigninBubbleView::Init() {
// Add controls at the bottom.
advanced_link_= GetAdvancedLink();
- GetButtons(&ok_button_, &undo_button_);
- ok_button_->SetIsDefault(true);
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) {
// 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(UTF8ToUTF16(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);
+
+ // and learn more link
+ learn_more_link_ = GetLearnMoreLink();
+
+ layout->AddView(learn_more_link_);
+}
+
+void OneClickSigninBubbleView::InitButtons(views::GridLayout* layout) {
+ GetButtons(&ok_button_, &undo_button_);
+ layout->AddView(ok_button_);
}
void OneClickSigninBubbleView::GetButtons(views::LabelButton** ok_button,
@@ -327,47 +389,33 @@ void OneClickSigninBubbleView::GetButtons(views::LabelButton** ok_button,
// 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_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));
+ 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 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;
+views::Link* OneClickSigninBubbleView::GetLearnMoreLink() {
+ views::Link* 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);
- if (!start_sync_callback_.is_null()) {
- base::ResetAndReturn(&start_sync_callback_).Run(
- OneClickSigninSyncStarter::SYNC_WITH_DEFAULT_SETTINGS);
- }
+ return learn_more_link_;
}
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(
- OneClickSigninSyncStarter::SYNC_WITH_DEFAULT_SETTINGS);
- } else {
- start_sync_callback_.Reset();
- }
-
+ OneClickSigninBubbleView::Hide();
return true;
}
@@ -376,15 +424,28 @@ bool OneClickSigninBubbleView::AcceleratorPressed(
void OneClickSigninBubbleView::LinkClicked(views::Link* source,
int event_flags) {
- StartFade(false);
- base::ResetAndReturn(&start_sync_callback_).Run(
- OneClickSigninSyncStarter::CONFIGURE_SYNC_FIRST);
+ if (source == learn_more_link_) {
+ content::OpenURLParams params(
+ GURL(chrome::kChromeSyncLearnMoreURL), content::Referrer(),
+ NEW_FOREGROUND_TAB, content::PAGE_TRANSITION_LINK, false);
+ web_content_->OpenURL(params);
+ } else if (source == advanced_link_) {
+ content::OpenURLParams params(
+ GURL(chrome::kChromeUISettingsURL), content::Referrer(),
+ CURRENT_TAB, content::PAGE_TRANSITION_LINK, false);
+ web_content_->OpenURL(params);
+ }
}
void OneClickSigninBubbleView::ButtonPressed(views::Button* sender,
const ui::Event& event) {
- StartFade(false);
- base::ResetAndReturn(&start_sync_callback_).Run((sender == ok_button_) ?
- OneClickSigninSyncStarter::SYNC_WITH_DEFAULT_SETTINGS :
- OneClickSigninSyncStarter::UNDO_SYNC);
+ OneClickSigninBubbleView::Hide();
+}
+
+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;
}

Powered by Google App Engine
This is Rietveld 408576698