New issue
Advanced search Search tips

Issue 842194 link

Starred by 3 users

Issue metadata

Status: Fixed
Owner:
Closed: Nov 6
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: ----
Pri: 3
Type: Bug



Sign in to add a comment

Clean up TabStripModelObserver API

Project Member Reported by erikc...@chromium.org, May 11 2018

Issue description

Currently, observer callbacks are tightly tied to internal state of TabStripModel, which makes it very difficult to change the implementation of TabStripModel, and makes re-entrancy extra unsafe. 
 

Comment 1 Deleted

Cc: sky@chromium.org
I spent a while trying to figure out how to simplify TabStrip::SetSelection [as I recently added state to the class - selected_tabs_] to get it to work correctly. I came up with many alternatives, but none were simpler than the current code. 

The reason that the previous code appeared simpler is that it did not work correctly. 

e.g. If you check out 9fedcd6889424af9766ebf07eab67d42ec0a9091 [last commit before my changes], then:

Calling TabStripModel::DetachWebContentsAt(...) will not cause the following notifications to fire:

* tab_at(old_selection.active())->ActiveStateChanged(); 
* tab_at(no_longer_selected[i])->NotifyAccessibilityEvent(ax::mojom::Event::kSelectionRemove, true);

Project Member

Comment 3 by bugdroid1@chromium.org, May 14 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/12c65585e1221f29d4b6eb6405d0617e96728d38

commit 12c65585e1221f29d4b6eb6405d0617e96728d38
Author: erikchen <erikchen@chromium.org>
Date: Mon May 14 17:26:04 2018

Add a |was_active| parameter to TabStripModel::TabDetachedAt().

This CL is a refactor with no intended behavior change.

Previously, observers were using the |index| parameter and comparing against
TabStripModel::active_index() to determine if the detached tab was active. This
relies on assumptions about the timing of TabDetachedAt(), which will soon be
changed.

Bug:  842194 
Change-Id: I282bcd42a17701f8f3347d535b2bebfa6d7fd8fa
Reviewed-on: https://chromium-review.googlesource.com/1055748
Reviewed-by: Scott Violet <sky@chromium.org>
Commit-Queue: Erik Chen <erikchen@chromium.org>
Cr-Commit-Position: refs/heads/master@{#558359}
[modify] https://crrev.com/12c65585e1221f29d4b6eb6405d0617e96728d38/chrome/browser/extensions/api/tabs/tabs_event_router.cc
[modify] https://crrev.com/12c65585e1221f29d4b6eb6405d0617e96728d38/chrome/browser/extensions/api/tabs/tabs_event_router.h
[modify] https://crrev.com/12c65585e1221f29d4b6eb6405d0617e96728d38/chrome/browser/resource_coordinator/tab_activity_watcher.cc
[modify] https://crrev.com/12c65585e1221f29d4b6eb6405d0617e96728d38/chrome/browser/resource_coordinator/tab_activity_watcher.h
[modify] https://crrev.com/12c65585e1221f29d4b6eb6405d0617e96728d38/chrome/browser/resource_coordinator/tab_lifecycle_unit_source.cc
[modify] https://crrev.com/12c65585e1221f29d4b6eb6405d0617e96728d38/chrome/browser/resource_coordinator/tab_lifecycle_unit_source.h
[modify] https://crrev.com/12c65585e1221f29d4b6eb6405d0617e96728d38/chrome/browser/ui/browser.cc
[modify] https://crrev.com/12c65585e1221f29d4b6eb6405d0617e96728d38/chrome/browser/ui/browser.h
[modify] https://crrev.com/12c65585e1221f29d4b6eb6405d0617e96728d38/chrome/browser/ui/browser_command_controller.cc
[modify] https://crrev.com/12c65585e1221f29d4b6eb6405d0617e96728d38/chrome/browser/ui/browser_command_controller.h
[modify] https://crrev.com/12c65585e1221f29d4b6eb6405d0617e96728d38/chrome/browser/ui/chrome_bubble_manager.cc
[modify] https://crrev.com/12c65585e1221f29d4b6eb6405d0617e96728d38/chrome/browser/ui/chrome_bubble_manager.h
[modify] https://crrev.com/12c65585e1221f29d4b6eb6405d0617e96728d38/chrome/browser/ui/cocoa/tabs/tab_strip_model_observer_bridge.h
[modify] https://crrev.com/12c65585e1221f29d4b6eb6405d0617e96728d38/chrome/browser/ui/cocoa/tabs/tab_strip_model_observer_bridge.mm
[modify] https://crrev.com/12c65585e1221f29d4b6eb6405d0617e96728d38/chrome/browser/ui/extensions/hosted_app_browser_controller.cc
[modify] https://crrev.com/12c65585e1221f29d4b6eb6405d0617e96728d38/chrome/browser/ui/extensions/hosted_app_browser_controller.h
[modify] https://crrev.com/12c65585e1221f29d4b6eb6405d0617e96728d38/chrome/browser/ui/fast_unload_controller.cc
[modify] https://crrev.com/12c65585e1221f29d4b6eb6405d0617e96728d38/chrome/browser/ui/fast_unload_controller.h
[modify] https://crrev.com/12c65585e1221f29d4b6eb6405d0617e96728d38/chrome/browser/ui/search/instant_controller.cc
[modify] https://crrev.com/12c65585e1221f29d4b6eb6405d0617e96728d38/chrome/browser/ui/search/instant_controller.h
[modify] https://crrev.com/12c65585e1221f29d4b6eb6405d0617e96728d38/chrome/browser/ui/tabs/tab_strip_model.cc
[modify] https://crrev.com/12c65585e1221f29d4b6eb6405d0617e96728d38/chrome/browser/ui/tabs/tab_strip_model_observer.cc
[modify] https://crrev.com/12c65585e1221f29d4b6eb6405d0617e96728d38/chrome/browser/ui/tabs/tab_strip_model_observer.h
[modify] https://crrev.com/12c65585e1221f29d4b6eb6405d0617e96728d38/chrome/browser/ui/tabs/tab_strip_model_unittest.cc
[modify] https://crrev.com/12c65585e1221f29d4b6eb6405d0617e96728d38/chrome/browser/ui/tabs/window_activity_watcher.cc
[modify] https://crrev.com/12c65585e1221f29d4b6eb6405d0617e96728d38/chrome/browser/ui/unload_controller.cc
[modify] https://crrev.com/12c65585e1221f29d4b6eb6405d0617e96728d38/chrome/browser/ui/unload_controller.h
[modify] https://crrev.com/12c65585e1221f29d4b6eb6405d0617e96728d38/chrome/browser/ui/views/frame/browser_view.cc
[modify] https://crrev.com/12c65585e1221f29d4b6eb6405d0617e96728d38/chrome/browser/ui/views/frame/browser_view.h
[modify] https://crrev.com/12c65585e1221f29d4b6eb6405d0617e96728d38/chrome/browser/ui/views/tabs/browser_tab_strip_controller.cc
[modify] https://crrev.com/12c65585e1221f29d4b6eb6405d0617e96728d38/chrome/browser/ui/views/tabs/browser_tab_strip_controller.h
[modify] https://crrev.com/12c65585e1221f29d4b6eb6405d0617e96728d38/chrome/browser/unload_browsertest.cc

Project Member

Comment 4 by bugdroid1@chromium.org, May 14 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/f64c33d60de88b6b0d1a3d65860a710ab37dafac

commit f64c33d60de88b6b0d1a3d65860a710ab37dafac
Author: erikchen <erikchen@chromium.org>
Date: Mon May 14 23:39:33 2018

Delay sending TabDetachedAt and TabClosingAt observer notifications.

Previously, the notifications were sent during the tab-close-loop [if multiple
tabs were being closed]. This made reentrancy particularly dangerous.

The logic in Browser::TabDetachedAt and Browser::TabInsertedAt relied on the
|index| parameter to determine whether the index of the active tab has changed
[for which there is no notification]. This CL changes those methods to always
call SessionService::SetSelectedTabInWindow, and modifies
SessionService::SetSelectedTabInWindow to be idempotent.

Bug:  842194 
Change-Id: I2fc54749e495ab9c925bdba89ef857c4ea3537d9
Reviewed-on: https://chromium-review.googlesource.com/1055732
Reviewed-by: Scott Violet <sky@chromium.org>
Commit-Queue: Erik Chen <erikchen@chromium.org>
Cr-Commit-Position: refs/heads/master@{#558530}
[modify] https://crrev.com/f64c33d60de88b6b0d1a3d65860a710ab37dafac/chrome/browser/sessions/session_service.cc
[modify] https://crrev.com/f64c33d60de88b6b0d1a3d65860a710ab37dafac/chrome/browser/sessions/session_service.h
[modify] https://crrev.com/f64c33d60de88b6b0d1a3d65860a710ab37dafac/chrome/browser/ui/browser.cc
[modify] https://crrev.com/f64c33d60de88b6b0d1a3d65860a710ab37dafac/chrome/browser/ui/tabs/tab_strip_model.cc

After discussion with sky, I believe that the appropriate notification to expose from TabStripModelObserver is:

  OnStateChanged(vector<Deltas>, old_selection [pre-application of deltas], new_selection [post-application of deltas])

This replaces:

  TabInsertedAt, TabClosingAt, TabDetachedAt, TabDeactivated, ActiveTabChanged, TabSelectionChanged, TabMoved.

This allows: 

  1) Atomic update for observers for both the selection state and tab list. This simplifies internal logic in TabStrip and StackedTabStripLayout.
  2) Tab restore could be changed to treat multi-tab closes as a single unit.
  3) Animations could be improved for multi-tabs closes.
  4) Easier to enforce non-reentrancy.
  5) Further decouples implementation of TabStripModel from observer notifications, allowing for slight simplification of implementation. This also allows easier decoupling of TabStripModel implementation from WebContents.
Project Member

Comment 6 by bugdroid1@chromium.org, May 22 2018

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/4e1cf300fb988eff92c2c5372f76fa3eb8f0c3ec

commit 4e1cf300fb988eff92c2c5372f76fa3eb8f0c3ec
Author: erikchen <erikchen@chromium.org>
Date: Tue May 22 15:34:15 2018

Add test for accessibility events for TabStrip.

My recent CL: https://chromium-review.googlesource.com/c/chromium/src/+/1045790
added the member selected_tabs_ to TabStrip. I left myself a TODO to try to
figure out how to simplify the class to not need this member.

While it is possible to avoid this member, the solutions are more complex than
the current code. I examined the previous code to see how it managed to be so
simple - it turns out that it did not function correctly! kSelectionRemove
accessibility events were never being fired.

This CL adds a test to confirm that accessibility events are firing correctly.
This CL removes the TODO I left for myself.

Change-Id: I9c238f3e40c23006884c52f188202988bbc468c1
Bug:  842194 
Reviewed-on: https://chromium-review.googlesource.com/1057288
Commit-Queue: Erik Chen <erikchen@chromium.org>
Reviewed-by: Scott Violet <sky@chromium.org>
Reviewed-by: Dominic Mazzoni <dmazzoni@chromium.org>
Cr-Commit-Position: refs/heads/master@{#560604}
[modify] https://crrev.com/4e1cf300fb988eff92c2c5372f76fa3eb8f0c3ec/chrome/browser/ui/views/tabs/tab_strip.h
[modify] https://crrev.com/4e1cf300fb988eff92c2c5372f76fa3eb8f0c3ec/chrome/browser/ui/views/tabs/tab_strip_unittest.cc
[modify] https://crrev.com/4e1cf300fb988eff92c2c5372f76fa3eb8f0c3ec/chrome/test/views/chrome_views_test_base.cc
[modify] https://crrev.com/4e1cf300fb988eff92c2c5372f76fa3eb8f0c3ec/chrome/test/views/chrome_views_test_base.h

Blocking: 805775
This sounds like a great cleanup.

Presumably the "delta" and "selection" objects would be easily queryable for equivalent tab state that was implicitly communicated via the replaced observer methods? Otherwise there will be a lot of similar code written at all of the observer implementations.

I suppose it would be possible to add the new observer method, deprecate the old ones, port code bit by bit, and then remove them one by one? Doing this would allow us to fix some of the dependent bugs immediately while allowing the overall refactor to proceed at its own pace, and ensuring that the situation doesn't continue to get worse (more users of the old methods).
Cc: chrisha@chromium.org
Labels: -Pri-3 Pri-1
I was planning on putting this backburner since this was no pressing reason to refactor. Since this is now blocking 805775, perhaps we should up the priority? 

I'll throw something together today.
Labels: -Pri-1 Pri-3
Actually,  issue 805775  should already be fixed by my earlier work in  Issue 826287 . Dropping priority again.
Blocking: -805775
Confirmed that  issue 805775  is indeed fixed by the work in  issue 826287 . Thanks!
Project Member

Comment 13 by bugdroid1@chromium.org, Aug 1

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/668642c32bf49830c55f4d1e134288cbeb00adb6

commit 668642c32bf49830c55f4d1e134288cbeb00adb6
Author: sangwoo.ko <sangwoo108@chromium.org>
Date: Wed Aug 01 05:27:56 2018

Introduce TabStripModelObserver::OnTabStripChanged()

Previously, selection and content changes were sent as separate callbacks.
This caused consistency errors in observers, as the two must be processed
simultaneously.

TabStripModelObserver::OnTabStripChanged() carries selection and contents
data at the same time. And it'll be called after tab strip model finishes
it's work. So we don't have to care about model's state that much.

Thus, we can replace following with OnTabStripChanged():
  void TabInsertedAt(...);
  void TabReplacedAt(...);
  void TabMoved(...);
  void TabClosingAt(...);
  void TabDetachedAt(...);
  void TabDeactivated(...);
  void ActiveTabChanged(...);
  void TabSelectionChanged(...);

Also this callback allows us to handle multiple changes in a single
callback. e.g. multiple tab closing, insertion, etc.

Change-Id: Iae824f8be536dbe699ba0108bf242114e0906ec7
Bug:  842194 
Reviewed-on: https://chromium-review.googlesource.com/1140105
Commit-Queue: Sang Woo Ko <sangwoo108@chromium.org>
Reviewed-by: Erik Chen <erikchen@chromium.org>
Cr-Commit-Position: refs/heads/master@{#579707}
[modify] https://crrev.com/668642c32bf49830c55f4d1e134288cbeb00adb6/chrome/browser/ui/tabs/tab_strip_model.cc
[modify] https://crrev.com/668642c32bf49830c55f4d1e134288cbeb00adb6/chrome/browser/ui/tabs/tab_strip_model.h
[modify] https://crrev.com/668642c32bf49830c55f4d1e134288cbeb00adb6/chrome/browser/ui/tabs/tab_strip_model_observer.cc
[modify] https://crrev.com/668642c32bf49830c55f4d1e134288cbeb00adb6/chrome/browser/ui/tabs/tab_strip_model_observer.h
[modify] https://crrev.com/668642c32bf49830c55f4d1e134288cbeb00adb6/chrome/browser/ui/tabs/tab_strip_model_unittest.cc

Cc: sangwoo108@chromium.org
I believe we can try replacing old API with new API now!

As of now, 42 classes implement |TabStripModelObserver|.

Here's the list of them.

```
src/chrome/browser/captive_portal/captive_portal_browsertest.cc
src/chrome/browser/devtools/devtools_auto_opener.h
src/chrome/browser/devtools/global_confirm_info_bar.h
src/chrome/browser/extensions/api/tab_capture/tab_capture_apitest.cc
src/chrome/browser/extensions/api/tabs/tabs_event_router.h
src/chrome/browser/extensions/api/web_navigation/web_navigation_api.h
src/chrome/browser/metrics/desktop_session_duration/audible_contents_tracker.h
src/chrome/browser/metrics/tab_reactivation_tracker.h
src/chrome/browser/metrics/tab_stats_tracker.h
src/chrome/browser/metrics/tab_usage_recorder.h
src/chrome/browser/prerender/prerender_browsertest.cc
src/chrome/browser/resource_coordinator/tab_activity_watcher.h
src/chrome/browser/resource_coordinator/tab_lifecycle_unit_source.h
src/chrome/browser/resource_coordinator/tab_manager.h
src/chrome/browser/sessions/session_restore.cc
src/chrome/browser/supervised_user/supervised_user_browsertest.cc
src/chrome/browser/sync/sessions/browser_list_router_helper.h
src/chrome/browser/ui/browser.h
src/chrome/browser/ui/browser_browsertest.cc
src/chrome/browser/ui/browser_command_controller.h
src/chrome/browser/ui/chrome_bubble_manager.h
src/chrome/browser/ui/extensions/hosted_app_browser_controller.h
src/chrome/browser/ui/fast_unload_controller.h
src/chrome/browser/ui/javascript_dialogs/javascript_dialog_tab_helper.h
src/chrome/browser/ui/search/instant_controller.h
src/chrome/browser/ui/tabs/tab_strip_model_order_controller.h
src/chrome/browser/ui/tabs/tab_strip_model_stats_recorder.h
src/chrome/browser/ui/tabs/tab_strip_model_unittest.cc
src/chrome/browser/ui/tabs/window_activity_watcher.cc
src/chrome/browser/ui/toolbar/app_menu_model.h
src/chrome/browser/ui/toolbar/media_router_action.h
src/chrome/browser/ui/toolbar/toolbar_actions_bar.h
src/chrome/browser/ui/unload_controller.h
src/chrome/browser/ui/views/close_bubble_on_tab_activation_helper.h
src/chrome/browser/ui/views/extensions/extension_popup.h
src/chrome/browser/ui/views/frame/browser_view.h
src/chrome/browser/ui/views/tabs/browser_tab_strip_controller.h
src/chrome/browser/ui/views/tabs/tab_drag_controller.h
src/chrome/browser/ui/views/toolbar/browser_app_menu_button.h
src/chrome/browser/unload_browsertest.cc
src/chrome/browser/usb/web_usb_detector.cc
```
Agreed!

Accepting CLs :)
Project Member

Comment 16 by bugdroid1@chromium.org, Aug 9

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/b4ce470befb0d8c9fc690320e99c89e68ac019b1

commit b4ce470befb0d8c9fc690320e99c89e68ac019b1
Author: sangwoo.ko <sangwoo108@chromium.org>
Date: Thu Aug 09 07:47:02 2018

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}
[modify] https://crrev.com/b4ce470befb0d8c9fc690320e99c89e68ac019b1/chrome/browser/devtools/devtools_auto_opener.cc
[modify] https://crrev.com/b4ce470befb0d8c9fc690320e99c89e68ac019b1/chrome/browser/devtools/devtools_auto_opener.h
[modify] https://crrev.com/b4ce470befb0d8c9fc690320e99c89e68ac019b1/chrome/browser/devtools/global_confirm_info_bar.cc
[modify] https://crrev.com/b4ce470befb0d8c9fc690320e99c89e68ac019b1/chrome/browser/devtools/global_confirm_info_bar.h
[modify] https://crrev.com/b4ce470befb0d8c9fc690320e99c89e68ac019b1/chrome/browser/ui/browser_tab_strip_tracker.cc
[modify] https://crrev.com/b4ce470befb0d8c9fc690320e99c89e68ac019b1/chrome/browser/ui/tabs/tab_strip_model.cc
[modify] https://crrev.com/b4ce470befb0d8c9fc690320e99c89e68ac019b1/chrome/browser/ui/tabs/tab_strip_model_observer.cc
[modify] https://crrev.com/b4ce470befb0d8c9fc690320e99c89e68ac019b1/chrome/browser/ui/tabs/tab_strip_model_observer.h
[modify] https://crrev.com/b4ce470befb0d8c9fc690320e99c89e68ac019b1/chrome/browser/ui/tabs/tab_strip_model_unittest.cc

Project Member

Comment 17 by bugdroid1@chromium.org, Aug 14

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/a60a2e6a1bb00d240dbac67526b6774c5e77430c

commit a60a2e6a1bb00d240dbac67526b6774c5e77430c
Author: sangwoo.ko <sangwoo108@chromium.org>
Date: Tue Aug 14 05:39:47 2018

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

Replace old API with new API. In order to do this, changed
the API a little bit.

* Notify before deleting web conents when tabs are closed.
* Pass TabStripModel* in OnTabStripModelChanged().

This CL has no intended behavior change. Reordered methods
definitions so that they match with declarartion order.

Change-Id: I704cfb3418d06a7539096307aefab916338c65e9
Bug:  842194 
Reviewed-on: https://chromium-review.googlesource.com/1171963
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@{#582840}
[modify] https://crrev.com/a60a2e6a1bb00d240dbac67526b6774c5e77430c/chrome/browser/devtools/devtools_auto_opener.cc
[modify] https://crrev.com/a60a2e6a1bb00d240dbac67526b6774c5e77430c/chrome/browser/devtools/devtools_auto_opener.h
[modify] https://crrev.com/a60a2e6a1bb00d240dbac67526b6774c5e77430c/chrome/browser/devtools/global_confirm_info_bar.cc
[modify] https://crrev.com/a60a2e6a1bb00d240dbac67526b6774c5e77430c/chrome/browser/devtools/global_confirm_info_bar.h
[modify] https://crrev.com/a60a2e6a1bb00d240dbac67526b6774c5e77430c/chrome/browser/extensions/api/tabs/tabs_event_router.cc
[modify] https://crrev.com/a60a2e6a1bb00d240dbac67526b6774c5e77430c/chrome/browser/extensions/api/tabs/tabs_event_router.h
[modify] https://crrev.com/a60a2e6a1bb00d240dbac67526b6774c5e77430c/chrome/browser/ui/browser_tab_strip_tracker.cc
[modify] https://crrev.com/a60a2e6a1bb00d240dbac67526b6774c5e77430c/chrome/browser/ui/tabs/tab_strip_model.cc
[modify] https://crrev.com/a60a2e6a1bb00d240dbac67526b6774c5e77430c/chrome/browser/ui/tabs/tab_strip_model_observer.cc
[modify] https://crrev.com/a60a2e6a1bb00d240dbac67526b6774c5e77430c/chrome/browser/ui/tabs/tab_strip_model_observer.h
[modify] https://crrev.com/a60a2e6a1bb00d240dbac67526b6774c5e77430c/chrome/browser/ui/tabs/tab_strip_model_unittest.cc

Project Member

Comment 18 by bugdroid1@chromium.org, Aug 15

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/22fb87884e79518d732ecddd8c3cae5a8b42bd0a

commit 22fb87884e79518d732ecddd8c3cae5a8b42bd0a
Author: sangwoo.ko <sangwoo108@chromium.org>
Date: Wed Aug 15 17:57:29 2018

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

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

Bug:  842194 
Change-Id: I46e242b51c99ef720ee6700ab6bf0fdc8c2a4720
Reviewed-on: https://chromium-review.googlesource.com/1174582
Reviewed-by: Erik Chen <erikchen@chromium.org>
Reviewed-by: Scott Violet <sky@chromium.org>
Commit-Queue: Sang Woo Ko <sangwoo108@chromium.org>
Cr-Commit-Position: refs/heads/master@{#583318}
[modify] https://crrev.com/22fb87884e79518d732ecddd8c3cae5a8b42bd0a/chrome/browser/extensions/api/web_navigation/web_navigation_api.cc
[modify] https://crrev.com/22fb87884e79518d732ecddd8c3cae5a8b42bd0a/chrome/browser/extensions/api/web_navigation/web_navigation_api.h

Project Member

Comment 19 by bugdroid1@chromium.org, Aug 16

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/e56095b1aa1ebd67a45bd157097753626118e7dd

commit e56095b1aa1ebd67a45bd157097753626118e7dd
Author: sangwoo.ko <sangwoo108@chromium.org>
Date: Thu Aug 16 16:01:48 2018

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

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

Bug:  842194 
Change-Id: I700df0bc23f0b52d123e92ff16013153a359b16f
Reviewed-on: https://chromium-review.googlesource.com/1176897
Reviewed-by: Erik Chen <erikchen@chromium.org>
Reviewed-by: Ilya Sherman <isherman@chromium.org>
Commit-Queue: Sang Woo Ko <sangwoo108@chromium.org>
Cr-Commit-Position: refs/heads/master@{#583678}
[modify] https://crrev.com/e56095b1aa1ebd67a45bd157097753626118e7dd/chrome/browser/metrics/desktop_session_duration/audible_contents_tracker.cc
[modify] https://crrev.com/e56095b1aa1ebd67a45bd157097753626118e7dd/chrome/browser/metrics/desktop_session_duration/audible_contents_tracker.h
[modify] https://crrev.com/e56095b1aa1ebd67a45bd157097753626118e7dd/chrome/browser/metrics/tab_reactivation_tracker.cc
[modify] https://crrev.com/e56095b1aa1ebd67a45bd157097753626118e7dd/chrome/browser/metrics/tab_reactivation_tracker.h
[modify] https://crrev.com/e56095b1aa1ebd67a45bd157097753626118e7dd/chrome/browser/metrics/tab_stats_tracker.cc
[modify] https://crrev.com/e56095b1aa1ebd67a45bd157097753626118e7dd/chrome/browser/metrics/tab_stats_tracker.h
[modify] https://crrev.com/e56095b1aa1ebd67a45bd157097753626118e7dd/chrome/browser/metrics/tab_usage_recorder.cc
[modify] https://crrev.com/e56095b1aa1ebd67a45bd157097753626118e7dd/chrome/browser/metrics/tab_usage_recorder.h

Project Member

Comment 20 by bugdroid1@chromium.org, Aug 22

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/d2c3c8fb842ac9a74e8592684ae8b1d4d0b17c20

commit d2c3c8fb842ac9a74e8592684ae8b1d4d0b17c20
Author: sangwoo.ko <sangwoo108@chromium.org>
Date: Wed Aug 22 06:22:23 2018

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

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

Bug:  842194 
Change-Id: Iac5ac3946c8590d5983c93d14a725d7de670311a
Reviewed-on: https://chromium-review.googlesource.com/1179120
Reviewed-by: Chris Hamilton <chrisha@chromium.org>
Commit-Queue: Sang Woo Ko <sangwoo108@chromium.org>
Cr-Commit-Position: refs/heads/master@{#584967}
[modify] https://crrev.com/d2c3c8fb842ac9a74e8592684ae8b1d4d0b17c20/chrome/browser/resource_coordinator/tab_activity_watcher.cc
[modify] https://crrev.com/d2c3c8fb842ac9a74e8592684ae8b1d4d0b17c20/chrome/browser/resource_coordinator/tab_activity_watcher.h
[modify] https://crrev.com/d2c3c8fb842ac9a74e8592684ae8b1d4d0b17c20/chrome/browser/resource_coordinator/tab_lifecycle_unit_source.cc
[modify] https://crrev.com/d2c3c8fb842ac9a74e8592684ae8b1d4d0b17c20/chrome/browser/resource_coordinator/tab_lifecycle_unit_source.h
[modify] https://crrev.com/d2c3c8fb842ac9a74e8592684ae8b1d4d0b17c20/chrome/browser/resource_coordinator/tab_manager.cc
[modify] https://crrev.com/d2c3c8fb842ac9a74e8592684ae8b1d4d0b17c20/chrome/browser/resource_coordinator/tab_manager.h
[modify] https://crrev.com/d2c3c8fb842ac9a74e8592684ae8b1d4d0b17c20/chrome/browser/resource_coordinator/tab_manager_unittest.cc

Project Member

Comment 21 by bugdroid1@chromium.org, Aug 23

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/6638923ba2854a41f2b8befcf08ed1dab1ecd698

commit 6638923ba2854a41f2b8befcf08ed1dab1ecd698
Author: sangwoo.ko <sangwoo108@chromium.org>
Date: Thu Aug 23 09:36:46 2018

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

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

Bug:  842194 
Change-Id: Ic1527d6bff78bc71b46df9d684b9b6b223c9cdea
Reviewed-on: https://chromium-review.googlesource.com/1179428
Reviewed-by: Erik Chen <erikchen@chromium.org>
Reviewed-by: David Roger <droger@chromium.org>
Commit-Queue: Sang Woo Ko <sangwoo108@chromium.org>
Cr-Commit-Position: refs/heads/master@{#585436}
[modify] https://crrev.com/6638923ba2854a41f2b8befcf08ed1dab1ecd698/chrome/browser/prerender/prerender_browsertest.cc

Project Member

Comment 22 by bugdroid1@chromium.org, Aug 30

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/a5533b827daabbaaa2f9f03d027ebd6edee18ba9

commit a5533b827daabbaaa2f9f03d027ebd6edee18ba9
Author: sangwoo.ko <sangwoo108@chromium.org>
Date: Thu Aug 30 01:35:38 2018

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

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

Bug:  842194 
Change-Id: I63e4dcd20885a45f2df37759bce70066bfdab2ab
Reviewed-on: https://chromium-review.googlesource.com/1189323
Reviewed-by: Scott Violet <sky@chromium.org>
Reviewed-by: Erik Chen <erikchen@chromium.org>
Commit-Queue: Sang Woo Ko <sangwoo108@chromium.org>
Cr-Commit-Position: refs/heads/master@{#587386}
[modify] https://crrev.com/a5533b827daabbaaa2f9f03d027ebd6edee18ba9/chrome/browser/sessions/session_restore.cc
[modify] https://crrev.com/a5533b827daabbaaa2f9f03d027ebd6edee18ba9/chrome/browser/supervised_user/supervised_user_browsertest.cc
[modify] https://crrev.com/a5533b827daabbaaa2f9f03d027ebd6edee18ba9/chrome/browser/sync/sessions/browser_list_router_helper.cc
[modify] https://crrev.com/a5533b827daabbaaa2f9f03d027ebd6edee18ba9/chrome/browser/sync/sessions/browser_list_router_helper.h

Cc: -sangwoo108@chromium.org erikc...@chromium.org
Owner: sangwoo108@chromium.org
Status: Started (was: Assigned)
Project Member

Comment 24 by bugdroid1@chromium.org, Oct 1

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/0e3d484a97f0431f717ad565f680b1c425e195b7

commit 0e3d484a97f0431f717ad565f680b1c425e195b7
Author: sangwoo.ko <sangwoo.ko@navercorp.com>
Date: Mon Oct 01 03:10:28 2018

Don't send 'detached' notification if unload handler is triggered

When we try closing tabs, there might be 'unload handler' on them.
In this case, we should wait for the result. So in this case,
there's no closed web contents detached.

Bug:  842194 
Change-Id: I78b0d9f8d42631b1309f4baa8dbbfa9503564426
Reviewed-on: https://chromium-review.googlesource.com/1248883
Reviewed-by: Erik Chen <erikchen@chromium.org>
Commit-Queue: Sang Woo Ko <sangwoo108@chromium.org>
Cr-Commit-Position: refs/heads/master@{#595375}
[modify] https://crrev.com/0e3d484a97f0431f717ad565f680b1c425e195b7/chrome/browser/ui/tabs/tab_strip_model.cc

Project Member

Comment 25 by bugdroid1@chromium.org, Oct 15

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/0fbe1e521dcc61297761d85e342af129aca9fa1a

commit 0fbe1e521dcc61297761d85e342af129aca9fa1a
Author: sangwoo.ko <sangwoo.ko@navercorp.com>
Date: Mon Oct 15 18:54:33 2018

Use TabStripModelObserver's new API: trivial files 1/2

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

Bug:  842194 
Change-Id: I0d635e46bbaf3f9cfb7d5083445319c341c0cb76
Reviewed-on: https://chromium-review.googlesource.com/c/1245861
Reviewed-by: Scott Violet <sky@chromium.org>
Reviewed-by: Erik Chen <erikchen@chromium.org>
Commit-Queue: Sang Woo Ko <sangwoo108@chromium.org>
Cr-Commit-Position: refs/heads/master@{#599700}
[modify] https://crrev.com/0fbe1e521dcc61297761d85e342af129aca9fa1a/chrome/browser/ui/browser_browsertest.cc
[modify] https://crrev.com/0fbe1e521dcc61297761d85e342af129aca9fa1a/chrome/browser/ui/tabs/window_activity_watcher.cc
[modify] https://crrev.com/0fbe1e521dcc61297761d85e342af129aca9fa1a/chrome/browser/ui/toolbar/app_menu_model.cc
[modify] https://crrev.com/0fbe1e521dcc61297761d85e342af129aca9fa1a/chrome/browser/ui/toolbar/app_menu_model.h
[modify] https://crrev.com/0fbe1e521dcc61297761d85e342af129aca9fa1a/chrome/browser/ui/toolbar/media_router_action.cc
[modify] https://crrev.com/0fbe1e521dcc61297761d85e342af129aca9fa1a/chrome/browser/ui/toolbar/media_router_action.h
[modify] https://crrev.com/0fbe1e521dcc61297761d85e342af129aca9fa1a/chrome/browser/ui/toolbar/media_router_action_unittest.cc
[modify] https://crrev.com/0fbe1e521dcc61297761d85e342af129aca9fa1a/chrome/browser/ui/toolbar/toolbar_actions_bar.cc
[modify] https://crrev.com/0fbe1e521dcc61297761d85e342af129aca9fa1a/chrome/browser/ui/toolbar/toolbar_actions_bar.h
[modify] https://crrev.com/0fbe1e521dcc61297761d85e342af129aca9fa1a/chrome/browser/ui/views/close_bubble_on_tab_activation_helper.cc
[modify] https://crrev.com/0fbe1e521dcc61297761d85e342af129aca9fa1a/chrome/browser/ui/views/close_bubble_on_tab_activation_helper.h
[modify] https://crrev.com/0fbe1e521dcc61297761d85e342af129aca9fa1a/chrome/browser/ui/views/extensions/extension_popup.cc
[modify] https://crrev.com/0fbe1e521dcc61297761d85e342af129aca9fa1a/chrome/browser/ui/views/extensions/extension_popup.h
[modify] https://crrev.com/0fbe1e521dcc61297761d85e342af129aca9fa1a/chrome/browser/ui/views/toolbar/browser_app_menu_button.cc
[modify] https://crrev.com/0fbe1e521dcc61297761d85e342af129aca9fa1a/chrome/browser/ui/views/toolbar/browser_app_menu_button.h
[modify] https://crrev.com/0fbe1e521dcc61297761d85e342af129aca9fa1a/chrome/browser/usb/web_usb_detector.cc

Project Member

Comment 26 by bugdroid1@chromium.org, Oct 18

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/1ae265f1ea41cba43d4b5ffdd43394161f0ca725

commit 1ae265f1ea41cba43d4b5ffdd43394161f0ca725
Author: sangwoo.ko <sangwoo.ko@navercorp.com>
Date: Thu Oct 18 08:30:28 2018

Use TabStripModelObserver's new API: trivial files 2/2

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

Bug:  842194 
Change-Id: I51591bad6d084f2200fca07deb6b0e90a6e45ba2
Reviewed-on: https://chromium-review.googlesource.com/c/1246841
Commit-Queue: Sang Woo Ko <sangwoo108@chromium.org>
Reviewed-by: Scott Violet <sky@chromium.org>
Reviewed-by: Erik Chen <erikchen@chromium.org>
Cr-Commit-Position: refs/heads/master@{#600692}
[modify] https://crrev.com/1ae265f1ea41cba43d4b5ffdd43394161f0ca725/chrome/browser/ui/browser_command_controller.cc
[modify] https://crrev.com/1ae265f1ea41cba43d4b5ffdd43394161f0ca725/chrome/browser/ui/browser_command_controller.h
[modify] https://crrev.com/1ae265f1ea41cba43d4b5ffdd43394161f0ca725/chrome/browser/ui/chrome_bubble_manager.cc
[modify] https://crrev.com/1ae265f1ea41cba43d4b5ffdd43394161f0ca725/chrome/browser/ui/chrome_bubble_manager.h
[modify] https://crrev.com/1ae265f1ea41cba43d4b5ffdd43394161f0ca725/chrome/browser/ui/extensions/hosted_app_browser_controller.cc
[modify] https://crrev.com/1ae265f1ea41cba43d4b5ffdd43394161f0ca725/chrome/browser/ui/extensions/hosted_app_browser_controller.h
[modify] https://crrev.com/1ae265f1ea41cba43d4b5ffdd43394161f0ca725/chrome/browser/ui/fast_unload_controller.cc
[modify] https://crrev.com/1ae265f1ea41cba43d4b5ffdd43394161f0ca725/chrome/browser/ui/fast_unload_controller.h
[modify] https://crrev.com/1ae265f1ea41cba43d4b5ffdd43394161f0ca725/chrome/browser/ui/javascript_dialogs/javascript_dialog_tab_helper.cc
[modify] https://crrev.com/1ae265f1ea41cba43d4b5ffdd43394161f0ca725/chrome/browser/ui/javascript_dialogs/javascript_dialog_tab_helper.h
[modify] https://crrev.com/1ae265f1ea41cba43d4b5ffdd43394161f0ca725/chrome/browser/ui/search/instant_controller.cc
[modify] https://crrev.com/1ae265f1ea41cba43d4b5ffdd43394161f0ca725/chrome/browser/ui/search/instant_controller.h
[modify] https://crrev.com/1ae265f1ea41cba43d4b5ffdd43394161f0ca725/chrome/browser/ui/tabs/tab_strip_model_order_controller.cc
[modify] https://crrev.com/1ae265f1ea41cba43d4b5ffdd43394161f0ca725/chrome/browser/ui/tabs/tab_strip_model_order_controller.h
[modify] https://crrev.com/1ae265f1ea41cba43d4b5ffdd43394161f0ca725/chrome/browser/ui/tabs/tab_strip_model_stats_recorder.cc
[modify] https://crrev.com/1ae265f1ea41cba43d4b5ffdd43394161f0ca725/chrome/browser/ui/tabs/tab_strip_model_stats_recorder.h
[modify] https://crrev.com/1ae265f1ea41cba43d4b5ffdd43394161f0ca725/chrome/browser/ui/unload_controller.cc
[modify] https://crrev.com/1ae265f1ea41cba43d4b5ffdd43394161f0ca725/chrome/browser/ui/unload_controller.h
[modify] https://crrev.com/1ae265f1ea41cba43d4b5ffdd43394161f0ca725/chrome/browser/unload_browsertest.cc

Project Member

Comment 27 by bugdroid1@chromium.org, Oct 23

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/c647b2ae93668cf14396d2835b6a28cd00f0de9c

commit c647b2ae93668cf14396d2835b6a28cd00f0de9c
Author: sangwoo.ko <sangwoo.ko@navercorp.com>
Date: Tue Oct 23 02:35:28 2018

Use TabStripModelObserver's new API in Browser

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

The new API callbacks are only invoked when the internal
state of TabStripModel is consistent. The old API callbacks
would be invoked while the internal state of
TabStripModel was inconsistent.

FullscreenController's implementation was relying on
an inconsistent state for TabStripModel. So FullscreenController
is modified too. FullscreenController::IsFullscreenForTabOrPending()
checks if |web_contents| is same with the active tab. But when it's
handling tab deactivation, the active tab is already changed to the
newly activated tab. Therefore we shouldn't assert in that case.

Change-Id: I10a9f055ae111d43ba20ad6b9155196abe638e5b
Bug:  842194 
Reviewed-on: https://chromium-review.googlesource.com/c/1196287
Reviewed-by: Scott Violet <sky@chromium.org>
Reviewed-by: Erik Chen <erikchen@chromium.org>
Commit-Queue: Sang Woo Ko <sangwoo108@chromium.org>
Cr-Commit-Position: refs/heads/master@{#601831}
[modify] https://crrev.com/c647b2ae93668cf14396d2835b6a28cd00f0de9c/chrome/browser/page_load_metrics/page_load_metrics_browsertest.cc
[modify] https://crrev.com/c647b2ae93668cf14396d2835b6a28cd00f0de9c/chrome/browser/ui/browser.cc
[modify] https://crrev.com/c647b2ae93668cf14396d2835b6a28cd00f0de9c/chrome/browser/ui/browser.h
[modify] https://crrev.com/c647b2ae93668cf14396d2835b6a28cd00f0de9c/chrome/browser/ui/exclusive_access/fullscreen_controller.cc
[modify] https://crrev.com/c647b2ae93668cf14396d2835b6a28cd00f0de9c/chrome/browser/ui/exclusive_access/fullscreen_controller.h
[modify] https://crrev.com/c647b2ae93668cf14396d2835b6a28cd00f0de9c/chrome/browser/ui/javascript_dialogs/javascript_dialog_browsertest.cc

Project Member

Comment 28 by bugdroid1@chromium.org, Nov 1

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/6a713d15895a0077059f517dd10c4f8155b10065

commit 6a713d15895a0077059f517dd10c4f8155b10065
Author: sangwoo.ko <sangwoo.ko@navercorp.com>
Date: Thu Nov 01 02:56:51 2018

Use TabStripModelObserver's new API: browser_tab_strip_controller

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

To keep TabStrip UI consistent with model, make tabstrip UI the
first observer.

Bug:  842194 
Change-Id: Icba9481d41ba32a7910593198cebd313ad531e5d
Reviewed-on: https://chromium-review.googlesource.com/c/1249461
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@{#604497}
[modify] https://crrev.com/6a713d15895a0077059f517dd10c4f8155b10065/chrome/browser/ui/tabs/tab_strip_model.cc
[modify] https://crrev.com/6a713d15895a0077059f517dd10c4f8155b10065/chrome/browser/ui/tabs/tab_strip_model.h
[modify] https://crrev.com/6a713d15895a0077059f517dd10c4f8155b10065/chrome/browser/ui/views/tabs/browser_tab_strip_controller.cc
[modify] https://crrev.com/6a713d15895a0077059f517dd10c4f8155b10065/chrome/browser/ui/views/tabs/browser_tab_strip_controller.h

Project Member

Comment 29 by bugdroid1@chromium.org, Nov 6

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/9775aabebbf0c2686719870822cdb8378a208cdb

commit 9775aabebbf0c2686719870822cdb8378a208cdb
Author: sangwoo.ko <sangwoo.ko@navercorp.com>
Date: Tue Nov 06 03:18:10 2018

Deprecate old TabStripModelObserver API

Stop notifying events via old api and replace old API with new API.
This CL is a refactor and has no intended behavior change.

Bug:  842194 
Change-Id: I5e11e7323940acbbdc31bd73d599480c7312e8b9
Reviewed-on: https://chromium-review.googlesource.com/c/1314508
Commit-Queue: Sang Woo Ko <sangwoo108@chromium.org>
Reviewed-by: Scott Violet <sky@chromium.org>
Cr-Commit-Position: refs/heads/master@{#605584}
[modify] https://crrev.com/9775aabebbf0c2686719870822cdb8378a208cdb/chrome/browser/captive_portal/captive_portal_browsertest.cc
[modify] https://crrev.com/9775aabebbf0c2686719870822cdb8378a208cdb/chrome/browser/chromeos/arc/intent_helper/intent_picker_controller.cc
[modify] https://crrev.com/9775aabebbf0c2686719870822cdb8378a208cdb/chrome/browser/chromeos/arc/intent_helper/intent_picker_controller.h
[modify] https://crrev.com/9775aabebbf0c2686719870822cdb8378a208cdb/chrome/browser/ui/ash/launcher/browser_status_monitor.cc
[modify] https://crrev.com/9775aabebbf0c2686719870822cdb8378a208cdb/chrome/browser/ui/ash/launcher/browser_status_monitor.h
[modify] https://crrev.com/9775aabebbf0c2686719870822cdb8378a208cdb/chrome/browser/ui/ash/tab_scrubber_browsertest.cc
[modify] https://crrev.com/9775aabebbf0c2686719870822cdb8378a208cdb/chrome/browser/ui/ash/tablet_mode_client.cc
[modify] https://crrev.com/9775aabebbf0c2686719870822cdb8378a208cdb/chrome/browser/ui/ash/tablet_mode_client.h
[modify] https://crrev.com/9775aabebbf0c2686719870822cdb8378a208cdb/chrome/browser/ui/browser_tab_strip_tracker.cc
[modify] https://crrev.com/9775aabebbf0c2686719870822cdb8378a208cdb/chrome/browser/ui/cocoa/handoff_active_url_observer.cc
[modify] https://crrev.com/9775aabebbf0c2686719870822cdb8378a208cdb/chrome/browser/ui/cocoa/handoff_active_url_observer.h
[modify] https://crrev.com/9775aabebbf0c2686719870822cdb8378a208cdb/chrome/browser/ui/cocoa/touchbar/browser_window_touch_bar_controller.mm
[modify] https://crrev.com/9775aabebbf0c2686719870822cdb8378a208cdb/chrome/browser/ui/tabs/tab_strip_model.cc
[modify] https://crrev.com/9775aabebbf0c2686719870822cdb8378a208cdb/chrome/browser/ui/tabs/tab_strip_model.h
[modify] https://crrev.com/9775aabebbf0c2686719870822cdb8378a208cdb/chrome/browser/ui/tabs/tab_strip_model_observer.cc
[modify] https://crrev.com/9775aabebbf0c2686719870822cdb8378a208cdb/chrome/browser/ui/tabs/tab_strip_model_observer.h
[modify] https://crrev.com/9775aabebbf0c2686719870822cdb8378a208cdb/chrome/browser/ui/tabs/tab_strip_model_unittest.cc
[modify] https://crrev.com/9775aabebbf0c2686719870822cdb8378a208cdb/chrome/browser/ui/views/frame/top_controls_slide_controller_chromeos.cc
[modify] https://crrev.com/9775aabebbf0c2686719870822cdb8378a208cdb/chrome/browser/ui/views/frame/top_controls_slide_controller_chromeos.h

Status: Fixed (was: Started)
Project Member

Comment 31 by bugdroid1@chromium.org, Nov 13

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/75429d4ae805e82e1bf8517246a492af60939c7b

commit 75429d4ae805e82e1bf8517246a492af60939c7b
Author: sangwoo.ko <sangwoo.ko@navercorp.com>
Date: Tue Nov 13 04:25:38 2018

Notify selection changes made by tab removal

When selected tabs were removed, we must notify that even
selection model is unchanged. This is because the old selection model
and new one would be same when the newly activated tab was right after
prviously active tab.

Bug:  842194 ,  903438 
Change-Id: I23fd9d8ba9f1ac10b3daf03088a2c2d974f435d8
Reviewed-on: https://chromium-review.googlesource.com/c/1331098
Commit-Queue: Sang Woo Ko <sangwoo108@chromium.org>
Reviewed-by: Erik Chen <erikchen@chromium.org>
Cr-Commit-Position: refs/heads/master@{#607485}
[modify] https://crrev.com/75429d4ae805e82e1bf8517246a492af60939c7b/chrome/browser/ui/tabs/tab_strip_model.cc
[modify] https://crrev.com/75429d4ae805e82e1bf8517246a492af60939c7b/chrome/browser/ui/tabs/tab_strip_model_observer.cc
[modify] https://crrev.com/75429d4ae805e82e1bf8517246a492af60939c7b/chrome/browser/ui/tabs/tab_strip_model_observer.h

Sign in to add a comment