Index: chrome/browser/ui/views/chooser_content_view.cc |
diff --git a/chrome/browser/ui/views/chooser_content_view.cc b/chrome/browser/ui/views/chooser_content_view.cc |
index d540a14143fd3935c83cbab9534742ffa7c49226..dccbe5bb70971310ff3c95a17dfd22bbb953213f 100644 |
--- a/chrome/browser/ui/views/chooser_content_view.cc |
+++ b/chrome/browser/ui/views/chooser_content_view.cc |
@@ -26,7 +26,7 @@ class ChooserTableModel : public ui::TableModel, |
public ChooserController::Observer { |
public: |
explicit ChooserTableModel(ChooserController* chooser_controller); |
- ~ChooserTableModel() override {} |
+ ~ChooserTableModel() override; |
// ui::TableModel: |
int RowCount() override; |
@@ -53,18 +53,17 @@ ChooserTableModel::ChooserTableModel(ChooserController* chooser_controller) |
chooser_controller_->set_observer(this); |
} |
+ChooserTableModel::~ChooserTableModel() { |
+ chooser_controller_->set_observer(nullptr); |
+} |
+ |
int ChooserTableModel::RowCount() { |
- if (!chooser_controller_) |
- return 0; |
// 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_controller_->NumOptions()), 1); |
} |
base::string16 ChooserTableModel::GetText(int row, int column_id) { |
- if (!chooser_controller_) |
- return base::string16(); |
- |
int num_options = static_cast<int>(chooser_controller_->NumOptions()); |
if (num_options == 0) { |
DCHECK_EQ(0, row); |
@@ -103,9 +102,6 @@ void ChooserTableModel::OnOptionRemoved(size_t index) { |
} |
void ChooserTableModel::Update() { |
- if (!chooser_controller_) |
- return; |
- |
views::TableView* table_view = static_cast<views::TableView*>(observer_); |
if (chooser_controller_->NumOptions() == 0) { |
@@ -116,16 +112,13 @@ void ChooserTableModel::Update() { |
} |
} |
-void ChooserTableModel::ChooserControllerDestroying() { |
- chooser_controller_ = nullptr; |
-} |
- |
-ChooserContentView::ChooserContentView(views::TableViewObserver* observer, |
- ChooserController* chooser_controller) |
- : chooser_controller_(chooser_controller), table_view_(nullptr) { |
+ChooserContentView::ChooserContentView( |
+ views::TableViewObserver* observer, |
+ std::unique_ptr<ChooserController> chooser_controller) |
+ : chooser_controller_(std::move(chooser_controller)), table_view_(nullptr) { |
std::vector<ui::TableColumn> table_columns; |
table_columns.push_back(ui::TableColumn()); |
- chooser_table_model_.reset(new ChooserTableModel(chooser_controller_)); |
+ chooser_table_model_.reset(new ChooserTableModel(chooser_controller_.get())); |
table_view_ = new views::TableView(chooser_table_model_.get(), table_columns, |
views::TEXT_ONLY, true); |
table_view_->set_select_on_remove(false); |
@@ -177,36 +170,21 @@ views::StyledLabel* ChooserContentView::CreateFootnoteView( |
} |
void ChooserContentView::Accept() { |
- if (chooser_controller_) { |
- chooser_controller_->Select(table_view_->selection_model().active()); |
- ChooserControllerDestroying(); |
- } |
+ chooser_controller_->Select(table_view_->selection_model().active()); |
} |
void ChooserContentView::Cancel() { |
- if (chooser_controller_) { |
- chooser_controller_->Cancel(); |
- ChooserControllerDestroying(); |
- } |
+ chooser_controller_->Cancel(); |
} |
void ChooserContentView::Close() { |
- if (chooser_controller_) { |
- chooser_controller_->Close(); |
- ChooserControllerDestroying(); |
- } |
+ chooser_controller_->Close(); |
} |
-void ChooserContentView::StyledLabelLinkClicked() const { |
- if (chooser_controller_) |
- chooser_controller_->OpenHelpCenterUrl(); |
+void ChooserContentView::StyledLabelLinkClicked() { |
+ chooser_controller_->OpenHelpCenterUrl(); |
} |
void ChooserContentView::UpdateTableModel() { |
chooser_table_model_->Update(); |
} |
- |
-void ChooserContentView::ChooserControllerDestroying() { |
- chooser_controller_ = nullptr; |
- chooser_table_model_->ChooserControllerDestroying(); |
-} |