1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 package org.chromium.content.browser;
7 import android.test.suitebuilder.annotation.MediumTest;
9 import org.chromium.base.test.util.Feature;
10 import org.chromium.base.test.util.UrlUtils;
11 import org.chromium.content.browser.test.util.TestCallbackHelperContainer;
12 import org.chromium.content_shell_apk.ContentShellActivity;
13 import org.chromium.content_shell_apk.ContentShellTestBase;
16 * Tests for various aspects of navigation.
18 public class NavigationTest extends ContentShellTestBase {
20 private static final String URL_1 = UrlUtils.encodeHtmlDataUri("<html>1</html>");
21 private static final String URL_2 = UrlUtils.encodeHtmlDataUri("<html>2</html>");
22 private static final String URL_3 = UrlUtils.encodeHtmlDataUri("<html>3</html>");
23 private static final String URL_4 = UrlUtils.encodeHtmlDataUri("<html>4</html>");
24 private static final String URL_5 = UrlUtils.encodeHtmlDataUri("<html>5</html>");
25 private static final String URL_6 = UrlUtils.encodeHtmlDataUri("<html>6</html>");
26 private static final String URL_7 = UrlUtils.encodeHtmlDataUri("<html>7</html>");
28 private void goBack(final ContentView contentView,
29 TestCallbackHelperContainer testCallbackHelperContainer) throws Throwable {
30 handleBlockingCallbackAction(
31 testCallbackHelperContainer.getOnPageFinishedHelper(),
40 private void reload(final ContentView contentView,
41 TestCallbackHelperContainer testCallbackHelperContainer) throws Throwable {
42 handleBlockingCallbackAction(
43 testCallbackHelperContainer.getOnPageFinishedHelper(),
47 contentView.getContentViewCore().reload(true);
53 @Feature({"Navigation"})
54 public void testDirectedNavigationHistory() throws Throwable {
55 ContentShellActivity activity = launchContentShellWithUrl(URL_1);
56 waitForActiveShellToBeDoneLoading();
57 ContentView contentView = activity.getActiveContentView();
58 TestCallbackHelperContainer testCallbackHelperContainer =
59 new TestCallbackHelperContainer(contentView);
61 loadUrl(contentView, testCallbackHelperContainer, new LoadUrlParams(URL_2));
62 loadUrl(contentView, testCallbackHelperContainer, new LoadUrlParams(URL_3));
63 loadUrl(contentView, testCallbackHelperContainer, new LoadUrlParams(URL_4));
64 loadUrl(contentView, testCallbackHelperContainer, new LoadUrlParams(URL_5));
65 loadUrl(contentView, testCallbackHelperContainer, new LoadUrlParams(URL_6));
66 loadUrl(contentView, testCallbackHelperContainer, new LoadUrlParams(URL_7));
68 ContentViewCore contentViewCore = contentView.getContentViewCore();
69 NavigationHistory history = contentViewCore
70 .getDirectedNavigationHistory(false, 3);
71 assertEquals(3, history.getEntryCount());
72 assertEquals(URL_6, history.getEntryAtIndex(0).getUrl());
73 assertEquals(URL_5, history.getEntryAtIndex(1).getUrl());
74 assertEquals(URL_4, history.getEntryAtIndex(2).getUrl());
76 history = contentView.getContentViewCore()
77 .getDirectedNavigationHistory(true, 3);
78 assertEquals(history.getEntryCount(), 0);
80 goBack(contentView, testCallbackHelperContainer);
81 goBack(contentView, testCallbackHelperContainer);
82 goBack(contentView, testCallbackHelperContainer);
84 history = contentViewCore.getDirectedNavigationHistory(false, 4);
85 assertEquals(3, history.getEntryCount());
86 assertEquals(URL_3, history.getEntryAtIndex(0).getUrl());
87 assertEquals(URL_2, history.getEntryAtIndex(1).getUrl());
88 assertEquals(URL_1, history.getEntryAtIndex(2).getUrl());
90 history = contentViewCore.getDirectedNavigationHistory(true, 4);
91 assertEquals(3, history.getEntryCount());
92 assertEquals(URL_5, history.getEntryAtIndex(0).getUrl());
93 assertEquals(URL_6, history.getEntryAtIndex(1).getUrl());
94 assertEquals(URL_7, history.getEntryAtIndex(2).getUrl());
98 * Tests whether a page was successfully reloaded.
99 * Checks to make sure that OnPageFinished events were fired and that the timestamps of when
100 * the page loaded are different after the reload.
103 @Feature({"Navigation"})
104 public void testPageReload() throws Throwable {
105 final String HTML_LOADTIME = "<html><head>" +
106 "<script type=\"text/javascript\">var loadTimestamp = new Date().getTime();" +
107 "function getLoadtime() { return loadTimestamp; }</script></head></html>";
108 final String URL_LOADTIME = UrlUtils.encodeHtmlDataUri(HTML_LOADTIME);
110 ContentShellActivity activity = launchContentShellWithUrl(URL_LOADTIME);
111 waitForActiveShellToBeDoneLoading();
112 ContentView contentView = activity.getActiveContentView();
113 TestCallbackHelperContainer testCallbackHelperContainer =
114 new TestCallbackHelperContainer(contentView);
115 TestCallbackHelperContainer.OnEvaluateJavaScriptResultHelper javascriptHelper =
116 testCallbackHelperContainer.getOnEvaluateJavaScriptResultHelper();
118 // Grab the first timestamp.
119 javascriptHelper.evaluateJavaScript(contentView.getContentViewCore(), "getLoadtime();");
120 javascriptHelper.waitUntilHasValue();
121 String firstTimestamp = javascriptHelper.getJsonResultAndClear();
122 assertNotNull("Timestamp was null.", firstTimestamp);
124 // Grab the timestamp after a reload and make sure they don't match.
125 reload(contentView, testCallbackHelperContainer);
126 javascriptHelper.evaluateJavaScript(contentView.getContentViewCore(), "getLoadtime();");
127 javascriptHelper.waitUntilHasValue();
128 String secondTimestamp = javascriptHelper.getJsonResultAndClear();
129 assertNotNull("Timestamp was null.", secondTimestamp);
130 assertFalse("Timestamps matched.", firstTimestamp.equals(secondTimestamp));