NavigationTest.java revision 0529e5d033099cbfc42635f6f6183833b09dff6e
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. 4 5package org.chromium.content.browser; 6 7import android.test.suitebuilder.annotation.MediumTest; 8 9import org.chromium.base.test.util.Feature; 10import org.chromium.base.test.util.UrlUtils; 11import org.chromium.content.browser.test.util.TestCallbackHelperContainer; 12import org.chromium.content.browser.test.util.TestCallbackHelperContainer.OnEvaluateJavaScriptResultHelper; 13import org.chromium.content_shell_apk.ContentShellActivity; 14import org.chromium.content_shell_apk.ContentShellTestBase; 15 16/** 17 * Tests for various aspects of navigation. 18 */ 19public class NavigationTest extends ContentShellTestBase { 20 21 private static final String URL_1 = UrlUtils.encodeHtmlDataUri("<html>1</html>"); 22 private static final String URL_2 = UrlUtils.encodeHtmlDataUri("<html>2</html>"); 23 private static final String URL_3 = UrlUtils.encodeHtmlDataUri("<html>3</html>"); 24 private static final String URL_4 = UrlUtils.encodeHtmlDataUri("<html>4</html>"); 25 private static final String URL_5 = UrlUtils.encodeHtmlDataUri("<html>5</html>"); 26 private static final String URL_6 = UrlUtils.encodeHtmlDataUri("<html>6</html>"); 27 private static final String URL_7 = UrlUtils.encodeHtmlDataUri("<html>7</html>"); 28 29 private void goBack(final ContentViewCore contentViewCore, 30 TestCallbackHelperContainer testCallbackHelperContainer) throws Throwable { 31 handleBlockingCallbackAction( 32 testCallbackHelperContainer.getOnPageFinishedHelper(), 33 new Runnable() { 34 @Override 35 public void run() { 36 contentViewCore.goBack(); 37 } 38 }); 39 } 40 41 private void reload(final ContentViewCore contentViewCore, 42 TestCallbackHelperContainer testCallbackHelperContainer) throws Throwable { 43 handleBlockingCallbackAction( 44 testCallbackHelperContainer.getOnPageFinishedHelper(), 45 new Runnable() { 46 @Override 47 public void run() { 48 contentViewCore.reload(true); 49 } 50 }); 51 } 52 53 @MediumTest 54 @Feature({"Navigation"}) 55 public void testDirectedNavigationHistory() throws Throwable { 56 ContentShellActivity activity = launchContentShellWithUrl(URL_1); 57 waitForActiveShellToBeDoneLoading(); 58 ContentViewCore contentViewCore = activity.getActiveContentViewCore(); 59 TestCallbackHelperContainer testCallbackHelperContainer = 60 new TestCallbackHelperContainer(contentViewCore); 61 62 loadUrl(contentViewCore, testCallbackHelperContainer, new LoadUrlParams(URL_2)); 63 loadUrl(contentViewCore, testCallbackHelperContainer, new LoadUrlParams(URL_3)); 64 loadUrl(contentViewCore, testCallbackHelperContainer, new LoadUrlParams(URL_4)); 65 loadUrl(contentViewCore, testCallbackHelperContainer, new LoadUrlParams(URL_5)); 66 loadUrl(contentViewCore, testCallbackHelperContainer, new LoadUrlParams(URL_6)); 67 loadUrl(contentViewCore, testCallbackHelperContainer, new LoadUrlParams(URL_7)); 68 69 NavigationHistory history = contentViewCore.getDirectedNavigationHistory(false, 3); 70 assertEquals(3, history.getEntryCount()); 71 assertEquals(URL_6, history.getEntryAtIndex(0).getUrl()); 72 assertEquals(URL_5, history.getEntryAtIndex(1).getUrl()); 73 assertEquals(URL_4, history.getEntryAtIndex(2).getUrl()); 74 75 history = contentViewCore.getDirectedNavigationHistory(true, 3); 76 assertEquals(history.getEntryCount(), 0); 77 78 goBack(contentViewCore, testCallbackHelperContainer); 79 goBack(contentViewCore, testCallbackHelperContainer); 80 goBack(contentViewCore, testCallbackHelperContainer); 81 82 history = contentViewCore.getDirectedNavigationHistory(false, 4); 83 assertEquals(3, history.getEntryCount()); 84 assertEquals(URL_3, history.getEntryAtIndex(0).getUrl()); 85 assertEquals(URL_2, history.getEntryAtIndex(1).getUrl()); 86 assertEquals(URL_1, history.getEntryAtIndex(2).getUrl()); 87 88 history = contentViewCore.getDirectedNavigationHistory(true, 4); 89 assertEquals(3, history.getEntryCount()); 90 assertEquals(URL_5, history.getEntryAtIndex(0).getUrl()); 91 assertEquals(URL_6, history.getEntryAtIndex(1).getUrl()); 92 assertEquals(URL_7, history.getEntryAtIndex(2).getUrl()); 93 } 94 95 /** 96 * Tests whether a page was successfully reloaded. 97 * Checks to make sure that OnPageFinished events were fired and that the timestamps of when 98 * the page loaded are different after the reload. 99 */ 100 @MediumTest 101 @Feature({"Navigation"}) 102 public void testPageReload() throws Throwable { 103 final String HTML_LOADTIME = "<html><head>" + 104 "<script type=\"text/javascript\">var loadTimestamp = new Date().getTime();" + 105 "function getLoadtime() { return loadTimestamp; }</script></head></html>"; 106 final String URL_LOADTIME = UrlUtils.encodeHtmlDataUri(HTML_LOADTIME); 107 108 ContentShellActivity activity = launchContentShellWithUrl(URL_LOADTIME); 109 waitForActiveShellToBeDoneLoading(); 110 ContentViewCore contentViewCore = activity.getActiveContentViewCore(); 111 TestCallbackHelperContainer testCallbackHelperContainer = 112 new TestCallbackHelperContainer(contentViewCore); 113 OnEvaluateJavaScriptResultHelper javascriptHelper = new OnEvaluateJavaScriptResultHelper(); 114 115 // Grab the first timestamp. 116 javascriptHelper.evaluateJavaScript(contentViewCore, "getLoadtime();"); 117 javascriptHelper.waitUntilHasValue(); 118 String firstTimestamp = javascriptHelper.getJsonResultAndClear(); 119 assertNotNull("Timestamp was null.", firstTimestamp); 120 121 // Grab the timestamp after a reload and make sure they don't match. 122 reload(contentViewCore, testCallbackHelperContainer); 123 javascriptHelper.evaluateJavaScript(contentViewCore, "getLoadtime();"); 124 javascriptHelper.waitUntilHasValue(); 125 String secondTimestamp = javascriptHelper.getJsonResultAndClear(); 126 assertNotNull("Timestamp was null.", secondTimestamp); 127 assertFalse("Timestamps matched.", firstTimestamp.equals(secondTimestamp)); 128 } 129} 130