1116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Copyright 2014 The Chromium Authors. All rights reserved. 2116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 3116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// found in the LICENSE file. 4116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 5116680a4aac90f2aa7413d9095a592090648e557Ben Murdochpackage org.chromium.content.browser; 6116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 7116680a4aac90f2aa7413d9095a592090648e557Ben Murdochimport android.test.suitebuilder.annotation.SmallTest; 85f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)import android.text.TextUtils; 95f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)import android.util.Pair; 10116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 11116680a4aac90f2aa7413d9095a592090648e557Ben Murdochimport org.chromium.base.test.util.UrlUtils; 12116680a4aac90f2aa7413d9095a592090648e557Ben Murdochimport org.chromium.content.browser.test.util.TestCallbackHelperContainer; 131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciimport org.chromium.content_public.browser.LoadUrlParams; 146e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)import org.chromium.content_public.browser.NavigationTransitionDelegate; 15116680a4aac90f2aa7413d9095a592090648e557Ben Murdochimport org.chromium.content_shell_apk.ContentShellActivity; 16116680a4aac90f2aa7413d9095a592090648e557Ben Murdochimport org.chromium.content_shell_apk.ContentShellTestBase; 175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)import org.chromium.net.test.util.TestWebServer; 185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)import java.util.ArrayList; 205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)import java.util.List; 215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)import java.util.concurrent.TimeUnit; 22116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 23116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch/** 24116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * Test suite for navigation transition listeners. 25116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch */ 26116680a4aac90f2aa7413d9095a592090648e557Ben Murdochpublic class TransitionTest extends ContentShellTestBase { 275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 28116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch private static final String URL_1 = UrlUtils.encodeHtmlDataUri("<html>1</html>"); 295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) private static final String URL_2 = "/2.html"; 305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) private static final String URL_2_DATA = "<html>2</html>"; 315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) private static final String URL_3 = "/3.html"; 325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) private static final String URL_3_DATA = "<html>3</html>"; 33116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 34116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch static class TestNavigationTransitionDelegate implements NavigationTransitionDelegate { 35116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch private boolean mDidCallDefer = false; 36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch private boolean mDidCallWillHandleDefer = false; 375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) private boolean mDidCallAddStylesheet = false; 38116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch private boolean mHandleDefer = false; 395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) private ArrayList<String> mTransitionStylesheets; 40116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch private ContentViewCore mContentViewCore; 415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) private String mTransitionEnteringColor; 42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 43116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch TestNavigationTransitionDelegate(ContentViewCore contentViewCore, boolean handleDefer) { 44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mContentViewCore = contentViewCore; 45116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mHandleDefer = handleDefer; 465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) mTransitionStylesheets = new ArrayList<String>(); 47116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 48116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 49116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @Override 506e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) public void didDeferAfterResponseStarted(String markup, String cssSelector, 516e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) String enteringColor) { 52116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mDidCallDefer = true; 53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mContentViewCore.resumeResponseDeferredAtStart(); 545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) mTransitionEnteringColor = enteringColor; 55116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 56116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 57116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @Override 58116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch public boolean willHandleDeferAfterResponseStarted() { 59116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return mHandleDefer; 60116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 61116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) @Override 635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) public void addEnteringStylesheetToTransition(String stylesheet) { 645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) mDidCallAddStylesheet = true; 655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) mTransitionStylesheets.add(stylesheet); 665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) @Override 695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) public void didStartNavigationTransitionForFrame(long frameId) { 705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 72116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch public boolean getDidCallDefer() { 73116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return mDidCallDefer; 74116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 75116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 76116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch public boolean getDidCallWillHandlerDefer() { 77116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return mDidCallWillHandleDefer; 78116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) public boolean getDidCallAddStylesheet() { 815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return mDidCallAddStylesheet; 825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) public ArrayList<String> getTransitionStylesheets() { 855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return mTransitionStylesheets; 865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) public String getTransitionEnteringColor() { 895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return mTransitionEnteringColor; 905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 91116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch }; 92116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) private static List<Pair<String, String>> createHeadersList( 945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) String[] namesAndValues) { 955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) List<Pair<String, String>> result = 965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) new ArrayList<Pair<String, String>>(); 975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) for (int i = 0; i < namesAndValues.length; i += 2) 985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) result.add(Pair.create(namesAndValues[i], namesAndValues[i + 1])); 995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return result; 1005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 1015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 102116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch /** 103116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * Tests that the listener recieves DidDeferAfterResponseStarted if we specify that 104116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * the transition is handled. 105116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch */ 106116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @SmallTest 107116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch public void testDidDeferAfterResponseStartedCalled() throws Throwable { 108116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ContentShellActivity activity = launchContentShellWithUrl(URL_1); 109116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch waitForActiveShellToBeDoneLoading(); 110116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ContentViewCore contentViewCore = activity.getActiveContentViewCore(); 111116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch TestCallbackHelperContainer testCallbackHelperContainer = 112116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch new TestCallbackHelperContainer(contentViewCore); 113116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1146e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) contentViewCore.getWebContents().setHasPendingNavigationTransitionForTesting(); 115116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch TestNavigationTransitionDelegate delegate = new TestNavigationTransitionDelegate( 116116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch contentViewCore, 117116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch true); 1186e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) contentViewCore.getWebContents().setNavigationTransitionDelegate(delegate); 119116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 120116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch loadUrl(contentViewCore, testCallbackHelperContainer, new LoadUrlParams(URL_1)); 121116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 122116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch assertTrue("didDeferAfterResponseStarted called.", delegate.getDidCallDefer()); 123116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 124116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 125116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch /** 126116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * Tests that the listener does not receive DidDeferAfterResponseStarted if we specify that 127116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * the transition is handled. 128116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch */ 129116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @SmallTest 130116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch public void testDidDeferAfterResponseStartedNotCalled() throws Throwable { 131116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ContentShellActivity activity = launchContentShellWithUrl(URL_1); 132116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch waitForActiveShellToBeDoneLoading(); 133116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ContentViewCore contentViewCore = activity.getActiveContentViewCore(); 134116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch TestCallbackHelperContainer testCallbackHelperContainer = 135116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch new TestCallbackHelperContainer(contentViewCore); 136116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1376e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) contentViewCore.getWebContents().setHasPendingNavigationTransitionForTesting(); 138116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch TestNavigationTransitionDelegate delegate = new TestNavigationTransitionDelegate( 139116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch contentViewCore, 140116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch false); 1416e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) contentViewCore.getWebContents().setNavigationTransitionDelegate(delegate); 142116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 143116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch loadUrl(contentViewCore, testCallbackHelperContainer, new LoadUrlParams(URL_1)); 144116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 145116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch assertFalse("didDeferAfterResponseStarted called.", delegate.getDidCallDefer()); 146116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 147116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 148116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch /** 149116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch * Tests that the resource handler doesn't query the listener if no transition is pending. 150116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch */ 151116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @SmallTest 152116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch public void testWillHandleDeferAfterResponseStartedNotCalled() throws Throwable { 153116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ContentShellActivity activity = launchContentShellWithUrl(URL_1); 154116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch waitForActiveShellToBeDoneLoading(); 155116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ContentViewCore contentViewCore = activity.getActiveContentViewCore(); 156116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch TestCallbackHelperContainer testCallbackHelperContainer = 157116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch new TestCallbackHelperContainer(contentViewCore); 158116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 159116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch TestNavigationTransitionDelegate delegate = new TestNavigationTransitionDelegate( 160116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch contentViewCore, 161116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch false); 1626e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) contentViewCore.getWebContents().setNavigationTransitionDelegate(delegate); 163116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 164116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch loadUrl(contentViewCore, testCallbackHelperContainer, new LoadUrlParams(URL_1)); 165116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 166116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch assertFalse("didDeferAfterResponseStarted called.", delegate.getDidCallDefer()); 167116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch assertFalse("willHandleDeferAfterResponseStarted called.", 168116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch delegate.getDidCallWillHandlerDefer()); 169116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 1705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) /** 1725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * Tests that the listener receives addStylesheetToTransition if we specify 1735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * that there are entering transition stylesheet. 1745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) */ 1755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) @SmallTest 1765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) public void testAddStylesheetToTransitionCalled() throws Throwable { 1775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) TestWebServer webServer = null; 1785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) try { 1795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) webServer = new TestWebServer(false); 1805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) final String url2 = webServer.setResponse(URL_2, URL_2_DATA, null); 1825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ContentShellActivity activity = launchContentShellWithUrl(url2); 1835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) waitForActiveShellToBeDoneLoading(); 1845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ContentViewCore contentViewCore = activity.getActiveContentViewCore(); 1855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) TestCallbackHelperContainer testCallbackHelperContainer = 1865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) new TestCallbackHelperContainer(contentViewCore); 1876e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) contentViewCore.getWebContents().setHasPendingNavigationTransitionForTesting(); 1885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) TestNavigationTransitionDelegate delegate = 1895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) new TestNavigationTransitionDelegate(contentViewCore, true); 1906e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) contentViewCore.getWebContents().setNavigationTransitionDelegate(delegate); 1915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) int currentCallCount = testCallbackHelperContainer 1935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) .getOnPageFinishedHelper().getCallCount(); 1945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) String[] headers = { 1955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "link", 1965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "<transition0.css>;rel=transition-entering-stylesheet;scope=*", 1975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "link", 1985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "<transition1.css>;rel=transition-entering-stylesheet;scope=*", 1995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "link", 2005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "<transition2.css>;rel=transition-entering-stylesheet;scope=*" 2015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) }; 2025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) final String url3 = webServer.setResponse(URL_3, 2035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) URL_3_DATA, 2045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) createHeadersList(headers)); 2055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) LoadUrlParams url3_params = new LoadUrlParams(url3); 2065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) loadUrl(contentViewCore, testCallbackHelperContainer, url3_params); 2075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) testCallbackHelperContainer.getOnPageFinishedHelper().waitForCallback( 2085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) currentCallCount, 2095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1, 2105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 10000, 2115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) TimeUnit.MILLISECONDS); 2125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 2135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) assertTrue("addStylesheetToTransition called.", 2145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) delegate.getDidCallAddStylesheet()); 2155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) assertTrue("Three stylesheets are added", 2165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) delegate.getTransitionStylesheets().size() == 3); 2175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } finally { 2185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (webServer != null) 2195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) webServer.shutdown(); 2205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 2215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 2225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 2235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) /** 2245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * Tests that the listener receives addStylesheetToTransition if we specify 2255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * that there are no entering transition stylesheet. 2265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) */ 2275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) @SmallTest 2285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) public void testAddStylesheetToTransitionNotCalled() throws Throwable { 2295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) TestWebServer webServer = null; 2305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) try { 2315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) webServer = new TestWebServer(false); 2325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 2335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) final String url2 = webServer.setResponse(URL_2, URL_2_DATA, null); 2345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ContentShellActivity activity = launchContentShellWithUrl(url2); 2355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) waitForActiveShellToBeDoneLoading(); 2365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ContentViewCore contentViewCore = activity.getActiveContentViewCore(); 2375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) TestCallbackHelperContainer testCallbackHelperContainer = 2385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) new TestCallbackHelperContainer(contentViewCore); 2396e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) contentViewCore.getWebContents().setHasPendingNavigationTransitionForTesting(); 2405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) TestNavigationTransitionDelegate delegate = 2415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) new TestNavigationTransitionDelegate(contentViewCore, true); 2426e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) contentViewCore.getWebContents().setNavigationTransitionDelegate(delegate); 2435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 2445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) int currentCallCount = testCallbackHelperContainer 2455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) .getOnPageFinishedHelper().getCallCount(); 2465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) final String url3 = webServer.setResponse(URL_3, URL_3_DATA, null); 2475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) LoadUrlParams url3_params = new LoadUrlParams(url3); 2485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) loadUrl(contentViewCore, testCallbackHelperContainer, url3_params); 2495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) testCallbackHelperContainer.getOnPageFinishedHelper().waitForCallback( 2505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) currentCallCount, 2515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1, 2525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 10000, 2535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) TimeUnit.MILLISECONDS); 2545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 2555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) assertFalse("addStylesheetToTransition is not called.", 2565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) delegate.getDidCallAddStylesheet()); 2575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) assertTrue("No stylesheets are added", 2585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) delegate.getTransitionStylesheets().size() == 0); 2595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } finally { 2605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (webServer != null) 2615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) webServer.shutdown(); 2625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 2635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 2645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 2655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) /** 2665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * Tests that the listener receives the entering color if it's specified in the 2675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) * response headers. 2685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) */ 2695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) @SmallTest 2705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) public void testParseTransitionEnteringColor() throws Throwable { 2715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) TestWebServer webServer = null; 2725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) try { 2735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) webServer = new TestWebServer(false); 2745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 2755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) final String url2 = webServer.setResponse(URL_2, URL_2_DATA, null); 2765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ContentShellActivity activity = launchContentShellWithUrl(url2); 2775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) waitForActiveShellToBeDoneLoading(); 2785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ContentViewCore contentViewCore = activity.getActiveContentViewCore(); 2795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) TestCallbackHelperContainer testCallbackHelperContainer = 2805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) new TestCallbackHelperContainer(contentViewCore); 2816e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) contentViewCore.getWebContents().setHasPendingNavigationTransitionForTesting(); 2825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) TestNavigationTransitionDelegate delegate = 2835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) new TestNavigationTransitionDelegate(contentViewCore, true); 2846e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) contentViewCore.getWebContents().setNavigationTransitionDelegate(delegate); 2855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 2865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) String transitionEnteringColor = "#00FF00"; 2875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 2885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) int currentCallCount = testCallbackHelperContainer 2895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) .getOnPageFinishedHelper().getCallCount(); 2905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) String[] headers = { 2915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "X-Transition-Entering-Color", 2925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) transitionEnteringColor, 2935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) }; 2945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) final String url3 = webServer.setResponse(URL_3, 2955f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) URL_3_DATA, 2965f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) createHeadersList(headers)); 2975f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) LoadUrlParams url3Params = new LoadUrlParams(url3); 2985f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) loadUrl(contentViewCore, testCallbackHelperContainer, url3Params); 2995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) testCallbackHelperContainer.getOnPageFinishedHelper().waitForCallback( 3005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) currentCallCount, 3015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1, 3025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 10000, 3035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) TimeUnit.MILLISECONDS); 3045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 3055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) assertTrue("X-Transition-Entering-Color parsed correctly.", 3065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) TextUtils.equals( 3075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) delegate.getTransitionEnteringColor(), 3085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) transitionEnteringColor)); 3095f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } finally { 3105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (webServer != null) webServer.shutdown(); 3115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 3125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 313116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 314