diff options
author | tburkard@chromium.org <tburkard@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-05-13 08:19:59 +0000 |
---|---|---|
committer | tburkard@chromium.org <tburkard@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-05-13 08:19:59 +0000 |
commit | 28c5d0b7a83b11685698c5cd2ffb04c91d75a0c6 (patch) | |
tree | 949ca1fb18b48a01675ce6f62ecb0943a15bb292 /chrome/android | |
parent | f73e1ca075924a6ca1125d5d7f96e374532852c3 (diff) | |
download | chromium_src-28c5d0b7a83b11685698c5cd2ffb04c91d75a0c6.zip chromium_src-28c5d0b7a83b11685698c5cd2ffb04c91d75a0c6.tar.gz chromium_src-28c5d0b7a83b11685698c5cd2ffb04c91d75a0c6.tar.bz2 |
Only commit cookie changes in prerenders after a prerender is shown
Will create a PrerenderCookieStore for each prerender, retaining all cookie
operations of a prerender until the prerender is shown to the user.
Forces prerenders to be in a new render process by themselves for this to work.
This is a resubmission of https://codereview.chromium.org/233353003, which had
to be reverted due to build breaks. See LGTM's there.
BUG=371003
TBR=jam@chromium.org
Review URL: https://codereview.chromium.org/280403002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@270049 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/android')
2 files changed, 13 insertions, 1 deletions
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/prerender/ExternalPrerenderHandler.java b/chrome/android/java/src/org/chromium/chrome/browser/prerender/ExternalPrerenderHandler.java index 3783554..b96062e 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/prerender/ExternalPrerenderHandler.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/prerender/ExternalPrerenderHandler.java @@ -38,12 +38,18 @@ public class ExternalPrerenderHandler { return nativeHasPrerenderedUrl(profile, url, webContentsPtr); } + public static boolean hasCookieStoreLoaded(Profile profile) { + return nativeHasCookieStoreLoaded(profile); + } + private static native long nativeInit(); private static native boolean nativeAddPrerender( long nativeExternalPrerenderHandlerAndroid, Profile profile, long webContentsPtr, String url, String referrer, int width, int height); private static native boolean nativeHasPrerenderedUrl( Profile profile, String url, long webContentsPtr); + private static native boolean nativeHasCookieStoreLoaded( + Profile profile); private static native void nativeCancelCurrentPrerender( long nativeExternalPrerenderHandlerAndroid); } diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/prerender/ExternalPrerenderRequestTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/prerender/ExternalPrerenderRequestTest.java index dcbb9fc..4ef0054 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/prerender/ExternalPrerenderRequestTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/prerender/ExternalPrerenderRequestTest.java @@ -21,11 +21,14 @@ import java.util.concurrent.Callable; * Tests for adding and removing prerenders using the {@link ExternalPrerenderHandler} */ public class ExternalPrerenderRequestTest extends ChromeShellTestBase { + private static final String HOMEPAGE_URL = + TestHttpServerClient.getUrl("chrome/test/data/android/prerender/homepage.html"); 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 static final int CHECK_COOKIE_STORE_FREQUENCY_MS = 200; private ExternalPrerenderHandler mHandler; private Profile mProfile; @@ -34,7 +37,8 @@ public class ExternalPrerenderRequestTest extends ChromeShellTestBase { public void setUp() throws Exception { super.setUp(); clearAppData(); - launchChromeShellWithBlankPage(); + // Launch with a non-blank homepage, to trigger cookie store loading. + launchChromeShellWithUrl(HOMEPAGE_URL); assertTrue(waitForActiveShellToBeDoneLoading()); mHandler = new ExternalPrerenderHandler(); final Callable<Profile> profileCallable = new Callable<Profile>() { @@ -44,6 +48,8 @@ public class ExternalPrerenderRequestTest extends ChromeShellTestBase { } }; mProfile = ThreadUtils.runOnUiThreadBlocking(profileCallable); + while (!ExternalPrerenderHandler.hasCookieStoreLoaded(mProfile)) + Thread.sleep(CHECK_COOKIE_STORE_FREQUENCY_MS); } @MediumTest |