Commit 977f1c54 authored by Side Yilmaz's avatar Side Yilmaz Committed by Commit Bot

Set mCountOfAddingOrClosingTabs boolean for tab closing and removing.

Incognito profile is destroyed by IncognitoTabModelImpl, if there is no
tab closing at that moment. However, setting
mCountOfAddingOrClosingTabs was missing for |closeAllTabs|,
|closeMultipleTabs| and |removeTab| functions. This CL adds this logic
to the class.

Bug: 1142341, 1143189
Change-Id: I8192ad2099cb26c822d9249bb9409a56cb1250e4
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2517532
Commit-Queue: Side YILMAZ <sideyilmaz@chromium.org>
Reviewed-by: default avatarTed Choc <tedchoc@chromium.org>
Reviewed-by: default avatarMei Liang <meiliang@chromium.org>
Cr-Commit-Position: refs/heads/master@{#825110}
parent 6a2ab173
...@@ -39,8 +39,7 @@ public class IncognitoTabModelImpl implements IncognitoTabModel { ...@@ -39,8 +39,7 @@ public class IncognitoTabModelImpl implements IncognitoTabModel {
private final ObserverList<IncognitoTabModelObserver> mIncognitoObservers = private final ObserverList<IncognitoTabModelObserver> mIncognitoObservers =
new ObserverList<>(); new ObserverList<>();
private TabModel mDelegateModel; private TabModel mDelegateModel;
private boolean mIsAddingTab; private int mCountOfAddingOrClosingTabs;
private boolean mIsClosingTab;
private boolean mActive; private boolean mActive;
/** /**
...@@ -70,8 +69,8 @@ public class IncognitoTabModelImpl implements IncognitoTabModel { ...@@ -70,8 +69,8 @@ public class IncognitoTabModelImpl implements IncognitoTabModel {
*/ */
protected void destroyIncognitoIfNecessary() { protected void destroyIncognitoIfNecessary() {
ThreadUtils.assertOnUiThread(); ThreadUtils.assertOnUiThread();
if (!isEmpty() || mDelegateModel instanceof EmptyTabModel || mIsAddingTab if (!isEmpty() || mDelegateModel instanceof EmptyTabModel
|| mIsClosingTab) { || mCountOfAddingOrClosingTabs != 0) {
return; return;
} }
...@@ -111,18 +110,18 @@ public class IncognitoTabModelImpl implements IncognitoTabModel { ...@@ -111,18 +110,18 @@ public class IncognitoTabModelImpl implements IncognitoTabModel {
@Override @Override
public boolean closeTab(Tab tab) { public boolean closeTab(Tab tab) {
mIsClosingTab = true; mCountOfAddingOrClosingTabs++;
boolean retVal = mDelegateModel.closeTab(tab); boolean retVal = mDelegateModel.closeTab(tab);
mIsClosingTab = false; mCountOfAddingOrClosingTabs--;
destroyIncognitoIfNecessary(); destroyIncognitoIfNecessary();
return retVal; return retVal;
} }
@Override @Override
public boolean closeTab(Tab tab, boolean animate, boolean uponExit, boolean canUndo) { public boolean closeTab(Tab tab, boolean animate, boolean uponExit, boolean canUndo) {
mIsClosingTab = true; mCountOfAddingOrClosingTabs++;
boolean retVal = mDelegateModel.closeTab(tab, animate, uponExit, canUndo); boolean retVal = mDelegateModel.closeTab(tab, animate, uponExit, canUndo);
mIsClosingTab = false; mCountOfAddingOrClosingTabs--;
destroyIncognitoIfNecessary(); destroyIncognitoIfNecessary();
return retVal; return retVal;
} }
...@@ -130,10 +129,10 @@ public class IncognitoTabModelImpl implements IncognitoTabModel { ...@@ -130,10 +129,10 @@ public class IncognitoTabModelImpl implements IncognitoTabModel {
@Override @Override
public boolean closeTab( public boolean closeTab(
Tab tab, Tab recommendedNextTab, boolean animate, boolean uponExit, boolean canUndo) { Tab tab, Tab recommendedNextTab, boolean animate, boolean uponExit, boolean canUndo) {
mIsClosingTab = true; mCountOfAddingOrClosingTabs++;
boolean retVal = boolean retVal =
mDelegateModel.closeTab(tab, recommendedNextTab, animate, uponExit, canUndo); mDelegateModel.closeTab(tab, recommendedNextTab, animate, uponExit, canUndo);
mIsClosingTab = false; mCountOfAddingOrClosingTabs--;
destroyIncognitoIfNecessary(); destroyIncognitoIfNecessary();
return retVal; return retVal;
} }
...@@ -145,19 +144,25 @@ public class IncognitoTabModelImpl implements IncognitoTabModel { ...@@ -145,19 +144,25 @@ public class IncognitoTabModelImpl implements IncognitoTabModel {
@Override @Override
public void closeMultipleTabs(List<Tab> tabs, boolean canUndo) { public void closeMultipleTabs(List<Tab> tabs, boolean canUndo) {
mCountOfAddingOrClosingTabs++;
mDelegateModel.closeMultipleTabs(tabs, canUndo); mDelegateModel.closeMultipleTabs(tabs, canUndo);
mCountOfAddingOrClosingTabs--;
destroyIncognitoIfNecessary(); destroyIncognitoIfNecessary();
} }
@Override @Override
public void closeAllTabs() { public void closeAllTabs() {
mCountOfAddingOrClosingTabs++;
mDelegateModel.closeAllTabs(); mDelegateModel.closeAllTabs();
mCountOfAddingOrClosingTabs--;
destroyIncognitoIfNecessary(); destroyIncognitoIfNecessary();
} }
@Override @Override
public void closeAllTabs(boolean allowDelegation, boolean uponExit) { public void closeAllTabs(boolean allowDelegation, boolean uponExit) {
mCountOfAddingOrClosingTabs++;
mDelegateModel.closeAllTabs(allowDelegation, uponExit); mDelegateModel.closeAllTabs(allowDelegation, uponExit);
mCountOfAddingOrClosingTabs--;
destroyIncognitoIfNecessary(); destroyIncognitoIfNecessary();
} }
...@@ -239,12 +244,12 @@ public class IncognitoTabModelImpl implements IncognitoTabModel { ...@@ -239,12 +244,12 @@ public class IncognitoTabModelImpl implements IncognitoTabModel {
@Override @Override
public void addTab( public void addTab(
Tab tab, int index, @TabLaunchType int type, @TabCreationState int creationState) { Tab tab, int index, @TabLaunchType int type, @TabCreationState int creationState) {
mIsAddingTab = true; mCountOfAddingOrClosingTabs++;
ensureTabModelImpl(); ensureTabModelImpl();
boolean shouldTriggerFirstTabCreated = getCount() == 0; boolean shouldTriggerFirstTabCreated = getCount() == 0;
mDelegateModel.addTab(tab, index, type, creationState); mDelegateModel.addTab(tab, index, type, creationState);
notifyIncognitoObserverFirstTabCreated(shouldTriggerFirstTabCreated); notifyIncognitoObserverFirstTabCreated(shouldTriggerFirstTabCreated);
mIsAddingTab = false; mCountOfAddingOrClosingTabs--;
} }
@Override @Override
...@@ -279,7 +284,9 @@ public class IncognitoTabModelImpl implements IncognitoTabModel { ...@@ -279,7 +284,9 @@ public class IncognitoTabModelImpl implements IncognitoTabModel {
@Override @Override
public void removeTab(Tab tab) { public void removeTab(Tab tab) {
mCountOfAddingOrClosingTabs++;
mDelegateModel.removeTab(tab); mDelegateModel.removeTab(tab);
mCountOfAddingOrClosingTabs--;
// Call destroyIncognitoIfNecessary() in case the last incognito tab in this model is // Call destroyIncognitoIfNecessary() in case the last incognito tab in this model is
// reparented to a different activity. See crbug.com/611806. // reparented to a different activity. See crbug.com/611806.
destroyIncognitoIfNecessary(); destroyIncognitoIfNecessary();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment