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