0

Use TabStripModelObserver's new API in chrome/browser/devtools/

Replace old API with new API. This CL is a refactor
and has no intended behavior change.

Bug: 842194
Change-Id: Ie1a6a3972d7df9bcaee4dbc68592997c5d65bd87
Reviewed-on: https://chromium-review.googlesource.com/1160837
Commit-Queue: Sang Woo Ko <sangwoo108@chromium.org>
Reviewed-by: Erik Chen <erikchen@chromium.org>
Reviewed-by: Scott Violet <sky@chromium.org>
Cr-Commit-Position: refs/heads/master@{#581819}
This commit is contained in:
sangwoo.ko
2018-08-09 07:47:02 +00:00
committed by Commit Bot
parent 6579f5a480
commit b4ce470bef
9 changed files with 108 additions and 102 deletions

@ -15,10 +15,14 @@ DevToolsAutoOpener::DevToolsAutoOpener()
DevToolsAutoOpener::~DevToolsAutoOpener() {
}
void DevToolsAutoOpener::TabInsertedAt(TabStripModel* tab_strip_model,
content::WebContents* contents,
int index,
bool foreground) {
if (!DevToolsWindow::IsDevToolsWindow(contents))
DevToolsWindow::OpenDevToolsWindow(contents);
void DevToolsAutoOpener::OnTabStripModelChanged(
const TabStripModelChange& change,
const TabStripSelectionChange& selection) {
if (change.type() != TabStripModelChange::kInserted)
return;
for (const auto& delta : change.deltas()) {
if (!DevToolsWindow::IsDevToolsWindow(delta.insert.contents))
DevToolsWindow::OpenDevToolsWindow(delta.insert.contents);
}
}

@ -15,10 +15,9 @@ class DevToolsAutoOpener : public TabStripModelObserver {
private:
// TabStripModelObserver overrides.
void TabInsertedAt(TabStripModel* tab_strip_model,
content::WebContents* contents,
int index,
bool foreground) override;
void OnTabStripModelChanged(
const TabStripModelChange& change,
const TabStripSelectionChange& selection) override;
BrowserTabStripTracker browser_tab_strip_tracker_;

@ -177,11 +177,14 @@ GlobalConfirmInfoBar::~GlobalConfirmInfoBar() {
}
}
void GlobalConfirmInfoBar::TabInsertedAt(TabStripModel* tab_strip_model,
content::WebContents* web_contents,
int index,
bool foreground) {
MaybeAddInfoBar(web_contents);
void GlobalConfirmInfoBar::OnTabStripModelChanged(
const TabStripModelChange& change,
const TabStripSelectionChange& selection) {
if (change.type() != TabStripModelChange::kInserted)
return;
for (const auto& delta : change.deltas())
MaybeAddInfoBar(delta.insert.contents);
}
void GlobalConfirmInfoBar::TabChangedAt(content::WebContents* web_contents,

@ -43,10 +43,9 @@ class GlobalConfirmInfoBar : public TabStripModelObserver,
class DelegateProxy;
// TabStripModelObserver:
void TabInsertedAt(TabStripModel* tab_strip_model,
content::WebContents* web_contents,
int index,
bool foreground) override;
void OnTabStripModelChanged(
const TabStripModelChange& change,
const TabStripSelectionChange& selection) override;
void TabChangedAt(content::WebContents* web_contents,
int index,
TabChangeType change_type) override;

@ -68,11 +68,22 @@ void BrowserTabStripTracker::MaybeTrackBrowser(Browser* browser) {
TabStripModel* tab_strip_model = browser->tab_strip_model();
tab_strip_model->AddObserver(tab_strip_model_observer_);
const int active_index = tab_strip_model->active_index();
std::vector<TabStripModelChange::Delta> deltas;
for (int i = 0; i < tab_strip_model->count(); ++i) {
// TODO(sangwoo108): Delete this. https://crbug.com/842194.
tab_strip_model_observer_->TabInsertedAt(
tab_strip_model, tab_strip_model->GetWebContentsAt(i), i,
i == active_index);
deltas.push_back(TabStripModelChange::CreateInsertDelta(
tab_strip_model->GetWebContentsAt(i), i));
}
TabStripModelChange change(TabStripModelChange::kInserted, deltas);
TabStripSelectionChange selection(tab_strip_model->GetActiveWebContents(),
tab_strip_model->selection_model());
tab_strip_model_observer_->OnTabStripModelChanged(change, selection);
}
void BrowserTabStripTracker::OnBrowserAdded(Browser* browser) {

@ -62,21 +62,6 @@ bool ShouldForgetOpenersForTransition(ui::PageTransition transition) {
ui::PAGE_TRANSITION_AUTO_TOPLEVEL);
}
// Fill TabStripSelectionChange with given |contents| and |selection_model|.
// note that |new_contents| and |new_model| will be filled too so that
// selection_changed() and active_tab_changed() won't return true.
TabStripSelectionChange GetDefaultSelection(
content::WebContents* contents,
const ui::ListSelectionModel& selection_model) {
TabStripSelectionChange selection;
selection.old_contents = contents;
selection.new_contents = contents;
selection.old_model = selection_model;
selection.new_model = selection_model;
selection.reason = 0;
return selection;
}
// This tracks (and reports via UMA and tracing) how long it takes before a
// RenderWidgetHost is requested to become visible.
class RenderWidgetHostVisibilityTracker
@ -358,8 +343,7 @@ void TabStripModel::InsertWebContentsAt(int index,
if (manager)
data->set_blocked(manager->IsDialogActive());
TabStripSelectionChange selection =
GetDefaultSelection(GetActiveWebContents(), selection_model_);
TabStripSelectionChange selection(GetActiveWebContents(), selection_model_);
contents_data_.insert(contents_data_.begin() + index, std::move(data));
@ -376,9 +360,9 @@ void TabStripModel::InsertWebContentsAt(int index,
/*triggered_by_other_operation=*/true);
}
base::Optional<TabStripModelChange> change(TabStripModelChange(
TabStripModelChange change(
TabStripModelChange::kInserted,
TabStripModelChange::CreateInsertDelta(raw_contents, index)));
TabStripModelChange::CreateInsertDelta(raw_contents, index));
for (auto& observer : observers_)
observer.OnTabStripModelChanged(change, selection);
}
@ -392,8 +376,7 @@ std::unique_ptr<content::WebContents> TabStripModel::ReplaceWebContentsAt(
FixOpenersAndGroupsReferencing(index);
TabStripSelectionChange selection =
GetDefaultSelection(GetActiveWebContents(), selection_model_);
TabStripSelectionChange selection(GetActiveWebContents(), selection_model_);
WebContents* raw_new_contents = new_contents.get();
std::unique_ptr<WebContents> old_contents =
contents_data_[index]->ReplaceWebContents(std::move(new_contents));
@ -414,10 +397,9 @@ std::unique_ptr<content::WebContents> TabStripModel::ReplaceWebContentsAt(
}
}
base::Optional<TabStripModelChange> change(
TabStripModelChange(TabStripModelChange::kReplaced,
TabStripModelChange::CreateReplaceDelta(
old_contents.get(), raw_new_contents, index)));
TabStripModelChange change(TabStripModelChange::kReplaced,
TabStripModelChange::CreateReplaceDelta(
old_contents.get(), raw_new_contents, index));
for (auto& observer : observers_)
observer.OnTabStripModelChanged(change, selection);
@ -573,8 +555,7 @@ void TabStripModel::SendDetachWebContentsNotifications(
observer.TabStripEmpty();
}
base::Optional<TabStripModelChange> change(
TabStripModelChange(TabStripModelChange::kRemoved, deltas));
TabStripModelChange change(TabStripModelChange::kRemoved, deltas);
for (auto& observer : observers_)
observer.OnTabStripModelChanged(change, selection);
}
@ -1553,8 +1534,9 @@ TabStripSelectionChange TabStripModel::SetSelection(
if (!triggered_by_other_operation &&
(selection.active_tab_changed() || selection.selection_changed())) {
TabStripModelChange change;
for (auto& observer : observers_)
observer.OnTabStripModelChanged({}, selection);
observer.OnTabStripModelChanged(change, selection);
}
return selection;
@ -1577,8 +1559,7 @@ void TabStripModel::MoveWebContentsAtImpl(int index,
bool select_after_move) {
FixOpenersAndGroupsReferencing(index);
TabStripSelectionChange selection =
GetDefaultSelection(GetActiveWebContents(), selection_model_);
TabStripSelectionChange selection(GetActiveWebContents(), selection_model_);
std::unique_ptr<WebContentsData> moved_data =
std::move(contents_data_[index]);
@ -1597,9 +1578,9 @@ void TabStripModel::MoveWebContentsAtImpl(int index,
for (auto& observer : observers_)
observer.TabMoved(web_contents, index, to_position);
base::Optional<TabStripModelChange> change(TabStripModelChange(
TabStripModelChange change(
TabStripModelChange::kMoved,
TabStripModelChange::CreateMoveDelta(web_contents, index, to_position)));
TabStripModelChange::CreateMoveDelta(web_contents, index, to_position));
for (auto& observer : observers_)
observer.OnTabStripModelChanged(change, selection);
}

@ -45,6 +45,8 @@ TabStripModelChange::Delta TabStripModelChange::CreateReplaceDelta(
return delta;
}
TabStripModelChange::TabStripModelChange() = default;
TabStripModelChange::TabStripModelChange(Type type, const Delta& delta)
: type_(type), deltas_({delta}) {}
@ -59,11 +61,20 @@ TabStripModelChange::TabStripModelChange(TabStripModelChange&& other) = default;
TabStripSelectionChange::TabStripSelectionChange() = default;
TabStripSelectionChange::TabStripSelectionChange(
content::WebContents* contents,
const ui::ListSelectionModel& selection_model)
: old_contents(contents),
new_contents(contents),
old_model(selection_model),
new_model(selection_model),
reason(0) {}
TabStripModelObserver::TabStripModelObserver() {
}
void TabStripModelObserver::OnTabStripModelChanged(
const base::Optional<TabStripModelChange>& change,
const TabStripModelChange& change,
const TabStripSelectionChange& selection) {}
void TabStripModelObserver::TabInsertedAt(TabStripModel* tab_strip_model,

@ -8,7 +8,6 @@
#include <vector>
#include "base/macros.h"
#include "base/optional.h"
#include "chrome/browser/ui/tabs/tab_change_type.h"
#include "ui/base/models/list_selection_model.h"
@ -33,12 +32,7 @@ class WebContents;
////////////////////////////////////////////////////////////////////////////////
class TabStripModelChange {
public:
enum Type {
kInserted,
kRemoved,
kMoved,
kReplaced,
};
enum Type { kSelectionOnly, kInserted, kRemoved, kMoved, kReplaced };
// A WebContents was inserted at |index|. This implicitly changes the existing
// selection model by calling IncrementFrom(index).
@ -97,6 +91,7 @@ class TabStripModelChange {
content::WebContents* new_contents,
int index);
TabStripModelChange();
TabStripModelChange(Type type, const Delta& delta);
TabStripModelChange(Type type, const std::vector<Delta>& deltas);
~TabStripModelChange();
@ -107,7 +102,7 @@ class TabStripModelChange {
const std::vector<Delta>& deltas() const { return deltas_; }
private:
const Type type_;
const Type type_ = kSelectionOnly;
const std::vector<Delta> deltas_;
DISALLOW_COPY_AND_ASSIGN(TabStripModelChange);
@ -117,6 +112,12 @@ class TabStripModelChange {
struct TabStripSelectionChange {
TabStripSelectionChange();
// Fill TabStripSelectionChange with given |contents| and |selection_model|.
// note that |new_contents| and |new_model| will be filled too so that
// selection_changed() and active_tab_changed() won't return true.
TabStripSelectionChange(content::WebContents* contents,
const ui::ListSelectionModel& model);
bool active_tab_changed() const { return old_contents != new_contents; }
// TODO(sangwoo.ko) Do we need something to indicate that the change
@ -172,9 +173,8 @@ class TabStripModelObserver {
// TabStripModel before the |change| and after the |change| are applied.
// When only selection/activation was changed without any change about
// WebContents, |change| can be empty.
virtual void OnTabStripModelChanged(
const base::Optional<TabStripModelChange>& change,
const TabStripSelectionChange& selection);
virtual void OnTabStripModelChanged(const TabStripModelChange& change,
const TabStripSelectionChange& selection);
// A new WebContents was inserted into the TabStripModel at the
// specified index. |foreground| is whether or not it was opened in the

@ -377,48 +377,46 @@ class NewTabStripModelObserver : public MockTabStripModelObserver {
// TabStripModelObserver implementation:
void OnTabStripModelChanged(
const base::Optional<TabStripModelChange>& change,
const TabStripModelChange& change,
const TabStripSelectionChange& selection) override {
if (change) {
switch (change->type()) {
case TabStripModelChange::kInserted: {
for (const auto& delta : change->deltas()) {
PushInsertState(delta.insert.contents, delta.insert.index,
selection.new_contents == delta.insert.contents);
}
break;
switch (change.type()) {
case TabStripModelChange::kInserted: {
for (const auto& delta : change.deltas()) {
PushInsertState(delta.insert.contents, delta.insert.index,
selection.new_contents == delta.insert.contents);
}
case TabStripModelChange::kRemoved: {
for (const auto& delta : change->deltas()) {
if (delta.remove.will_be_deleted)
PushCloseState(delta.remove.contents, delta.remove.index);
PushDetachState(delta.remove.contents, delta.remove.index,
selection.old_contents == delta.remove.contents);
}
break;
}
case TabStripModelChange::kReplaced: {
for (const auto& delta : change->deltas()) {
PushReplaceState(delta.replace.old_contents,
delta.replace.new_contents, delta.replace.index);
}
break;
}
case TabStripModelChange::kMoved: {
for (const auto& delta : change->deltas()) {
PushMoveState(delta.move.contents, delta.move.from_index,
delta.move.to_index);
}
// Selection change triggered by move shouldn't be counted as
// exsiting tests don't expect selection change in this case.
// TODO(sangwoo.ko): Update the tests in this class to not use the
// deprecated callbacks. https://crbug.com/842194
return;
}
default:
NOTREACHED();
break;
}
case TabStripModelChange::kRemoved: {
for (const auto& delta : change.deltas()) {
if (delta.remove.will_be_deleted)
PushCloseState(delta.remove.contents, delta.remove.index);
PushDetachState(delta.remove.contents, delta.remove.index,
selection.old_contents == delta.remove.contents);
}
break;
}
case TabStripModelChange::kReplaced: {
for (const auto& delta : change.deltas()) {
PushReplaceState(delta.replace.old_contents,
delta.replace.new_contents, delta.replace.index);
}
break;
}
case TabStripModelChange::kMoved: {
for (const auto& delta : change.deltas()) {
PushMoveState(delta.move.contents, delta.move.from_index,
delta.move.to_index);
}
// Selection change triggered by move shouldn't be counted as
// exsiting tests don't expect selection change in this case.
// TODO(sangwoo.ko): Update the tests in this class to not use the
// deprecated callbacks. https://crbug.com/842194
return;
}
default:
break;
}
if (selection.active_tab_changed()) {