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

Unified Diff: chrome/browser/ui/gtk/one_click_signin_bubble_gtk.cc

Issue 14258007: GTK: Display a native bubble (instead of the JS one) after the web signin flow. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@ntpBubble
Patch Set: Rebase with master 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/gtk/one_click_signin_bubble_gtk.cc
diff --git a/chrome/browser/ui/gtk/one_click_signin_bubble_gtk.cc b/chrome/browser/ui/gtk/one_click_signin_bubble_gtk.cc
index c544cecd073a8932dc94ccc8e1455c0e686e21d8..d3bb9d34150268bc8cb58fbc9ed45e719d3451ac 100644
--- a/chrome/browser/ui/gtk/one_click_signin_bubble_gtk.cc
+++ b/chrome/browser/ui/gtk/one_click_signin_bubble_gtk.cc
@@ -32,11 +32,13 @@ OneClickSigninBubbleGtk::OneClickSigninBubbleGtk(
BrowserWindowGtk* browser_window_gtk,
BrowserWindow::OneClickSigninBubbleType type,
const string16& email,
+ const string16& error_message,
const BrowserWindow::StartSyncCallback& start_sync_callback)
: bubble_(NULL),
- start_sync_callback_(start_sync_callback),
- is_modal_(type != BrowserWindow::ONE_CLICK_SIGNIN_BUBBLE_TYPE_BUBBLE),
email_(email),
+ error_message_(error_message),
+ start_sync_callback_(start_sync_callback),
+ is_sync_dialog_(type!=BrowserWindow::ONE_CLICK_SIGNIN_BUBBLE_TYPE_BUBBLE),
message_label_(NULL),
advanced_link_(NULL),
ok_button_(NULL),
@@ -50,7 +52,7 @@ OneClickSigninBubbleGtk::OneClickSigninBubbleGtk(
void OneClickSigninBubbleGtk::BubbleClosing(
BubbleGtk* bubble, bool closed_by_escape) {
- if (!start_sync_callback_.is_null()) {
+ if (is_sync_dialog_ && !start_sync_callback_.is_null()) {
base::ResetAndReturn(&start_sync_callback_).Run(
OneClickSigninSyncStarter::SYNC_WITH_DEFAULT_SETTINGS);
}
@@ -65,40 +67,55 @@ void OneClickSigninBubbleGtk::BubbleClosing(
}
void OneClickSigninBubbleGtk::OnClickAdvancedLink(GtkWidget* link) {
- OneClickSigninHelper::LogConfirmHistogramValue(
+ if (is_sync_dialog_) {
+ OneClickSigninHelper::LogConfirmHistogramValue(
clicked_learn_more_ ?
one_click_signin::HISTOGRAM_CONFIRM_LEARN_MORE_ADVANCED :
one_click_signin::HISTOGRAM_CONFIRM_ADVANCED);
- base::ResetAndReturn(&start_sync_callback_).Run(
+
+ base::ResetAndReturn(&start_sync_callback_).Run(
OneClickSigninSyncStarter::CONFIGURE_SYNC_FIRST);
+ } else {
+ Browser* browser = chrome::FindBrowserWithWindow(
+ gtk_window_get_transient_for(bubble_->GetNativeWindow()));
+ DCHECK(browser);
+ chrome::NavigateParams params(browser, GURL(chrome::kChromeUISettingsURL),
+ content::PAGE_TRANSITION_LINK);
+ params.disposition = CURRENT_TAB;
+ chrome::Navigate(&params);
+ }
bubble_->Close();
}
void OneClickSigninBubbleGtk::OnClickOK(GtkWidget* link) {
- OneClickSigninHelper::LogConfirmHistogramValue(
+ if (is_sync_dialog_) {
+ OneClickSigninHelper::LogConfirmHistogramValue(
clicked_learn_more_ ?
one_click_signin::HISTOGRAM_CONFIRM_LEARN_MORE_OK :
one_click_signin::HISTOGRAM_CONFIRM_OK);
- base::ResetAndReturn(&start_sync_callback_).Run(
+ base::ResetAndReturn(&start_sync_callback_).Run(
OneClickSigninSyncStarter::SYNC_WITH_DEFAULT_SETTINGS);
+ }
bubble_->Close();
}
void OneClickSigninBubbleGtk::OnClickUndo(GtkWidget* link) {
- OneClickSigninHelper::LogConfirmHistogramValue(
+ if (is_sync_dialog_) {
+ OneClickSigninHelper::LogConfirmHistogramValue(
clicked_learn_more_ ?
one_click_signin::HISTOGRAM_CONFIRM_LEARN_MORE_UNDO :
one_click_signin::HISTOGRAM_CONFIRM_UNDO);
- base::ResetAndReturn(&start_sync_callback_).Run(
- OneClickSigninSyncStarter::UNDO_SYNC);
+ base::ResetAndReturn(&start_sync_callback_).Run(
+ OneClickSigninSyncStarter::UNDO_SYNC);
+ }
bubble_->Close();
}
void OneClickSigninBubbleGtk::OnClickLearnMoreLink(GtkWidget* link) {
- // We only want to log the Learn More click once per bubble instance.
- if (!clicked_learn_more_) {
+ // We only want to log the Learn More click once per modal dialog instance.
+ if (is_sync_dialog_ && !clicked_learn_more_) {
OneClickSigninHelper::LogConfirmHistogramValue(
one_click_signin::HISTOGRAM_CONFIRM_LEARN_MORE);
clicked_learn_more_ = true;
@@ -110,6 +127,10 @@ void OneClickSigninBubbleGtk::OnClickLearnMoreLink(GtkWidget* link) {
content::PAGE_TRANSITION_LINK);
params.disposition = NEW_WINDOW;
chrome::Navigate(&params);
+
+ if (!is_sync_dialog_) {
+ bubble_->Close();
+ }
}
void OneClickSigninBubbleGtk::OnClickCloseButton(GtkWidget* button) {
@@ -126,21 +147,22 @@ OneClickSigninBubbleGtk::~OneClickSigninBubbleGtk() {
void OneClickSigninBubbleGtk::InitializeWidgets(
BrowserWindowGtk* browser_window_gtk) {
- // Message.
- std::string message;
- if (is_modal_) {
- message = email_.empty() ?
+ // Main dialog/bubble message.
+ std::string label_text;
+ if (is_sync_dialog_) {
+ label_text = email_.empty() ?
l10n_util::GetStringUTF8(IDS_ONE_CLICK_SIGNIN_DIALOG_MESSAGE) :
l10n_util::GetStringFUTF8(IDS_ONE_CLICK_SIGNIN_DIALOG_MESSAGE_NEW,
email_);
} else {
- message = l10n_util::GetStringUTF8(IDS_ONE_CLICK_SIGNIN_BUBBLE_MESSAGE);
+ label_text = !error_message_.empty() ? UTF16ToUTF8(error_message_):
+ l10n_util::GetStringUTF8(IDS_ONE_CLICK_SIGNIN_BUBBLE_MESSAGE);
}
- message_label_ = gtk_label_new(message.c_str());
+ message_label_ = gtk_label_new(label_text.c_str());
gtk_label_set_line_wrap(GTK_LABEL(message_label_), TRUE);
gtk_misc_set_alignment(GTK_MISC(message_label_), 0.0, 0.5);
- if (is_modal_)
+ if (is_sync_dialog_)
gtk_widget_set_size_request(message_label_, kModalDialogMessageWidth, -1);
GtkThemeService* const theme_provider = GtkThemeService::GetFrom(
@@ -149,39 +171,38 @@ void OneClickSigninBubbleGtk::InitializeWidgets(
// Advanced link.
advanced_link_ = theme_provider->BuildChromeLinkButton(
l10n_util::GetStringUTF8(
- is_modal_ ? IDS_ONE_CLICK_SIGNIN_DIALOG_ADVANCED :
- IDS_SYNC_PROMO_NTP_BUBBLE_ADVANCED));
+ IDS_ONE_CLICK_SIGNIN_DIALOG_ADVANCED));
g_signal_connect(advanced_link_, "clicked",
G_CALLBACK(OnClickAdvancedLinkThunk), this);
+ // The 'Learn More...' link
+ learn_more_ = theme_provider->BuildChromeLinkButton(
+ l10n_util::GetStringUTF8(IDS_LEARN_MORE));
+ g_signal_connect(learn_more_, "clicked",
+ G_CALLBACK(OnClickLearnMoreLinkThunk), this);
+
// Make the OK and Undo buttons the same size horizontally.
GtkSizeGroup* size_group = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
// OK Button.
ok_button_ = gtk_button_new_with_label(l10n_util::GetStringUTF8(
- is_modal_ ? IDS_ONE_CLICK_SIGNIN_DIALOG_OK_BUTTON : IDS_OK).c_str());
+ is_sync_dialog_ ? IDS_ONE_CLICK_SIGNIN_DIALOG_OK_BUTTON :
+ IDS_OK).c_str());
g_signal_connect(ok_button_, "clicked",
G_CALLBACK(OnClickOKThunk), this);
gtk_size_group_add_widget(size_group, ok_button_);
- // Undo Button.
+ if (!is_sync_dialog_)
+ return;
+
+ // The undo button is only in the modal dialog
undo_button_ = gtk_button_new_with_label(l10n_util::GetStringUTF8(
- is_modal_? IDS_ONE_CLICK_SIGNIN_DIALOG_UNDO_BUTTON :
- IDS_ONE_CLICK_BUBBLE_UNDO).c_str());
+ IDS_ONE_CLICK_SIGNIN_DIALOG_UNDO_BUTTON).c_str());
g_signal_connect(undo_button_, "clicked",
G_CALLBACK(OnClickUndoThunk), this);
gtk_size_group_add_widget(size_group, undo_button_);
g_object_unref(size_group);
- if (!is_modal_)
- return;
-
- // The close button and the 'Learn More...' link are only in the modal dialog.
- learn_more_ = theme_provider->BuildChromeLinkButton(
- l10n_util::GetStringUTF8(IDS_LEARN_MORE));
- g_signal_connect(learn_more_, "clicked",
- G_CALLBACK(OnClickLearnMoreLinkThunk), this);
-
header_label_ = theme_provider->BuildLabel(email_.empty() ?
l10n_util::GetStringUTF8(IDS_ONE_CLICK_SIGNIN_DIALOG_TITLE) :
l10n_util::GetStringFUTF8(IDS_ONE_CLICK_SIGNIN_DIALOG_TITLE_NEW, email_),
@@ -217,8 +238,13 @@ GtkWidget* OneClickSigninBubbleGtk::LayoutWidgets() {
if (learn_more_) {
GtkWidget* box = gtk_hbox_new(FALSE, ui::kControlSpacing);
- gtk_box_pack_end(GTK_BOX(box),
+ if (is_sync_dialog_){
+ gtk_box_pack_end(GTK_BOX(box),
+ learn_more_, FALSE, FALSE, 0);
+ } else {
+ gtk_box_pack_start(GTK_BOX(box),
learn_more_, FALSE, FALSE, 0);
+ }
gtk_box_pack_start(GTK_BOX(content_widget),
box, TRUE, TRUE, 0);
}
@@ -231,33 +257,41 @@ GtkWidget* OneClickSigninBubbleGtk::LayoutWidgets() {
advanced_link_, FALSE, FALSE, 0);
gtk_box_pack_end(GTK_BOX(bottom_line),
ok_button_, FALSE, FALSE, 0);
- gtk_box_pack_end(GTK_BOX(bottom_line),
- undo_button_, FALSE, FALSE, 0);
+
+ if (is_sync_dialog_) {
+ gtk_box_pack_end(GTK_BOX(bottom_line),
+ undo_button_, FALSE, FALSE, 0);
+ }
return content_widget;
}
void OneClickSigninBubbleGtk::ShowWidget(BrowserWindowGtk* browser_window_gtk,
GtkWidget* content_widget) {
- OneClickSigninHelper::LogConfirmHistogramValue(
- one_click_signin::HISTOGRAM_CONFIRM_SHOWN);
+ if (is_sync_dialog_) {
+ OneClickSigninHelper::LogConfirmHistogramValue(
+ one_click_signin::HISTOGRAM_CONFIRM_SHOWN);
+ }
+
GtkThemeService* const theme_provider = GtkThemeService::GetFrom(
browser_window_gtk->browser()->profile());
- GtkWidget* parent_widget = is_modal_ ?
+ GtkWidget* parent_widget = is_sync_dialog_ ?
browser_window_gtk->GetToolbar()->widget() :
browser_window_gtk->GetToolbar()->GetAppMenuButton();
gfx::Rect bounds = gtk_util::WidgetBounds(parent_widget);
- int flags = (is_modal_ ? BubbleGtk::NO_ACCELERATORS : BubbleGtk::GRAB_INPUT) |
- BubbleGtk::MATCH_SYSTEM_THEME |
- BubbleGtk::POPUP_WINDOW;
+ int flags = (is_sync_dialog_ ? BubbleGtk::NO_ACCELERATORS :
+ BubbleGtk::GRAB_INPUT) |
+ BubbleGtk::MATCH_SYSTEM_THEME |
+ BubbleGtk::POPUP_WINDOW;
bubble_ = BubbleGtk::Show(parent_widget, &bounds, content_widget,
- is_modal_ ? BubbleGtk::CENTER_OVER_RECT :
+ is_sync_dialog_ ? BubbleGtk::CENTER_OVER_RECT :
BubbleGtk::ANCHOR_TOP_RIGHT,
flags,
theme_provider, this);
- if (is_modal_) {
- gtk_window_set_transient_for(bubble_->GetNativeWindow(),
+
+ gtk_window_set_transient_for(bubble_->GetNativeWindow(),
browser_window_gtk->GetNativeWindow());
+ if (is_sync_dialog_) {
gtk_window_set_modal(bubble_->GetNativeWindow(), true);
gtk_window_set_focus(bubble_->GetNativeWindow(), ok_button_);
} else {
« no previous file with comments | « chrome/browser/ui/gtk/one_click_signin_bubble_gtk.h ('k') | chrome/browser/ui/gtk/one_click_signin_bubble_gtk_browsertest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698