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

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: make ChooserContentView::ChooserControllerDestroying a private function Created 4 years, 6 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
« no previous file with comments | « chrome/browser/ui/views/website_settings/chooser_bubble_ui_view.h ('k') | chrome/chrome_browser_ui.gypi » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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..64613daf675841f02c538510e610ae6cfe6638c8 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,61 +6,34 @@
#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,
@@ -69,13 +42,14 @@ class ChooserBubbleUiViewDelegate : public views::BubbleDialogDelegateView,
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;
+ // views::WidgetDelegate:
base::string16 GetWindowTitle() const override;
+
+ // views::DialogDelegate:
base::string16 GetDialogButtonLabel(ui::DialogButton button) const override;
bool IsDialogButtonEnabled(ui::DialogButton button) const override;
views::View* CreateFootnoteView() override;
@@ -83,6 +57,11 @@ class ChooserBubbleUiViewDelegate : public views::BubbleDialogDelegateView,
bool Cancel() override;
bool Close() override;
+ // views::DialogDelegateView:
+ views::View* GetContentsView() override;
+ views::Widget* GetWidget() override;
+ const views::Widget* GetWidget() const override;
+
// views::StyledLabelListener:
void StyledLabelLinkClicked(views::StyledLabel* label,
const gfx::Range& range,
@@ -96,59 +75,25 @@ class ChooserBubbleUiViewDelegate : public views::BubbleDialogDelegateView,
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;
+ void UpdateTableModel() const;
private:
- ChooserController* controller_;
- BubbleReference bubble_reference_;
+ ChooserContentView* chooser_content_view_;
- views::TableView* table_view_;
- ChooserTableModel* chooser_table_model_;
+ ChooserController* chooser_controller_;
+ BubbleReference bubble_reference_;
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),
+ chooser_content_view_(nullptr),
+ chooser_controller_(chooser_controller),
bubble_reference_(bubble_reference) {
// ------------------------------------
// | Chooser bubble title |
@@ -167,98 +112,67 @@ ChooserBubbleUiViewDelegate::ChooserBubbleUiViewDelegate(
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);
+ chooser_content_view_ = new ChooserContentView(this, chooser_controller_);
}
-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);
+ return chooser_content_view_->GetDialogButtonLabel(button);
}
bool ChooserBubbleUiViewDelegate::IsDialogButtonEnabled(
ui::DialogButton button) const {
- return button == ui::DIALOG_BUTTON_OK
- ? !table_view_->selection_model().empty()
- : true;
+ return chooser_content_view_->IsDialogButtonEnabled(button);
}
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;
+ return chooser_content_view_->CreateFootnoteView(this);
}
bool ChooserBubbleUiViewDelegate::Accept() {
- if (controller_)
- controller_->Select(table_view_->selection_model().active());
+ chooser_content_view_->Accept();
bubble_reference_->CloseBubble(BUBBLE_CLOSE_ACCEPTED);
return true;
}
bool ChooserBubbleUiViewDelegate::Cancel() {
- if (controller_)
- controller_->Cancel();
+ chooser_content_view_->Cancel();
bubble_reference_->CloseBubble(BUBBLE_CLOSE_CANCELED);
return true;
}
bool ChooserBubbleUiViewDelegate::Close() {
- if (controller_)
- controller_->Close();
+ chooser_content_view_->Close();
return true;
}
+views::View* ChooserBubbleUiViewDelegate::GetContentsView() {
+ return chooser_content_view_;
+}
+
+views::Widget* ChooserBubbleUiViewDelegate::GetWidget() {
+ return chooser_content_view_->GetWidget();
+}
+
+const views::Widget* ChooserBubbleUiViewDelegate::GetWidget() const {
+ return chooser_content_view_->GetWidget();
+}
+
void ChooserBubbleUiViewDelegate::StyledLabelLinkClicked(
views::StyledLabel* label,
const gfx::Range& range,
int event_flags) {
- controller_->OpenHelpCenterUrl();
+ chooser_content_view_->StyledLabelLinkClicked();
}
void ChooserBubbleUiViewDelegate::OnSelectionChanged() {
@@ -277,94 +191,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);
- }
+void ChooserBubbleUiViewDelegate::UpdateTableModel() const {
+ chooser_content_view_->UpdateTableModel();
}
//////////////////////////////////////////////////////////////////////////////
// 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();
-}
+ChooserBubbleUiView::~ChooserBubbleUiView() {}
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(
@@ -375,7 +221,7 @@ void ChooserBubbleUiView::Show(BubbleReference bubble_reference) {
chooser_bubble_ui_view_delegate_)
->Show();
- chooser_bubble_ui_view_delegate_->chooser_table_model()->Update();
+ chooser_bubble_ui_view_delegate_->UpdateTableModel();
}
void ChooserBubbleUiView::Close() {}
« no previous file with comments | « chrome/browser/ui/views/website_settings/chooser_bubble_ui_view.h ('k') | chrome/chrome_browser_ui.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698