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 5d4d566b7ed5c9c1925bdf20f1d6203c0107087f..7a853b60b96cd8b906b6a21b70beee7e4c29ff0d 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 |
@@ -4,6 +4,7 @@ |
#include "chrome/browser/ui/views/website_settings/chooser_bubble_ui_view.h" |
+#include <algorithm> |
#include <string> |
#include "base/macros.h" |
@@ -115,84 +116,20 @@ ui::TableColumn ChooserTableColumn(int id, const std::string& title) { |
class ChooserTableModel : public ui::TableModel, |
public ChooserBubbleDelegate::Observer { |
public: |
- explicit ChooserTableModel(ChooserBubbleDelegate* chooser_bubble_delegate) |
- : observer_(nullptr), chooser_bubble_delegate_(chooser_bubble_delegate) { |
- chooser_bubble_delegate_->set_observer(this); |
- } |
- |
- // ui::TableModel: |
- int RowCount() override { |
- const std::vector<base::string16>& device_names = |
- chooser_bubble_delegate_->GetOptions(); |
- if (device_names.empty()) { |
- // Here it returns 1 when there is no device. In this case, the |
- // table view still needs to display a text message saying no |
- // devices found, so the number of rows is 1. |
- return 1; |
- } else { |
- return static_cast<int>(device_names.size()); |
- } |
- } |
+ explicit ChooserTableModel(ChooserBubbleDelegate* chooser_bubble_delegate); |
// ui::TableModel: |
- base::string16 GetText(int row, int column_id) override { |
- const std::vector<base::string16>& device_names = |
- chooser_bubble_delegate_->GetOptions(); |
- if (device_names.empty()) { |
- DCHECK(row == 0); |
- return l10n_util::GetStringUTF16( |
- IDS_CHOOSER_BUBBLE_NO_DEVICES_FOUND_PROMPT); |
- } else if (row >= 0 && row < static_cast<int>(device_names.size())) { |
- return device_names[row]; |
- } else { |
- NOTREACHED(); |
- return base::string16(); |
- } |
- } |
- |
- // ui::TableModel: |
- void SetObserver(ui::TableModelObserver* observer) override { |
- observer_ = observer; |
- } |
- |
- // ChooserOptions::Observer: |
- void OnOptionsInitialized() override { |
- if (observer_) { |
- observer_->OnModelChanged(); |
- Update(); |
- } |
- } |
- |
- // ChooserOptions::Observer: |
- void OnOptionAdded(int index) override { |
- if (observer_) { |
- observer_->OnItemsAdded(index, 1); |
- Update(); |
- } |
- } |
- |
- // ChooserOptions::Observer: |
- void OnOptionRemoved(int index) override { |
- if (observer_) { |
- observer_->OnItemsRemoved(index, 1); |
- Update(); |
- } |
- } |
+ int RowCount() override; |
+ base::string16 GetText(int row, int column_id) override; |
+ void SetObserver(ui::TableModelObserver* observer) override; |
- void Update() { |
- views::TableView* table_view = static_cast<views::TableView*>(observer_); |
+ // ChooserBubbleDelegate::Observer: |
+ void OnOptionsInitialized() override; |
+ void OnOptionAdded(size_t index) override; |
+ void OnOptionRemoved(size_t index) override; |
- if (chooser_bubble_delegate_->GetOptions().empty()) { |
- observer_->OnModelChanged(); |
- table_view->SetEnabled(false); |
- } else { |
- table_view->SetEnabled(true); |
- } |
- } |
- |
- void SetConnectButton(views::LabelButton* connect_button) { |
- connect_button_ = connect_button; |
- } |
+ void Update(); |
+ void SetConnectButton(views::LabelButton* connect_button); |
private: |
ui::TableModelObserver* observer_; |
@@ -232,7 +169,7 @@ ChooserBubbleUiViewDelegate::ChooserBubbleUiViewDelegate( |
views::GridLayout::FILL, views::GridLayout::FILL, |
kChooserPermissionBubbleWidth, |
kChooserPermissionBubbleHeight); |
- if (chooser_bubble_delegate_->GetOptions().empty()) { |
+ if (chooser_bubble_delegate_->NumOptions() == 0) { |
table_view_->SetEnabled(false); |
} |
@@ -344,6 +281,71 @@ void ChooserBubbleUiViewDelegate::UpdateAnchor( |
SetAnchorView(anchor_view); |
} |
+ChooserTableModel::ChooserTableModel( |
+ ChooserBubbleDelegate* chooser_bubble_delegate) |
+ : observer_(nullptr), chooser_bubble_delegate_(chooser_bubble_delegate) { |
+ chooser_bubble_delegate_->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>(chooser_bubble_delegate_->NumOptions()), 1); |
+} |
+ |
+base::string16 ChooserTableModel::GetText(int row, int column_id) { |
+ int num_options = static_cast<int>(chooser_bubble_delegate_->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 chooser_bubble_delegate_->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 (chooser_bubble_delegate_->NumOptions() == 0) { |
+ observer_->OnModelChanged(); |
+ table_view->SetEnabled(false); |
+ } else { |
+ table_view->SetEnabled(true); |
+ } |
+} |
+ |
+void ChooserTableModel::SetConnectButton(views::LabelButton* connect_button) { |
+ connect_button_ = connect_button; |
+} |
+ |
////////////////////////////////////////////////////////////////////////////// |
// ChooserBubbleUiView |