Chromium Code Reviews| Index: chrome/android/javatests/src/org/chromium/chrome/browser/prerender/ExternalPrerenderHandlerTest.java |
| diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/prerender/ExternalPrerenderHandlerTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/prerender/ExternalPrerenderHandlerTest.java |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..9c8d8f368200fd7e98b44386e0bf0318542372f1 |
| --- /dev/null |
| +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/prerender/ExternalPrerenderHandlerTest.java |
| @@ -0,0 +1,155 @@ |
| +// Copyright 2016 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 static org.chromium.base.test.util.Restriction.RESTRICTION_TYPE_NON_LOW_END_DEVICE; |
| + |
| +import android.os.Environment; |
| +import android.test.suitebuilder.annotation.SmallTest; |
| + |
| +import org.chromium.base.ThreadUtils; |
| +import org.chromium.base.test.util.Feature; |
| +import org.chromium.base.test.util.Restriction; |
| +import org.chromium.chrome.browser.profiles.Profile; |
| +import org.chromium.content.browser.test.NativeLibraryTestBase; |
| +import org.chromium.content.browser.test.util.Criteria; |
| +import org.chromium.content.browser.test.util.CriteriaHelper; |
| +import org.chromium.content_public.browser.WebContents; |
| +import org.chromium.net.test.EmbeddedTestServer; |
| + |
| +import java.util.concurrent.Callable; |
| + |
| +/** Tests for {@link ExternalPrerenderHandler}. */ |
| +public class ExternalPrerenderHandlerTest extends NativeLibraryTestBase { |
| + private static final String TEST_PAGE = "/chrome/test/data/android/google.htnl"; |
| + private static final String TEST_PAGE2 = "/chrome/test/data/android/about.html"; |
| + private static final int PRERENDER_DELAY_MS = 500; |
| + |
| + private ExternalPrerenderHandler mExternalPrerenderHandler; |
| + private Profile mProfile; |
| + private String mTestPage; |
| + private String mTestPage2; |
| + private EmbeddedTestServer mTestServer; |
| + |
| + @Override |
| + protected void setUp() throws Exception { |
| + super.setUp(); |
| + loadNativeLibraryAndInitBrowserProcess(); |
| + mExternalPrerenderHandler = new ExternalPrerenderHandler(); |
| + |
| + final Callable<Profile> profileCallable = new Callable<Profile>() { |
| + @Override |
| + public Profile call() throws Exception { |
| + return Profile.getLastUsedProfile(); |
| + } |
| + }; |
| + mProfile = ThreadUtils.runOnUiThreadBlocking(profileCallable); |
| + |
| + mTestServer = EmbeddedTestServer.createAndStartFileServer( |
| + getInstrumentation().getContext(), Environment.getExternalStorageDirectory()); |
| + mTestPage = mTestServer.getURL(TEST_PAGE); |
| + mTestPage2 = mTestServer.getURL(TEST_PAGE2); |
| + } |
| + |
| + @Override |
| + protected void tearDown() throws Exception { |
| + ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
| + @Override |
| + public void run() { |
| + mExternalPrerenderHandler.cancelCurrentPrerender(); |
| + } |
| + }); |
| + mTestServer.stopAndDestroyServer(); |
| + } |
| + |
| + @Restriction(RESTRICTION_TYPE_NON_LOW_END_DEVICE) |
| + @Feature({"Prerender"}) |
| + @SmallTest |
| + public void testAddPrerender() throws Exception { |
| + final WebContents webContents = addPrerender(mTestPage); |
| + ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
| + @Override |
| + public void run() { |
| + assertTrue(mExternalPrerenderHandler.hasPrerenderedUrl( |
| + mProfile, mTestPage, webContents)); |
| + } |
| + }); |
| + ensureCompletedPrerenderForUrl(webContents, mTestPage); |
| + } |
| + |
| + @Restriction(RESTRICTION_TYPE_NON_LOW_END_DEVICE) |
| + @Feature({"Prerender"}) |
| + @SmallTest |
| + public void testAddAndCancelPrerender() throws Exception { |
| + final WebContents webContents = addPrerender(mTestPage); |
| + ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
| + @Override |
| + public void run() { |
| + assertTrue(mExternalPrerenderHandler.hasPrerenderedUrl( |
| + mProfile, mTestPage, webContents)); |
| + } |
| + }); |
| + |
| + ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
| + @Override |
| + public void run() { |
| + mExternalPrerenderHandler.cancelCurrentPrerender(); |
| + assertFalse(mExternalPrerenderHandler.hasPrerenderedUrl( |
| + mProfile, mTestPage, webContents)); |
| + } |
| + }); |
| + } |
| + |
| + @Restriction(RESTRICTION_TYPE_NON_LOW_END_DEVICE) |
| + @Feature({"Prerender"}) |
| + @SmallTest |
| + public void testAddSeveralPrerenders() throws Exception { |
| + final WebContents webContents = addPrerender(mTestPage); |
| + ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
| + @Override |
| + public void run() { |
| + assertTrue(mExternalPrerenderHandler.hasPrerenderedUrl( |
| + mProfile, mTestPage, webContents)); |
| + } |
| + }); |
|
Yusuf
2016/07/21 01:13:33
Should rename addPrerender to
private WebContents
Benoit L
2016/07/21 11:57:51
Done.
|
| + Thread.sleep(PRERENDER_DELAY_MS); |
| + final WebContents webContents2 = addPrerender(mTestPage2); |
| + ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
| + @Override |
| + public void run() { |
| + assertTrue(mExternalPrerenderHandler.hasPrerenderedUrl( |
| + mProfile, mTestPage, webContents)); |
| + assertTrue(mExternalPrerenderHandler.hasPrerenderedUrl( |
| + mProfile, mTestPage2, webContents2)); |
| + } |
| + }); |
| + ensureCompletedPrerenderForUrl(webContents, mTestPage); |
| + ensureCompletedPrerenderForUrl(webContents2, mTestPage2); |
| + } |
| + |
| + private WebContents addPrerender(final String url) throws Exception { |
| + Callable<WebContents> addPrerenderCallable = new Callable<WebContents>() { |
| + @Override |
| + public WebContents call() { |
| + WebContents webContents = |
| + mExternalPrerenderHandler.addPrerender(mProfile, url, "", 0, 0, false); |
| + assertNotNull(webContents); |
| + return webContents; |
| + } |
| + }; |
| + return ThreadUtils.runOnUiThreadBlocking(addPrerenderCallable); |
| + } |
| + |
| + private void ensureCompletedPrerenderForUrl(final WebContents webContents, final String url) |
| + throws Exception { |
| + CriteriaHelper.pollUiThread(new Criteria("No Prerender") { |
| + @Override |
| + public boolean isSatisfied() { |
| + return ExternalPrerenderHandler.hasPrerenderedAndFinishedLoadingUrl( |
| + mProfile, url, webContents); |
| + } |
| + }); |
| + } |
| +} |