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

Unified Diff: chrome/browser/ui/views/website_settings/chooser_bubble_ui_view.cc

Issue 2029863002: Refactor ChooserBubbleUiViewDelegate (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 4 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/website_settings/chooser_bubble_ui_view.cc
diff --git a/chrome/browser/ui/views/website_settings/chooser_bubble_ui_view.cc b/chrome/browser/ui/views/website_settings/chooser_bubble_ui_view.cc
index dc4acb02ae10af05a921d31968f627be5d3ea1d2..bc48135b0db9d09b19fffcf6f390664f36a7f0b7 100644
--- a/chrome/browser/ui/views/website_settings/chooser_bubble_ui_view.cc
+++ b/chrome/browser/ui/views/website_settings/chooser_bubble_ui_view.cc
@@ -6,265 +6,97 @@
#include <stddef.h>
-#include <algorithm>
-#include <string>
-#include <vector>
-
#include "base/macros.h"
#include "base/memory/ptr_util.h"
#include "base/strings/string16.h"
-#include "base/strings/utf_string_conversions.h"
-#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/browser.h"
+#include "chrome/browser/ui/browser_window.h"
+#include "chrome/browser/ui/views/chooser_content_view.h"
#include "chrome/browser/ui/views/exclusive_access_bubble_views.h"
#include "chrome/browser/ui/views/frame/browser_view.h"
#include "chrome/browser/ui/views/frame/top_container_view.h"
#include "chrome/browser/ui/views/location_bar/location_bar_view.h"
#include "chrome/browser/ui/views/location_bar/location_icon_view.h"
#include "chrome/browser/ui/website_settings/chooser_bubble_delegate.h"
-#include "chrome/common/pref_names.h"
#include "chrome/grit/generated_resources.h"
#include "components/bubble/bubble_controller.h"
#include "components/chooser_controller/chooser_controller.h"
-#include "components/prefs/pref_service.h"
#include "components/url_formatter/elide_url.h"
-#include "ui/accessibility/ax_view_state.h"
#include "ui/base/l10n/l10n_util.h"
-#include "ui/base/resource/resource_bundle.h"
-#include "ui/gfx/paint_vector_icon.h"
-#include "ui/gfx/text_constants.h"
-#include "ui/gfx/vector_icons_public.h"
-#include "ui/views/bubble/bubble_dialog_delegate.h"
-#include "ui/views/bubble/bubble_frame_view.h"
-#include "ui/views/controls/styled_label.h"
-#include "ui/views/controls/styled_label_listener.h"
#include "ui/views/controls/table/table_view.h"
-#include "ui/views/controls/table/table_view_observer.h"
-#include "ui/views/layout/grid_layout.h"
-#include "ui/views/window/dialog_client_view.h"
#include "url/origin.h"
-namespace {
-
-// Chooser permission bubble width
-const int kChooserPermissionBubbleWidth = 300;
-
-// Chooser permission bubble height
-const int kChooserPermissionBubbleHeight = 200;
-
-} // namespace
-
std::unique_ptr<BubbleUi> ChooserBubbleDelegate::BuildBubbleUi() {
return base::WrapUnique(
new ChooserBubbleUiView(browser_, chooser_controller()));
}
-class ChooserTableModel;
-
///////////////////////////////////////////////////////////////////////////////
// View implementation for the chooser bubble.
-class ChooserBubbleUiViewDelegate : public views::BubbleDialogDelegateView,
- public views::StyledLabelListener,
- public views::TableViewObserver {
+class ChooserBubbleUiViewDelegate : public ChooserContentView {
public:
ChooserBubbleUiViewDelegate(views::View* anchor_view,
views::BubbleBorder::Arrow anchor_arrow,
- ChooserController* controller,
+ ChooserController* chooser_controller,
BubbleReference bubble_reference);
~ChooserBubbleUiViewDelegate() override;
// views::BubbleDialogDelegateView:
- bool ShouldShowWindowTitle() const override;
base::string16 GetWindowTitle() const override;
- base::string16 GetDialogButtonLabel(ui::DialogButton button) const override;
- bool IsDialogButtonEnabled(ui::DialogButton button) const override;
- views::View* CreateFootnoteView() override;
bool Accept() override;
bool Cancel() override;
bool Close() override;
- // views::StyledLabelListener:
- void StyledLabelLinkClicked(views::StyledLabel* label,
- const gfx::Range& range,
- int event_flags) override;
-
- // views::TableViewObserver:
- void OnSelectionChanged() override;
-
// Updates the anchor's arrow and view. Also repositions the bubble so it's
// displayed in the correct location.
void UpdateAnchor(views::View* anchor_view,
views::BubbleBorder::Arrow anchor_arrow);
- // Called by ChooserBubbleUiView's destructor. When ChooserBubbleUiView object
- // is destroyed, the |controller_| it passed to this class may not be used any
- // more since it may be destroyed too.
- void ControllerDestroying();
-
- ChooserTableModel* chooser_table_model() const;
-
private:
- ChooserController* controller_;
BubbleReference bubble_reference_;
-
- views::TableView* table_view_;
- ChooserTableModel* chooser_table_model_;
-
DISALLOW_COPY_AND_ASSIGN(ChooserBubbleUiViewDelegate);
};
-ui::TableColumn ChooserTableColumn(int id, const std::string& title) {
- ui::TableColumn column;
- column.id = id;
- column.title = base::ASCIIToUTF16(title.c_str());
- return column;
-}
-
-class ChooserTableModel : public ui::TableModel,
- public ChooserController::Observer {
- public:
- explicit ChooserTableModel(ChooserController* controller);
-
- // ui::TableModel:
- int RowCount() override;
- base::string16 GetText(int row, int column_id) override;
- void SetObserver(ui::TableModelObserver* observer) override;
-
- // ChooserController::Observer:
- void OnOptionsInitialized() override;
- void OnOptionAdded(size_t index) override;
- void OnOptionRemoved(size_t index) override;
-
- void Update();
-
- private:
- ui::TableModelObserver* observer_;
- ChooserController* controller_;
-};
-
ChooserBubbleUiViewDelegate::ChooserBubbleUiViewDelegate(
views::View* anchor_view,
views::BubbleBorder::Arrow anchor_arrow,
- ChooserController* controller,
+ ChooserController* chooser_controller,
BubbleReference bubble_reference)
- : views::BubbleDialogDelegateView(anchor_view, anchor_arrow),
- controller_(controller),
+ : ChooserContentView(anchor_view, anchor_arrow, chooser_controller),
bubble_reference_(bubble_reference) {
- // ------------------------------------
- // | Chooser bubble title |
- // | -------------------------------- |
- // | | option 0 | |
- // | | option 1 | |
- // | | option 2 | |
- // | | | |
- // | | | |
- // | | | |
- // | -------------------------------- |
- // | [ Connect ] [ Cancel ] |
- // |----------------------------------|
- // | Not seeing your device? Get help |
- // ------------------------------------
-
DCHECK(bubble_reference_);
-
- views::GridLayout* layout = new views::GridLayout(this);
- SetLayoutManager(layout);
-
- views::ColumnSet* column_set = layout->AddColumnSet(0);
- column_set->AddColumn(views::GridLayout::FILL, views::GridLayout::FILL, 1,
- views::GridLayout::USE_PREF, 0, 0);
-
- // Lay out the table view.
- layout->StartRow(0, 0);
- std::vector<ui::TableColumn> table_columns;
- table_columns.push_back(ChooserTableColumn(
- 0, "" /* Empty string makes the column title invisible */));
- chooser_table_model_ = new ChooserTableModel(controller_);
- table_view_ = new views::TableView(chooser_table_model_, table_columns,
- views::TEXT_ONLY, true);
- table_view_->set_select_on_remove(false);
- chooser_table_model_->SetObserver(table_view_);
- table_view_->SetObserver(this);
- table_view_->SetEnabled(controller_->NumOptions() > 0);
- layout->AddView(table_view_->CreateParentIfNecessary(), 1, 1,
- views::GridLayout::FILL, views::GridLayout::FILL,
- kChooserPermissionBubbleWidth,
- kChooserPermissionBubbleHeight);
-}
-
-ChooserBubbleUiViewDelegate::~ChooserBubbleUiViewDelegate() {
- chooser_table_model_->SetObserver(nullptr);
}
-bool ChooserBubbleUiViewDelegate::ShouldShowWindowTitle() const {
- return true;
-}
+ChooserBubbleUiViewDelegate::~ChooserBubbleUiViewDelegate() {}
base::string16 ChooserBubbleUiViewDelegate::GetWindowTitle() const {
return l10n_util::GetStringFUTF16(
IDS_CHOOSER_BUBBLE_PROMPT,
url_formatter::FormatOriginForSecurityDisplay(
- controller_->GetOrigin(),
+ chooser_controller()->GetOrigin(),
url_formatter::SchemeDisplay::OMIT_CRYPTOGRAPHIC));
}
-base::string16 ChooserBubbleUiViewDelegate::GetDialogButtonLabel(
- ui::DialogButton button) const {
- return l10n_util::GetStringUTF16(button == ui::DIALOG_BUTTON_OK
- ? IDS_CHOOSER_BUBBLE_CONNECT_BUTTON_TEXT
- : IDS_CHOOSER_BUBBLE_CANCEL_BUTTON_TEXT);
-}
-
-bool ChooserBubbleUiViewDelegate::IsDialogButtonEnabled(
- ui::DialogButton button) const {
- return button == ui::DIALOG_BUTTON_OK
- ? !table_view_->selection_model().empty()
- : true;
-}
-
-views::View* ChooserBubbleUiViewDelegate::CreateFootnoteView() {
- base::string16 link =
- l10n_util::GetStringUTF16(IDS_CHOOSER_BUBBLE_GET_HELP_LINK_TEXT);
- size_t offset;
- base::string16 text = l10n_util::GetStringFUTF16(
- IDS_CHOOSER_BUBBLE_FOOTNOTE_TEXT, link, &offset);
- views::StyledLabel* label = new views::StyledLabel(text, this);
- label->AddStyleRange(gfx::Range(offset, offset + link.length()),
- views::StyledLabel::RangeStyleInfo::CreateForLink());
- return label;
-}
-
bool ChooserBubbleUiViewDelegate::Accept() {
- if (controller_)
- controller_->Select(table_view_->selection_model().active());
+ if (chooser_controller())
+ chooser_controller()->Select(table_view()->selection_model().active());
bubble_reference_->CloseBubble(BUBBLE_CLOSE_ACCEPTED);
msw 2016/06/03 20:04:09 +groby: it's too bad the unused bubble manager inf
return true;
}
bool ChooserBubbleUiViewDelegate::Cancel() {
- if (controller_)
- controller_->Cancel();
+ if (chooser_controller())
+ chooser_controller()->Cancel();
bubble_reference_->CloseBubble(BUBBLE_CLOSE_CANCELED);
return true;
}
bool ChooserBubbleUiViewDelegate::Close() {
- if (controller_)
- controller_->Close();
+ if (chooser_controller())
+ chooser_controller()->Close();
return true;
}
-void ChooserBubbleUiViewDelegate::StyledLabelLinkClicked(
- views::StyledLabel* label,
- const gfx::Range& range,
- int event_flags) {
- controller_->OpenHelpCenterUrl();
-}
-
-void ChooserBubbleUiViewDelegate::OnSelectionChanged() {
- GetDialogClientView()->UpdateDialogButtons();
-}
-
void ChooserBubbleUiViewDelegate::UpdateAnchor(
views::View* anchor_view,
views::BubbleBorder::Arrow anchor_arrow) {
@@ -277,94 +109,26 @@ void ChooserBubbleUiViewDelegate::UpdateAnchor(
SetAnchorView(anchor_view);
}
-void ChooserBubbleUiViewDelegate::ControllerDestroying() {
- controller_ = nullptr;
-}
-
-ChooserTableModel* ChooserBubbleUiViewDelegate::chooser_table_model() const {
- return chooser_table_model_;
-}
-
-ChooserTableModel::ChooserTableModel(ChooserController* controller)
- : observer_(nullptr), controller_(controller) {
- controller_->set_observer(this);
-}
-
-int ChooserTableModel::RowCount() {
- // When there are no devices, the table contains a message saying there
- // are no devices, so the number of rows is always at least 1.
- return std::max(static_cast<int>(controller_->NumOptions()), 1);
-}
-
-base::string16 ChooserTableModel::GetText(int row, int column_id) {
- int num_options = static_cast<int>(controller_->NumOptions());
- if (num_options == 0) {
- DCHECK_EQ(0, row);
- return l10n_util::GetStringUTF16(
- IDS_CHOOSER_BUBBLE_NO_DEVICES_FOUND_PROMPT);
- }
-
- DCHECK_GE(row, 0);
- DCHECK_LT(row, num_options);
- return controller_->GetOption(static_cast<size_t>(row));
-}
-
-void ChooserTableModel::SetObserver(ui::TableModelObserver* observer) {
- observer_ = observer;
-}
-
-void ChooserTableModel::OnOptionsInitialized() {
- if (observer_) {
- observer_->OnModelChanged();
- Update();
- }
-}
-
-void ChooserTableModel::OnOptionAdded(size_t index) {
- if (observer_) {
- observer_->OnItemsAdded(static_cast<int>(index), 1);
- Update();
- }
-}
-
-void ChooserTableModel::OnOptionRemoved(size_t index) {
- if (observer_) {
- observer_->OnItemsRemoved(static_cast<int>(index), 1);
- Update();
- }
-}
-
-void ChooserTableModel::Update() {
- views::TableView* table_view = static_cast<views::TableView*>(observer_);
-
- if (controller_->NumOptions() == 0) {
- observer_->OnModelChanged();
- table_view->SetEnabled(false);
- } else {
- table_view->SetEnabled(true);
- }
-}
-
//////////////////////////////////////////////////////////////////////////////
// ChooserBubbleUiView
ChooserBubbleUiView::ChooserBubbleUiView(Browser* browser,
- ChooserController* controller)
+ ChooserController* chooser_controller)
: browser_(browser),
- controller_(controller),
+ chooser_controller_(chooser_controller),
chooser_bubble_ui_view_delegate_(nullptr) {
DCHECK(browser_);
- DCHECK(controller_);
+ DCHECK(chooser_controller_);
}
ChooserBubbleUiView::~ChooserBubbleUiView() {
if (chooser_bubble_ui_view_delegate_)
- chooser_bubble_ui_view_delegate_->ControllerDestroying();
+ chooser_bubble_ui_view_delegate_->ChooserControllerDestroying();
}
void ChooserBubbleUiView::Show(BubbleReference bubble_reference) {
chooser_bubble_ui_view_delegate_ = new ChooserBubbleUiViewDelegate(
- GetAnchorView(), GetAnchorArrow(), controller_, bubble_reference);
+ GetAnchorView(), GetAnchorArrow(), chooser_controller_, bubble_reference);
// Set |parent_window| because some valid anchors can become hidden.
views::Widget* widget = views::Widget::GetWidgetForNativeWindow(
@@ -374,8 +138,6 @@ void ChooserBubbleUiView::Show(BubbleReference bubble_reference) {
views::BubbleDialogDelegateView::CreateBubble(
chooser_bubble_ui_view_delegate_)
->Show();
-
- chooser_bubble_ui_view_delegate_->chooser_table_model()->Update();
msw 2016/06/03 20:04:09 Why is this update no longer required? Has it move
juncai 2016/06/07 18:11:06 At ChooserContentView constructor, it enables/disa
msw 2016/06/08 00:58:45 Acknowledged, I hope this is okay, since ChooserTa
juncai 2016/06/09 01:59:21 Added it back to be safe, :).
}
void ChooserBubbleUiView::Close() {}

Powered by Google App Engine
This is Rietveld 408576698