Commit c4a9cd12 authored by Jan Wilken Dörrie's avatar Jan Wilken Dörrie Committed by Commit Bot

Revert "customtabs: Don't allow multiple background tabs concurrently."

This reverts commit 2cec5853.

Reason for revert: Likely Culprit of https://crbug.com/746941.

Original change's description:
> customtabs: Don't allow multiple background tabs concurrently.
> 
> BUG=742450
> 
> Change-Id: Ia767797d89022b862e38b7ae72949bed08d94c09
> Reviewed-on: https://chromium-review.googlesource.com/578067
> Reviewed-by: Yusuf Ozuysal <yusufo@chromium.org>
> Commit-Queue: Benoit L <lizeb@chromium.org>
> Cr-Commit-Position: refs/heads/master@{#488171}

TBR=yusufo@chromium.org,lizeb@chromium.org

Change-Id: Id209518579ebc889cfe652d9eea8491a9ec909a4
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: 742450
Reviewed-on: https://chromium-review.googlesource.com/579390Reviewed-by: default avatarJan Wilken Dörrie <jdoerrie@chromium.org>
Commit-Queue: Jan Wilken Dörrie <jdoerrie@chromium.org>
Cr-Commit-Position: refs/heads/master@{#488212}
parent 815e6a0d
......@@ -1094,9 +1094,6 @@ public class CustomTabsConnection {
Profile profile = Profile.getLastUsedProfile();
new LoadingPredictor(profile).cancelPageLoadHint(mSpeculation.url);
break;
case SpeculationParams.HIDDEN_TAB:
mSpeculation.tab.destroy();
break;
default:
return;
}
......@@ -1117,10 +1114,6 @@ public class CustomTabsConnection {
&& !ChromeFeatureList.isEnabled(ChromeFeatureList.CCT_BACKGROUND_TAB)) {
speculationMode = SpeculationParams.PRERENDER;
}
// At most one on-going speculation, clears the previous one.
cancelSpeculation(null);
switch (speculationMode) {
case SpeculationParams.PREFETCH:
boolean didPrefetch = new LoadingPredictor(profile).prepareForPageLoad(url);
......@@ -1197,25 +1190,30 @@ public class CustomTabsConnection {
* Creates a hidden tab and initiates a navigation.
*/
private void launchUrlInHiddenTab(
final CustomTabsSessionToken session, String url, Bundle extras) {
ThreadUtils.assertOnUiThread();
Intent extrasIntent = new Intent();
if (extras != null) extrasIntent.putExtras(extras);
if (IntentHandler.getExtraHeadersFromIntent(extrasIntent) != null) return;
final CustomTabsSessionToken session, final String url, final Bundle extras) {
ThreadUtils.postOnUiThread(new Runnable() {
@Override
public void run() {
Intent extrasIntent = new Intent();
if (extras != null) extrasIntent.putExtras(extras);
if (IntentHandler.getExtraHeadersFromIntent(extrasIntent) != null) return;
Tab tab = Tab.createDetached(new CustomTabDelegateFactory(false, false, null));
Tab tab = Tab.createDetached(new CustomTabDelegateFactory(false, false, null));
// Updating post message as soon as we have a valid WebContents.
mClientManager.resetPostMessageHandlerForSession(
session, tab.getContentViewCore().getWebContents());
// Updating post message as soon as we have a valid WebContents.
mClientManager.resetPostMessageHandlerForSession(
session, tab.getContentViewCore().getWebContents());
LoadUrlParams loadParams = new LoadUrlParams(url);
String referrer = getReferrer(session, extrasIntent);
if (referrer != null && !referrer.isEmpty()) {
loadParams.setReferrer(new Referrer(referrer, Referrer.REFERRER_POLICY_DEFAULT));
}
mSpeculation = SpeculationParams.forHiddenTab(session, url, tab, referrer, extras);
mSpeculation.tab.loadUrl(loadParams);
LoadUrlParams loadParams = new LoadUrlParams(url);
String referrer = getReferrer(session, extrasIntent);
if (referrer != null && !referrer.isEmpty()) {
loadParams.setReferrer(
new Referrer(referrer, Referrer.REFERRER_POLICY_DEFAULT));
}
mSpeculation = SpeculationParams.forHiddenTab(session, url, tab, referrer, extras);
mSpeculation.tab.loadUrl(loadParams);
}
});
}
@VisibleForTesting
......
......@@ -25,15 +25,10 @@ import org.chromium.base.PathUtils;
import org.chromium.base.ThreadUtils;
import org.chromium.base.library_loader.LibraryLoader;
import org.chromium.base.library_loader.LibraryProcessType;
import org.chromium.base.test.util.CommandLineFlags;
import org.chromium.base.test.util.Restriction;
import org.chromium.base.test.util.RetryOnFailure;
import org.chromium.chrome.browser.ChromeFeatureList;
import org.chromium.chrome.browser.ChromeSwitches;
import org.chromium.chrome.browser.WarmupManager;
import org.chromium.chrome.browser.preferences.PrefServiceBridge;
import org.chromium.chrome.browser.tab.EmptyTabObserver;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
import org.chromium.content_public.browser.WebContents;
......@@ -41,8 +36,6 @@ import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask;
import java.util.concurrent.Semaphore;
import java.util.concurrent.TimeUnit;
/** Tests for CustomTabsConnection. */
@RunWith(ChromeJUnit4ClassRunner.class)
......@@ -225,56 +218,6 @@ public class CustomTabsConnectionTest {
assertWarmupAndMayLaunchUrl(null, "", true);
}
/** Tests that a new mayLaunchUrl() call destroys the previous hidden tab. */
@Test
@SmallTest
@CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE,
"enable-features=" + ChromeFeatureList.CCT_BACKGROUND_TAB})
public void testOnlyOneHiddenTab() throws Exception {
Assert.assertTrue(mCustomTabsConnection.warmup(0));
CustomTabsSessionToken token = CustomTabsSessionToken.createDummySessionTokenForTesting();
Assert.assertTrue(mCustomTabsConnection.newSession(token));
mCustomTabsConnection.setSpeculationModeForSession(
token, CustomTabsConnection.SpeculationParams.HIDDEN_TAB);
// First hidden tab, add an observer to check that it's destroyed.
Assert.assertTrue(mCustomTabsConnection.mayLaunchUrl(token, Uri.parse(URL), null, null));
final Semaphore destroyed = new Semaphore(0);
ThreadUtils.runOnUiThreadBlocking(new Runnable() {
@Override
public void run() {
Assert.assertNotNull(mCustomTabsConnection.mSpeculation);
Tab tab = mCustomTabsConnection.mSpeculation.tab;
Assert.assertNotNull(tab);
tab.addObserver(new EmptyTabObserver() {
@Override
public void onDestroyed(Tab destroyedTab) {
destroyed.release();
}
});
}
});
// New hidden tab.
mCustomTabsConnection.resetThrottling(Process.myPid());
Assert.assertTrue(mCustomTabsConnection.mayLaunchUrl(token, Uri.parse(URL2), null, null));
ThreadUtils.runOnUiThreadBlocking(new Runnable() {
@Override
public void run() {
Assert.assertNotNull(mCustomTabsConnection.mSpeculation);
Assert.assertNotNull(mCustomTabsConnection.mSpeculation.tab);
Assert.assertEquals(URL2, mCustomTabsConnection.mSpeculation.url);
}
});
Assert.assertTrue(
"Only one hidden tab should exist.", destroyed.tryAcquire(10, TimeUnit.SECONDS));
// Clears the second hidden tab.
mCustomTabsConnection.resetThrottling(Process.myPid());
Assert.assertTrue(mCustomTabsConnection.mayLaunchUrl(token, null, null, null));
}
@Test
@SmallTest
@Restriction(RESTRICTION_TYPE_NON_LOW_END_DEVICE)
......
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