blob: 5f294b0db09fa74a520f66a4ff4e1f07106b8a0f [file] [log] [blame]
// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.chrome.browser.prerender;
import android.test.UiThreadTest;
import android.test.suitebuilder.annotation.MediumTest;
import android.test.suitebuilder.annotation.SmallTest;
import org.chromium.base.ThreadUtils;
import org.chromium.base.test.util.Feature;
import org.chromium.chrome.browser.ContentViewUtil;
import org.chromium.chrome.browser.profiles.Profile;
import org.chromium.chrome.test.util.TestHttpServerClient;
import org.chromium.chrome.testshell.ChromiumTestShellTestBase;
import java.util.concurrent.Callable;
/**
* Tests for adding and removing prerenders using the {@link ExternalPrerenderHandler}
*/
public class ExternalPrerenderRequestTest extends ChromiumTestShellTestBase {
private static final String GOOGLE_URL =
TestHttpServerClient.getUrl("chrome/test/data/android/prerender/google.html");
private static final String YOUTUBE_URL =
TestHttpServerClient.getUrl("chrome/test/data/android/prerender/youtube.html");
private static final int PRERENDER_DELAY_MS = 500;
private ExternalPrerenderHandler mHandler;
private Profile mProfile;
@Override
public void setUp() throws Exception {
super.setUp();
clearAppData();
launchChromiumTestShellWithBlankPage();
assertTrue(waitForActiveShellToBeDoneLoading());
mHandler = new ExternalPrerenderHandler();
final Callable<Profile> profileCallable = new Callable<Profile>() {
@Override
public Profile call() throws Exception {
return Profile.getLastUsedProfile();
}
};
mProfile = ThreadUtils.runOnUiThreadBlocking(profileCallable);
}
@MediumTest
@UiThreadTest
@Feature({"Prerender"})
/**
* Test adding a prerender and canceling that to add a new one.
*/
public void testAddPrerenderAndCancel() throws InterruptedException {
long webContentsPtr = mHandler.addPrerender(mProfile, GOOGLE_URL, "", 0, 0);
assertTrue(ExternalPrerenderHandler.hasPrerenderedUrl(
mProfile, GOOGLE_URL, webContentsPtr));
mHandler.cancelCurrentPrerender();
assertFalse(ExternalPrerenderHandler.hasPrerenderedUrl(
mProfile, GOOGLE_URL, webContentsPtr));
ContentViewUtil.destroyNativeWebContents(webContentsPtr);
Thread.sleep(PRERENDER_DELAY_MS);
webContentsPtr = mHandler.addPrerender(mProfile, YOUTUBE_URL, "", 0, 0);
assertTrue(ExternalPrerenderHandler.hasPrerenderedUrl(
mProfile, YOUTUBE_URL, webContentsPtr));
}
@SmallTest
@UiThreadTest
@Feature({"Prerender"})
/**
* Test calling cancel without any added prerenders.
*/
public void testCancelPrerender() {
mHandler.cancelCurrentPrerender();
long webContentsPtr = mHandler.addPrerender(mProfile, GOOGLE_URL, "", 0, 0);
assertTrue(ExternalPrerenderHandler.hasPrerenderedUrl(
mProfile, GOOGLE_URL, webContentsPtr));
}
@MediumTest
@UiThreadTest
@Feature({"Prerender"})
/**
* Test adding two prerenders without canceling the first one.
*/
public void testAddingPrerendersInaRow() throws InterruptedException {
long webContentsPtr = mHandler.addPrerender(mProfile, GOOGLE_URL, "", 0, 0);
assertTrue(ExternalPrerenderHandler.hasPrerenderedUrl(
mProfile, GOOGLE_URL, webContentsPtr));
Thread.sleep(PRERENDER_DELAY_MS);
long newWebContentsPtr = mHandler.addPrerender(mProfile, YOUTUBE_URL, "", 0, 0);
assertTrue(ExternalPrerenderHandler.hasPrerenderedUrl(
mProfile, YOUTUBE_URL, newWebContentsPtr));
}
}