Skip to content

Commit 7dcbfa1

Browse files
Yusuf OzuysalYusuf Ozuysal
authored andcommitted
Use ObserverList for OverviewModeBehavior
This switches to use ObserverList OverviewModeObservers in ChromeTabbedActivity. This list gets frequently modified during iteration, and Array List is throwing a ConcurrentModificationException because of this right now. BUG=938236 TBR=yusufo@google.com (cherry picked from commit 0775dc30ab0ccfd38181c219c3bc725ae03a5fa4) Change-Id: I65c99b774ae34f2984ddb8f5ca254ff8e2af4569 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1515713 Commit-Queue: Yusuf Ozuysal <yusufo@chromium.org> Reviewed-by: Ted Choc <tedchoc@chromium.org> Cr-Original-Commit-Position: refs/heads/master@{#639660} Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1518364 Reviewed-by: Yusuf Ozuysal <yusufo@chromium.org> Cr-Commit-Position: refs/branch-heads/3729@{#63} Cr-Branched-From: d4a8972-refs/heads/master@{#638880}
1 parent c0b9245 commit 7dcbfa1

2 files changed

Lines changed: 16 additions & 16 deletions

File tree

chrome/android/features/tab_ui/java/src/org/chromium/chrome/browser/tasks/tab_management/GridTabSwitcherMediator.java

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import static org.chromium.chrome.browser.tasks.tab_management.TabListContainerProperties.TOP_CONTROLS_HEIGHT;
1313
import static org.chromium.chrome.browser.tasks.tab_management.TabListContainerProperties.VISIBILITY_LISTENER;
1414

15+
import org.chromium.base.ObserverList;
1516
import org.chromium.chrome.browser.compositor.layouts.OverviewModeController;
1617
import org.chromium.chrome.browser.fullscreen.ChromeFullscreenManager;
1718
import org.chromium.chrome.browser.fullscreen.FullscreenManager;
@@ -24,9 +25,6 @@
2425
import org.chromium.chrome.browser.tabmodel.TabSelectionType;
2526
import org.chromium.ui.modelutil.PropertyModel;
2627

27-
import java.util.ArrayList;
28-
import java.util.List;
29-
3028
/**
3129
* The Mediator that is responsible for resetting the tab grid based on visibility and model
3230
* changes.
@@ -42,7 +40,7 @@ class GridTabSwitcherMediator
4240
private final TabModelSelector mTabModelSelector;
4341
private final TabModelSelectorTabModelObserver mTabModelObserver;
4442
private final TabModelSelectorObserver mTabModelSelectorObserver;
45-
private final List<OverviewModeObserver> mObservers = new ArrayList<>();
43+
private final ObserverList<OverviewModeObserver> mObservers = new ObserverList<>();
4644
private final ChromeFullscreenManager mFullscreenManager;
4745
private final ChromeFullscreenManager.FullscreenListener mFullscreenListener =
4846
new ChromeFullscreenManager.FullscreenListener() {
@@ -138,13 +136,13 @@ public boolean overviewVisible() {
138136
}
139137

140138
@Override
141-
public void addOverviewModeObserver(OverviewModeObserver listener) {
142-
mObservers.add(listener);
139+
public void addOverviewModeObserver(OverviewModeObserver observer) {
140+
mObservers.addObserver(observer);
143141
}
144142

145143
@Override
146-
public void removeOverviewModeObserver(OverviewModeObserver listener) {
147-
mObservers.remove(listener);
144+
public void removeOverviewModeObserver(OverviewModeObserver observer) {
145+
mObservers.removeObserver(observer);
148146
}
149147

150148
@Override

chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
import org.chromium.base.ContextUtils;
4343
import org.chromium.base.Log;
4444
import org.chromium.base.MemoryPressureListener;
45+
import org.chromium.base.ObserverList;
4546
import org.chromium.base.ThreadUtils;
4647
import org.chromium.base.TraceEvent;
4748
import org.chromium.base.VisibleForTesting;
@@ -170,7 +171,6 @@
170171

171172
import java.lang.annotation.Retention;
172173
import java.lang.annotation.RetentionPolicy;
173-
import java.util.ArrayList;
174174
import java.util.List;
175175
import java.util.Locale;
176176

@@ -333,7 +333,7 @@ public void closeAllIncognitoTabs() {
333333
private static class OverviewModeControllerContainer
334334
implements OverviewModeObserver, OverviewModeController {
335335
private OverviewModeController mInternalOverviewModeController;
336-
private List<OverviewModeObserver> mOverviewModeObserverList = new ArrayList<>();
336+
private ObserverList<OverviewModeObserver> mOverviewModeObserverList = new ObserverList<>();
337337

338338
@Override
339339
public boolean overviewVisible() {
@@ -342,25 +342,27 @@ public boolean overviewVisible() {
342342
}
343343

344344
@Override
345-
public void addOverviewModeObserver(OverviewModeObserver listener) {
346-
mOverviewModeObserverList.add(listener);
345+
public void addOverviewModeObserver(OverviewModeObserver observer) {
346+
mOverviewModeObserverList.addObserver(observer);
347347
}
348348

349349
@Override
350-
public void removeOverviewModeObserver(OverviewModeObserver listener) {
351-
mOverviewModeObserverList.remove(listener);
350+
public void removeOverviewModeObserver(OverviewModeObserver observer) {
351+
mOverviewModeObserverList.removeObserver(observer);
352352
}
353353

354354
@Override
355355
public void hideOverview(boolean animate) {
356-
if (mInternalOverviewModeController != null)
356+
if (mInternalOverviewModeController != null) {
357357
mInternalOverviewModeController.hideOverview(animate);
358+
}
358359
}
359360

360361
@Override
361362
public void showOverview(boolean animate) {
362-
if (mInternalOverviewModeController != null)
363+
if (mInternalOverviewModeController != null) {
363364
mInternalOverviewModeController.showOverview(animate);
365+
}
364366
}
365367

366368
@Override

0 commit comments

Comments
 (0)