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

Unified Diff: chrome/browser/ui/views/bookmarks/bookmark_bubble_view.cc

Issue 2905243003: Cleanup BookmarkBubbleView, remove LocationBarBubbleDelegateView::GetDialogButtons() (Closed)
Patch Set: neater Created 3 years, 7 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/bookmarks/bookmark_bubble_view.cc
diff --git a/chrome/browser/ui/views/bookmarks/bookmark_bubble_view.cc b/chrome/browser/ui/views/bookmarks/bookmark_bubble_view.cc
index 13bdae13fef8db709d446ecf3d562b727b5df074..d84061ba0a405c1b157dd6dd751b0b42ebbe086d 100644
--- a/chrome/browser/ui/views/bookmarks/bookmark_bubble_view.cc
+++ b/chrome/browser/ui/views/bookmarks/bookmark_bubble_view.cc
@@ -4,14 +4,9 @@
#include "chrome/browser/ui/views/bookmarks/bookmark_bubble_view.h"
-#include <utility>
-
-#include "base/macros.h"
#include "base/metrics/user_metrics.h"
-#include "base/strings/string16.h"
#include "base/strings/string_util.h"
#include "base/strings/utf_string_conversions.h"
-#include "chrome/app/chrome_command_ids.h"
#include "chrome/browser/bookmarks/bookmark_model_factory.h"
#include "chrome/browser/platform_util.h"
#include "chrome/browser/profiles/profile.h"
@@ -29,11 +24,9 @@
#include "ui/accessibility/ax_node_data.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/events/keycodes/keyboard_codes.h"
-#include "ui/views/bubble/bubble_frame_view.h"
#include "ui/views/controls/button/md_text_button.h"
#include "ui/views/controls/combobox/combobox.h"
#include "ui/views/controls/label.h"
-#include "ui/views/controls/link.h"
#include "ui/views/controls/textfield/textfield.h"
#include "ui/views/layout/fill_layout.h"
#include "ui/views/layout/grid_layout.h"
@@ -60,6 +53,7 @@ class UnsizedCombobox : public views::Combobox {
explicit UnsizedCombobox(ui::ComboboxModel* model) : views::Combobox(model) {}
~UnsizedCombobox() override {}
+ // views::Combobox:
gfx::Size GetPreferredSize() const override {
return gfx::Size(0, views::Combobox::GetPreferredSize().height());
}
@@ -70,7 +64,7 @@ class UnsizedCombobox : public views::Combobox {
} // namespace
-BookmarkBubbleView* BookmarkBubbleView::bookmark_bubble_ = NULL;
+BookmarkBubbleView* BookmarkBubbleView::bookmark_bubble_ = nullptr;
// static
views::Widget* BookmarkBubbleView::ShowBubble(
@@ -100,7 +94,7 @@ views::Widget* BookmarkBubbleView::ShowBubble(
views::BubbleDialogDelegateView::CreateBubble(bookmark_bubble_);
bubble_widget->Show();
// Select the entire title textfield contents when the bubble is first shown.
- bookmark_bubble_->title_tf_->SelectAll(true);
+ bookmark_bubble_->name_field_->SelectAll(true);
bookmark_bubble_->SetArrowPaintType(views::BubbleBorder::PAINT_TRANSPARENT);
if (bookmark_bubble_->observer_) {
@@ -111,6 +105,7 @@ views::Widget* BookmarkBubbleView::ShowBubble(
return bubble_widget;
}
+// static
void BookmarkBubbleView::Hide() {
if (bookmark_bubble_)
bookmark_bubble_->GetWidget()->Close();
@@ -130,172 +125,7 @@ BookmarkBubbleView::~BookmarkBubbleView() {
delete parent_combobox_;
}
-void BookmarkBubbleView::WindowClosing() {
- // We have to reset |bubble_| here, not in our destructor, because we'll be
- // destroyed asynchronously and the shown state will be checked before then.
- DCHECK_EQ(bookmark_bubble_, this);
- bookmark_bubble_ = NULL;
- is_showing_ios_promotion_ = false;
-
- if (observer_)
- observer_->OnBookmarkBubbleHidden();
-}
-
-bool BookmarkBubbleView::AcceleratorPressed(
- const ui::Accelerator& accelerator) {
- ui::KeyboardCode key_code = accelerator.key_code();
- if (key_code == ui::VKEY_RETURN) {
- HandleButtonPressed(close_button_);
- return true;
- }
- if (key_code == ui::VKEY_E && accelerator.IsAltDown()) {
- HandleButtonPressed(edit_button_);
- return true;
- }
- if (key_code == ui::VKEY_R && accelerator.IsAltDown()) {
- HandleButtonPressed(remove_button_);
- return true;
- }
-
- return LocationBarBubbleDelegateView::AcceleratorPressed(accelerator);
-}
-
-void BookmarkBubbleView::Init() {
- remove_button_ = views::MdTextButton::CreateSecondaryUiButton(
- this, l10n_util::GetStringUTF16(IDS_BOOKMARK_BUBBLE_REMOVE_BOOKMARK));
-
- edit_button_ = views::MdTextButton::CreateSecondaryUiButton(
- this, l10n_util::GetStringUTF16(IDS_BOOKMARK_BUBBLE_OPTIONS));
-
- close_button_ = views::MdTextButton::CreateSecondaryUiButton(
- this, l10n_util::GetStringUTF16(IDS_DONE));
- close_button_->SetIsDefault(true);
-
- views::Label* combobox_label = new views::Label(
- l10n_util::GetStringUTF16(IDS_BOOKMARK_BUBBLE_FOLDER_TEXT));
-
- parent_combobox_ = new UnsizedCombobox(&parent_model_);
- parent_combobox_->set_listener(this);
- parent_combobox_->SetAccessibleName(
- l10n_util::GetStringUTF16(IDS_BOOKMARK_AX_BUBBLE_FOLDER_TEXT));
-
- SetLayoutManager(new views::FillLayout);
- bookmark_details_view_ = base::MakeUnique<View>();
- GridLayout* layout = new GridLayout(bookmark_details_view_.get());
- bookmark_details_view_->SetLayoutManager(layout);
-
- // This column set is used for the labels and textfields as well as the
- // buttons at the bottom.
- const int cs_id = 0;
- ColumnSet* cs = layout->AddColumnSet(cs_id);
- ChromeLayoutProvider* provider = ChromeLayoutProvider::Get();
-
- cs->AddColumn(provider->GetControlLabelGridAlignment(), GridLayout::CENTER, 0,
- GridLayout::USE_PREF, 0, 0);
- cs->AddPaddingColumn(
- 0, provider->GetDistanceMetric(DISTANCE_UNRELATED_CONTROL_HORIZONTAL));
-
- cs->AddColumn(GridLayout::FILL, GridLayout::CENTER, 0,
- GridLayout::USE_PREF, 0, 0);
- cs->AddPaddingColumn(1, provider->GetDistanceMetric(
- DISTANCE_UNRELATED_CONTROL_HORIZONTAL_LARGE));
-
- cs->AddColumn(GridLayout::LEADING, GridLayout::TRAILING, 0,
- GridLayout::USE_PREF, 0, 0);
- cs->AddPaddingColumn(0, provider->GetDistanceMetric(
- views::DISTANCE_RELATED_BUTTON_HORIZONTAL));
- cs->AddColumn(GridLayout::LEADING, GridLayout::TRAILING, 0,
- GridLayout::USE_PREF, 0, 0);
-
- layout->StartRow(0, cs_id);
- views::Label* label = new views::Label(
- l10n_util::GetStringUTF16(IDS_BOOKMARK_BUBBLE_TITLE_TEXT));
- layout->AddView(label);
- title_tf_ = new views::Textfield();
- title_tf_->SetText(GetTitle());
- title_tf_->SetAccessibleName(
- l10n_util::GetStringUTF16(IDS_BOOKMARK_AX_BUBBLE_TITLE_TEXT));
-
- layout->AddView(title_tf_, 5, 1);
-
- layout->AddPaddingRow(
- 0, provider->GetInsetsMetric(views::INSETS_DIALOG_CONTENTS).top());
-
- layout->StartRow(0, cs_id);
- layout->AddView(combobox_label);
- layout->AddView(parent_combobox_, 5, 1);
-
- layout->AddPaddingRow(
- 0, provider->GetDistanceMetric(views::DISTANCE_RELATED_CONTROL_VERTICAL));
-
- layout->StartRow(0, cs_id);
- layout->SkipColumns(2);
- layout->AddView(remove_button_);
- layout->AddView(edit_button_);
- layout->AddView(close_button_);
-
- AddAccelerator(ui::Accelerator(ui::VKEY_RETURN, ui::EF_NONE));
- AddAccelerator(ui::Accelerator(ui::VKEY_E, ui::EF_ALT_DOWN));
- AddAccelerator(ui::Accelerator(ui::VKEY_R, ui::EF_ALT_DOWN));
-
- AddChildView(bookmark_details_view_.get());
-}
-
-gfx::ImageSkia BookmarkBubbleView::GetWindowIcon() {
-#if defined(OS_WIN)
- if (is_showing_ios_promotion_) {
- return desktop_ios_promotion::GetPromoImage(
- GetNativeTheme()->GetSystemColor(
- ui::NativeTheme::kColorId_TextfieldDefaultColor));
- }
-#endif
- return gfx::ImageSkia();
-}
-
-bool BookmarkBubbleView::ShouldShowWindowIcon() const {
- return is_showing_ios_promotion_;
-}
-
-base::string16 BookmarkBubbleView::GetWindowTitle() const {
-#if defined(OS_WIN)
- if (is_showing_ios_promotion_) {
- return desktop_ios_promotion::GetPromoTitle(
- desktop_ios_promotion::PromotionEntryPoint::BOOKMARKS_BUBBLE);
- }
-#endif
- return l10n_util::GetStringUTF16(newly_bookmarked_
- ? IDS_BOOKMARK_BUBBLE_PAGE_BOOKMARKED
- : IDS_BOOKMARK_BUBBLE_PAGE_BOOKMARK);
-}
-
-const char* BookmarkBubbleView::GetClassName() const {
- return "BookmarkBubbleView";
-}
-
-views::View* BookmarkBubbleView::GetInitiallyFocusedView() {
- return title_tf_;
-}
-
-views::View* BookmarkBubbleView::CreateFootnoteView() {
-#if defined(OS_WIN)
- if (!is_showing_ios_promotion_ &&
- IsIOSPromotionEligible(
- desktop_ios_promotion::PromotionEntryPoint::BOOKMARKS_FOOTNOTE)) {
- footnote_view_ = new DesktopIOSPromotionFootnoteView(profile_, this);
- return footnote_view_;
- }
-#endif
- if (!SyncPromoUI::ShouldShowSyncPromo(profile_))
- return nullptr;
-
- base::RecordAction(
- base::UserMetricsAction("Signin_Impression_FromBookmarkBubble"));
-
- footnote_view_ =
- new BubbleSyncPromoView(delegate_.get(), IDS_BOOKMARK_SYNC_PROMO_LINK,
- IDS_BOOKMARK_SYNC_PROMO_MESSAGE);
- return footnote_view_;
-}
+// Private methods -------------------------------------------------------------
BookmarkBubbleView::BookmarkBubbleView(
views::View* anchor_view,
@@ -315,8 +145,8 @@ BookmarkBubbleView::BookmarkBubbleView(
->GetMostRecentlyAddedUserNodeForURL(url)),
remove_button_(nullptr),
edit_button_(nullptr),
- close_button_(nullptr),
- title_tf_(nullptr),
+ save_button_(nullptr),
+ name_field_(nullptr),
parent_combobox_(nullptr),
ios_promo_view_(nullptr),
footnote_view_(nullptr),
@@ -326,7 +156,7 @@ BookmarkBubbleView::BookmarkBubbleView(
chrome::RecordDialogCreation(chrome::DialogIdentifier::BOOKMARK);
}
-base::string16 BookmarkBubbleView::GetTitle() {
+base::string16 BookmarkBubbleView::GetBookmarkName() {
BookmarkModel* bookmark_model =
BookmarkModelFactory::GetForBrowserContext(profile_);
const BookmarkNode* node =
@@ -338,25 +168,6 @@ base::string16 BookmarkBubbleView::GetTitle() {
return base::string16();
}
-void BookmarkBubbleView::GetAccessibleNodeData(ui::AXNodeData* node_data) {
- LocationBarBubbleDelegateView::GetAccessibleNodeData(node_data);
- node_data->SetName(l10n_util::GetStringUTF8(
- newly_bookmarked_ ? IDS_BOOKMARK_BUBBLE_PAGE_BOOKMARKED
- : IDS_BOOKMARK_AX_BUBBLE_PAGE_BOOKMARK));
-}
-
-void BookmarkBubbleView::ButtonPressed(views::Button* sender,
- const ui::Event& event) {
- HandleButtonPressed(sender);
-}
-
-void BookmarkBubbleView::OnPerformAction(views::Combobox* combobox) {
- if (combobox->selected_index() + 1 == parent_model_.GetItemCount()) {
- base::RecordAction(UserMetricsAction("BookmarkBubble_EditFromCombobox"));
- ShowEditor();
- }
-}
-
void BookmarkBubbleView::HandleButtonPressed(views::Button* sender) {
if (sender == remove_button_) {
base::RecordAction(UserMetricsAction("BookmarkBubble_Unstar"));
@@ -368,7 +179,7 @@ void BookmarkBubbleView::HandleButtonPressed(views::Button* sender) {
base::RecordAction(UserMetricsAction("BookmarkBubble_Edit"));
ShowEditor();
} else {
- DCHECK_EQ(close_button_, sender);
+ DCHECK_EQ(save_button_, sender);
#if defined(OS_WIN)
if (IsIOSPromotionEligible(
desktop_ios_promotion::PromotionEntryPoint::BOOKMARKS_BUBBLE)) {
@@ -409,7 +220,7 @@ void BookmarkBubbleView::ApplyEdits() {
BookmarkModel* model = BookmarkModelFactory::GetForBrowserContext(profile_);
const BookmarkNode* node = model->GetMostRecentlyAddedUserNodeForURL(url_);
if (node) {
- const base::string16 new_title = title_tf_->text();
+ const base::string16 new_title = name_field_->text();
if (new_title != node->GetTitle()) {
model->SetTitle(node, new_title);
base::RecordAction(
@@ -419,13 +230,6 @@ void BookmarkBubbleView::ApplyEdits() {
}
}
-void BookmarkBubbleView::OnIOSPromotionFootnoteLinkClicked() {
-#if defined(OS_WIN)
- ShowIOSPromotion(
- desktop_ios_promotion::PromotionEntryPoint::FOOTNOTE_FOLLOWUP_BUBBLE);
-#endif
-}
-
#if defined(OS_WIN)
bool BookmarkBubbleView::IsIOSPromotionEligible(
@@ -440,7 +244,8 @@ bool BookmarkBubbleView::IsIOSPromotionEligible(
void BookmarkBubbleView::ShowIOSPromotion(
desktop_ios_promotion::PromotionEntryPoint entry_point) {
DCHECK(!is_showing_ios_promotion_);
- RemoveChildView(bookmark_details_view_.get());
+ // Hide the contents, but don't delete. It's needed in the destructor.
+ bookmark_contents_view_->SetVisible(false);
delete footnote_view_;
footnote_view_ = nullptr;
is_showing_ios_promotion_ = true;
@@ -452,3 +257,216 @@ void BookmarkBubbleView::ShowIOSPromotion(
ios_promo_view_->UpdateBubbleHeight();
}
#endif
+
+// ui::DialogModel -------------------------------------------------------------
+
+int BookmarkBubbleView::GetDialogButtons() const {
+ // TODO(tapted): DialogClientView should manage the buttons.
+ return ui::DIALOG_BUTTON_NONE;
+}
+
+// views::WidgetDelegate -------------------------------------------------------
+
+views::View* BookmarkBubbleView::GetInitiallyFocusedView() {
+ return name_field_;
+}
+
+base::string16 BookmarkBubbleView::GetWindowTitle() const {
+#if defined(OS_WIN)
+ if (is_showing_ios_promotion_) {
+ return desktop_ios_promotion::GetPromoTitle(
+ desktop_ios_promotion::PromotionEntryPoint::BOOKMARKS_BUBBLE);
+ }
+#endif
+ return l10n_util::GetStringUTF16(newly_bookmarked_
+ ? IDS_BOOKMARK_BUBBLE_PAGE_BOOKMARKED
+ : IDS_BOOKMARK_BUBBLE_PAGE_BOOKMARK);
+}
+
+gfx::ImageSkia BookmarkBubbleView::GetWindowIcon() {
+#if defined(OS_WIN)
+ if (is_showing_ios_promotion_) {
+ return desktop_ios_promotion::GetPromoImage(
+ GetNativeTheme()->GetSystemColor(
+ ui::NativeTheme::kColorId_TextfieldDefaultColor));
+ }
+#endif
+ return gfx::ImageSkia();
+}
+
+bool BookmarkBubbleView::ShouldShowWindowIcon() const {
+ return is_showing_ios_promotion_;
+}
+
+void BookmarkBubbleView::WindowClosing() {
+ // We have to reset |bubble_| here, not in our destructor, because we'll be
+ // destroyed asynchronously and the shown state will be checked before then.
+ DCHECK_EQ(bookmark_bubble_, this);
+ bookmark_bubble_ = NULL;
+ is_showing_ios_promotion_ = false;
+
+ if (observer_)
+ observer_->OnBookmarkBubbleHidden();
+}
+
+// views::DialogDelegate -------------------------------------------------------
+
+views::View* BookmarkBubbleView::CreateFootnoteView() {
+#if defined(OS_WIN)
+ if (!is_showing_ios_promotion_ &&
+ IsIOSPromotionEligible(
+ desktop_ios_promotion::PromotionEntryPoint::BOOKMARKS_FOOTNOTE)) {
+ footnote_view_ = new DesktopIOSPromotionFootnoteView(profile_, this);
+ return footnote_view_;
+ }
+#endif
+ if (!SyncPromoUI::ShouldShowSyncPromo(profile_))
+ return nullptr;
+
+ base::RecordAction(UserMetricsAction("Signin_Impression_FromBookmarkBubble"));
+
+ footnote_view_ =
+ new BubbleSyncPromoView(delegate_.get(), IDS_BOOKMARK_SYNC_PROMO_LINK,
+ IDS_BOOKMARK_SYNC_PROMO_MESSAGE);
+ return footnote_view_;
+}
+
+// views::View -----------------------------------------------------------------
+
+const char* BookmarkBubbleView::GetClassName() const {
+ return "BookmarkBubbleView";
+}
+
+bool BookmarkBubbleView::AcceleratorPressed(
+ const ui::Accelerator& accelerator) {
+ ui::KeyboardCode key_code = accelerator.key_code();
+ if (key_code == ui::VKEY_RETURN) {
+ HandleButtonPressed(save_button_);
+ return true;
+ }
+ if (key_code == ui::VKEY_E && accelerator.IsAltDown()) {
+ HandleButtonPressed(edit_button_);
+ return true;
+ }
+ if (key_code == ui::VKEY_R && accelerator.IsAltDown()) {
+ HandleButtonPressed(remove_button_);
+ return true;
+ }
+
+ return LocationBarBubbleDelegateView::AcceleratorPressed(accelerator);
+}
+
+void BookmarkBubbleView::GetAccessibleNodeData(ui::AXNodeData* node_data) {
+ LocationBarBubbleDelegateView::GetAccessibleNodeData(node_data);
+ node_data->SetName(l10n_util::GetStringUTF8(
+ newly_bookmarked_ ? IDS_BOOKMARK_BUBBLE_PAGE_BOOKMARKED
+ : IDS_BOOKMARK_AX_BUBBLE_PAGE_BOOKMARK));
+}
+
+// views::BubbleDialogDelegateView ---------------------------------------------
+
+void BookmarkBubbleView::Init() {
+ remove_button_ = views::MdTextButton::CreateSecondaryUiButton(
+ this, l10n_util::GetStringUTF16(IDS_BOOKMARK_BUBBLE_REMOVE_BOOKMARK));
+
+ edit_button_ = views::MdTextButton::CreateSecondaryUiButton(
+ this, l10n_util::GetStringUTF16(IDS_BOOKMARK_BUBBLE_OPTIONS));
+
+ save_button_ = views::MdTextButton::CreateSecondaryUiButton(
+ this, l10n_util::GetStringUTF16(IDS_DONE));
+ save_button_->SetIsDefault(true);
+
+ views::Label* combobox_label = new views::Label(
+ l10n_util::GetStringUTF16(IDS_BOOKMARK_BUBBLE_FOLDER_TEXT));
+
+ parent_combobox_ = new UnsizedCombobox(&parent_model_);
+ parent_combobox_->set_listener(this);
+ parent_combobox_->SetAccessibleName(
+ l10n_util::GetStringUTF16(IDS_BOOKMARK_AX_BUBBLE_FOLDER_TEXT));
+
+ SetLayoutManager(new views::FillLayout);
+ bookmark_contents_view_ = new views::View();
+ GridLayout* layout = new GridLayout(bookmark_contents_view_);
+ bookmark_contents_view_->SetLayoutManager(layout);
+
+ // This column set is used for the labels and textfields as well as the
+ // buttons at the bottom.
+ const int cs_id = 0;
+ ColumnSet* cs = layout->AddColumnSet(cs_id);
+ ChromeLayoutProvider* provider = ChromeLayoutProvider::Get();
+
+ cs->AddColumn(provider->GetControlLabelGridAlignment(), GridLayout::CENTER, 0,
+ GridLayout::USE_PREF, 0, 0);
+ cs->AddPaddingColumn(
+ 0, provider->GetDistanceMetric(DISTANCE_UNRELATED_CONTROL_HORIZONTAL));
+
+ cs->AddColumn(GridLayout::FILL, GridLayout::CENTER, 0, GridLayout::USE_PREF,
+ 0, 0);
+ cs->AddPaddingColumn(1, provider->GetDistanceMetric(
+ DISTANCE_UNRELATED_CONTROL_HORIZONTAL_LARGE));
+
+ cs->AddColumn(GridLayout::LEADING, GridLayout::TRAILING, 0,
+ GridLayout::USE_PREF, 0, 0);
+ cs->AddPaddingColumn(0, provider->GetDistanceMetric(
+ views::DISTANCE_RELATED_BUTTON_HORIZONTAL));
+ cs->AddColumn(GridLayout::LEADING, GridLayout::TRAILING, 0,
+ GridLayout::USE_PREF, 0, 0);
+
+ layout->StartRow(0, cs_id);
+ views::Label* label = new views::Label(
+ l10n_util::GetStringUTF16(IDS_BOOKMARK_BUBBLE_TITLE_TEXT));
+ layout->AddView(label);
+ name_field_ = new views::Textfield();
+ name_field_->SetText(GetBookmarkName());
+ name_field_->SetAccessibleName(
+ l10n_util::GetStringUTF16(IDS_BOOKMARK_AX_BUBBLE_TITLE_TEXT));
+
+ layout->AddView(name_field_, 5, 1);
+
+ layout->AddPaddingRow(
+ 0, provider->GetInsetsMetric(views::INSETS_DIALOG_CONTENTS).top());
+
+ layout->StartRow(0, cs_id);
+ layout->AddView(combobox_label);
+ layout->AddView(parent_combobox_, 5, 1);
+
+ layout->AddPaddingRow(
+ 0, provider->GetDistanceMetric(views::DISTANCE_RELATED_CONTROL_VERTICAL));
+
+ layout->StartRow(0, cs_id);
+ layout->SkipColumns(2);
+ layout->AddView(remove_button_);
+ layout->AddView(edit_button_);
+ layout->AddView(save_button_);
+
+ AddAccelerator(ui::Accelerator(ui::VKEY_RETURN, ui::EF_NONE));
+ AddAccelerator(ui::Accelerator(ui::VKEY_E, ui::EF_ALT_DOWN));
+ AddAccelerator(ui::Accelerator(ui::VKEY_R, ui::EF_ALT_DOWN));
+
+ AddChildView(bookmark_contents_view_);
+}
+
+// views::ButtonListener -------------------------------------------------------
+
+void BookmarkBubbleView::ButtonPressed(views::Button* sender,
+ const ui::Event& event) {
+ HandleButtonPressed(sender);
+}
+
+// views::ComboboxListener -----------------------------------------------------
+
+void BookmarkBubbleView::OnPerformAction(views::Combobox* combobox) {
+ if (combobox->selected_index() + 1 == parent_model_.GetItemCount()) {
+ base::RecordAction(UserMetricsAction("BookmarkBubble_EditFromCombobox"));
+ ShowEditor();
+ }
+}
+
+// DesktopIOSPromotionFootnoteDelegate -----------------------------------------
+
+void BookmarkBubbleView::OnIOSPromotionFootnoteLinkClicked() {
+#if defined(OS_WIN)
+ ShowIOSPromotion(
+ desktop_ios_promotion::PromotionEntryPoint::FOOTNOTE_FOLLOWUP_BUBBLE);
+#endif
+}

Powered by Google App Engine
This is Rietveld 408576698