| Index: chrome/android/javatests/src/org/chromium/chrome/browser/omnibox/OmniboxTest.java
|
| diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/omnibox/OmniboxTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/omnibox/OmniboxTest.java
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..1f94c7e262d5ba65e7c93159e84b930ef416d7c0
|
| --- /dev/null
|
| +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/omnibox/OmniboxTest.java
|
| @@ -0,0 +1,648 @@
|
| +// Copyright 2015 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +package org.chromium.chrome.browser.omnibox;
|
| +
|
| +import static org.chromium.chrome.test.util.OmniboxTestUtils.buildSuggestionMap;
|
| +
|
| +import android.os.SystemClock;
|
| +import android.test.FlakyTest;
|
| +import android.test.suitebuilder.annotation.MediumTest;
|
| +import android.test.suitebuilder.annotation.SmallTest;
|
| +import android.text.Selection;
|
| +import android.util.Pair;
|
| +import android.view.KeyEvent;
|
| +import android.view.WindowManager;
|
| +import android.widget.ImageButton;
|
| +import android.widget.ImageView;
|
| +import android.widget.TextView;
|
| +
|
| +import com.google.android.apps.chrome.R;
|
| +
|
| +import org.chromium.base.ThreadUtils;
|
| +import org.chromium.base.test.util.EnormousTest;
|
| +import org.chromium.base.test.util.Feature;
|
| +import org.chromium.base.test.util.ScalableTimeout;
|
| +import org.chromium.chrome.browser.ChromeActivity;
|
| +import org.chromium.chrome.browser.omnibox.AutocompleteController.OnSuggestionsReceivedListener;
|
| +import org.chromium.chrome.browser.omnibox.OmniboxSuggestion.Type;
|
| +import org.chromium.chrome.test.ChromeActivityTestCaseBase;
|
| +import org.chromium.chrome.test.util.ChromeTabUtils;
|
| +import org.chromium.chrome.test.util.OmniboxTestUtils;
|
| +import org.chromium.chrome.test.util.OmniboxTestUtils.SuggestionsResult;
|
| +import org.chromium.chrome.test.util.OmniboxTestUtils.SuggestionsResultBuilder;
|
| +import org.chromium.chrome.test.util.OmniboxTestUtils.TestAutocompleteController;
|
| +import org.chromium.chrome.test.util.OmniboxTestUtils.TestSuggestionResultsBuilder;
|
| +import org.chromium.chrome.test.util.TestHttpServerClient;
|
| +import org.chromium.content.browser.test.util.Criteria;
|
| +import org.chromium.content.browser.test.util.CriteriaHelper;
|
| +import org.chromium.content.browser.test.util.KeyUtils;
|
| +import org.chromium.content.browser.test.util.UiUtils;
|
| +import org.chromium.ui.base.DeviceFormFactor;
|
| +
|
| +import java.util.HashMap;
|
| +import java.util.List;
|
| +import java.util.Map;
|
| +import java.util.concurrent.Callable;
|
| +import java.util.concurrent.ExecutionException;
|
| +import java.util.concurrent.atomic.AtomicInteger;
|
| +
|
| +/**
|
| + * Tests of the Omnibox.
|
| + */
|
| +public class OmniboxTest extends ChromeActivityTestCaseBase<ChromeActivity> {
|
| +
|
| + public OmniboxTest() {
|
| + super(ChromeActivity.class);
|
| + }
|
| +
|
| + private void clearUrlBar() {
|
| + final UrlBar urlBar = (UrlBar) getActivity().findViewById(R.id.url_bar);
|
| + assertNotNull(urlBar);
|
| +
|
| + ThreadUtils.runOnUiThreadBlocking(new Runnable() {
|
| + @Override
|
| + public void run() {
|
| + urlBar.setText("");
|
| + }
|
| + });
|
| + }
|
| +
|
| + /**
|
| + * Sanity check of Omnibox. The problem in http://b/5021723 would
|
| + * cause this to fail (hang or crash).
|
| + */
|
| + @EnormousTest
|
| + @Feature({"Omnibox"})
|
| + public void testSimpleUse() throws InterruptedException {
|
| + typeInOmnibox("aaaaaaa", false);
|
| +
|
| + final LocationBarLayout locationBar =
|
| + (LocationBarLayout) getActivity().findViewById(R.id.location_bar);
|
| + OmniboxTestUtils.waitForOmniboxSuggestions(locationBar);
|
| +
|
| + ChromeTabUtils.waitForTabPageLoadStart(getActivity().getActivityTab(), new Runnable() {
|
| + @Override
|
| + public void run() {
|
| + final UrlBar urlBar = (UrlBar) getActivity().findViewById(R.id.url_bar);
|
| + KeyUtils.singleKeyEventView(getInstrumentation(), urlBar, KeyEvent.KEYCODE_ENTER);
|
| + }
|
| + }, ScalableTimeout.scaleTimeout(20));
|
| + }
|
| +
|
| + /**
|
| + * Test for checking whether soft input model switches with focus.
|
| + */
|
| + @MediumTest
|
| + @Feature({"Omnibox"})
|
| + public void testFocusChangingSoftInputMode() throws InterruptedException {
|
| + final UrlBar urlBar = (UrlBar) getActivity().findViewById(R.id.url_bar);
|
| +
|
| + OmniboxTestUtils.toggleUrlBarFocus(urlBar, true);
|
| + assertTrue("Soft input mode failed to switch on focus",
|
| + CriteriaHelper.pollForCriteria(new Criteria() {
|
| + @Override
|
| + public boolean isSatisfied() {
|
| + return getActivity().getWindow().getAttributes().softInputMode
|
| + == WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN;
|
| + }
|
| + }));
|
| +
|
| + OmniboxTestUtils.toggleUrlBarFocus(urlBar, false);
|
| + assertTrue("Soft input mode failed to switch on unfocus",
|
| + CriteriaHelper.pollForCriteria(new Criteria() {
|
| + @Override
|
| + public boolean isSatisfied() {
|
| + return getActivity().getWindow().getAttributes().softInputMode
|
| + == WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE;
|
| + }
|
| + }));
|
| + }
|
| +
|
| + /**
|
| + * Tests that focusing a url bar starts a zero suggest request.
|
| + */
|
| + @MediumTest
|
| + @Feature({"Omnibox"})
|
| + public void testRequestZeroSuggestOnFocus() throws Exception {
|
| + final LocationBarLayout locationBar =
|
| + (LocationBarLayout) getActivity().findViewById(R.id.location_bar);
|
| + final UrlBar urlBar = (UrlBar) getActivity().findViewById(R.id.url_bar);
|
| +
|
| + final TestAutocompleteController controller = new TestAutocompleteController(
|
| + locationBar, null, null);
|
| +
|
| + ThreadUtils.runOnUiThreadBlocking(new Runnable() {
|
| + @Override
|
| + public void run() {
|
| + locationBar.setAutocompleteController(controller);
|
| + }
|
| + });
|
| + assertEquals("Should not have any zero suggest requests yet", 0,
|
| + controller.numZeroSuggestRequests());
|
| +
|
| + OmniboxTestUtils.toggleUrlBarFocus(urlBar, true);
|
| +
|
| + assertTrue("Should have requested zero suggest on focusing",
|
| + CriteriaHelper.pollForCriteria(new Criteria() {
|
| + @Override
|
| + public boolean isSatisfied() {
|
| + return controller.numZeroSuggestRequests() == 1;
|
| + }
|
| + }));
|
| + }
|
| +
|
| + /**
|
| + * Tests that focusing a url bar starts a zero suggest request.
|
| + */
|
| + @MediumTest
|
| + @Feature({"Omnibox"})
|
| + public void testRequestZeroSuggestAfterDelete() throws InterruptedException {
|
| + final LocationBarLayout locationBar =
|
| + (LocationBarLayout) getActivity().findViewById(R.id.location_bar);
|
| + final UrlBar urlBar = (UrlBar) getActivity().findViewById(R.id.url_bar);
|
| + final ImageButton deleteButton = (ImageButton) getActivity().findViewById(
|
| + R.id.delete_button);
|
| +
|
| + final OnSuggestionsReceivedListener emptySuggestionListener =
|
| + new OnSuggestionsReceivedListener() {
|
| + @Override
|
| + public void onSuggestionsReceived(
|
| + List<OmniboxSuggestion> suggestions, String inlineAutocompleteText) {
|
| + }
|
| + };
|
| +
|
| + final TestAutocompleteController controller = new TestAutocompleteController(
|
| + locationBar, emptySuggestionListener,
|
| + new HashMap<String, List<SuggestionsResult>>());
|
| +
|
| + OmniboxTestUtils.toggleUrlBarFocus(urlBar, true);
|
| + ThreadUtils.runOnUiThreadBlocking(new Runnable() {
|
| + @Override
|
| + public void run() {
|
| + locationBar.setAutocompleteController(controller);
|
| + urlBar.setText("g");
|
| + }
|
| + });
|
| +
|
| + assertTrue("Should have drawn the delete button",
|
| + CriteriaHelper.pollForCriteria(new Criteria() {
|
| + @Override
|
| + public boolean isSatisfied() {
|
| + return deleteButton.getWidth() > 0;
|
| + }
|
| + }));
|
| +
|
| + // The click view below ends up clicking on the menu button underneath the delete button
|
| + // for some time after the delete button appears. Wait for UI to settle down before
|
| + // clicking.
|
| + UiUtils.settleDownUI(getInstrumentation());
|
| +
|
| + singleClickView(deleteButton, deleteButton.getWidth() / 2, deleteButton.getHeight() / 2);
|
| +
|
| + assertTrue("Should have requested zero suggest results on url bar empty",
|
| + CriteriaHelper.pollForCriteria(new Criteria() {
|
| + @Override
|
| + public boolean isSatisfied() {
|
| + return controller.numZeroSuggestRequests() == 1;
|
| + }
|
| + }));
|
| + }
|
| +
|
| + @MediumTest
|
| + @Feature({"Omnibox"})
|
| + public void testRequestZeroSuggestTypeAndBackspace() throws InterruptedException {
|
| + final LocationBarLayout locationBar =
|
| + (LocationBarLayout) getActivity().findViewById(R.id.location_bar);
|
| + final UrlBar urlBar = (UrlBar) getActivity().findViewById(R.id.url_bar);
|
| +
|
| + final OnSuggestionsReceivedListener emptySuggestionListener =
|
| + new OnSuggestionsReceivedListener() {
|
| + @Override
|
| + public void onSuggestionsReceived(List<OmniboxSuggestion> suggestions,
|
| + String inlineAutocompleteText) {
|
| + }
|
| + };
|
| +
|
| + final TestAutocompleteController controller = new TestAutocompleteController(
|
| + locationBar, emptySuggestionListener,
|
| + new HashMap<String, List<SuggestionsResult>>());
|
| +
|
| + OmniboxTestUtils.toggleUrlBarFocus(urlBar, true);
|
| +
|
| + ThreadUtils.runOnUiThreadBlocking(new Runnable() {
|
| + @Override
|
| + public void run() {
|
| + locationBar.setAutocompleteController(controller);
|
| + urlBar.setText("g");
|
| + urlBar.setSelection(1);
|
| + }
|
| + });
|
| +
|
| + assertEquals("No calls to zero suggest yet", 0, controller.numZeroSuggestRequests());
|
| + KeyUtils.singleKeyEventView(getInstrumentation(), urlBar, KeyEvent.KEYCODE_DEL);
|
| + assertTrue("Should have requested zero suggest results on url bar empty",
|
| + CriteriaHelper.pollForCriteria(new Criteria() {
|
| + @Override
|
| + public boolean isSatisfied() {
|
| + return controller.numZeroSuggestRequests() == 1;
|
| + }
|
| + }));
|
| + }
|
| +
|
| + // Sanity check that no text is displayed in the omnibox when on the NTP page and that the hint
|
| + // text is correct.
|
| + @MediumTest
|
| + @Feature({"Omnibox"})
|
| + public void testDefaultText() throws InterruptedException {
|
| + startMainActivityFromLauncher();
|
| +
|
| + final UrlBar urlBar = (UrlBar) getActivity().findViewById(R.id.url_bar);
|
| +
|
| + // Omnibox on NTP shows the hint text.
|
| + assertNotNull(urlBar);
|
| + assertEquals("Location bar has text.", "", urlBar.getText().toString());
|
| + assertEquals("Location bar has incorrect hint.",
|
| + getActivity().getResources().getString(R.string.search_or_type_url),
|
| + urlBar.getHint().toString());
|
| +
|
| + // Type something in the omnibox.
|
| + // Note that the TextView does not provide a way to test if the hint is showing, the API
|
| + // documentation simply says it shows when the text is empty.
|
| + ThreadUtils.runOnUiThreadBlocking(new Runnable() {
|
| + @Override
|
| + public void run() {
|
| + urlBar.requestFocus();
|
| + urlBar.setText("G");
|
| + }
|
| + });
|
| + assertEquals("Location bar should have text.", "G", urlBar.getText().toString());
|
| + }
|
| +
|
| + @MediumTest
|
| + @Feature({"Omnibox", "Main"})
|
| + public void testAutoCompleteAndCorrectionLandscape() throws ExecutionException,
|
| + InterruptedException {
|
| + // Default orientation for tablets is landscape. Default for phones is portrait.
|
| + int requestedOrientation = 1;
|
| + if (DeviceFormFactor.isTablet(getActivity())) {
|
| + requestedOrientation = 0;
|
| + }
|
| + doTestAutoCompleteAndCorrectionForOrientation(requestedOrientation);
|
| + }
|
| +
|
| + @MediumTest
|
| + @Feature({"Omnibox", "Main"})
|
| + public void testAutoCompleteAndCorrectionPortrait() throws ExecutionException,
|
| + InterruptedException {
|
| + // Default orientation for tablets is landscape. Default for phones is portrait.
|
| + int requestedOrientation = 0;
|
| + if (DeviceFormFactor.isTablet(getActivity())) {
|
| + requestedOrientation = 1;
|
| + }
|
| + doTestAutoCompleteAndCorrectionForOrientation(requestedOrientation);
|
| + }
|
| +
|
| + private void doTestAutoCompleteAndCorrectionForOrientation(
|
| + int orientation) throws ExecutionException, InterruptedException {
|
| + getActivity().setRequestedOrientation(orientation);
|
| + UiUtils.settleDownUI(getInstrumentation());
|
| +
|
| + Map<String, List<SuggestionsResult>> suggestionsMap = buildSuggestionMap(
|
| + new TestSuggestionResultsBuilder()
|
| + .setTextShownFor("wiki")
|
| + .addSuggestions(new SuggestionsResultBuilder()
|
| + .addGeneratedSuggestion(Type.SEARCH_SUGGEST, "wikipedia", null)
|
| + .addGeneratedSuggestion(Type.SEARCH_SUGGEST, "wiki", null)
|
| + .addGeneratedSuggestion(Type.SEARCH_SUGGEST, "wikileaks", null)
|
| + .setAutocompleteText("pedia")),
|
| + new TestSuggestionResultsBuilder()
|
| + .setTextShownFor("onomatop")
|
| + .addSuggestions(new SuggestionsResultBuilder()
|
| + .addGeneratedSuggestion(Type.SEARCH_SUGGEST, "onomatopoeia", null)
|
| + .addGeneratedSuggestion(
|
| + Type.SEARCH_SUGGEST, "onomatopoeia foo", null)
|
| + .setAutocompleteText("oeia")),
|
| + new TestSuggestionResultsBuilder()
|
| + .setTextShownFor("mispellled")
|
| + .addSuggestions(new SuggestionsResultBuilder()
|
| + .addGeneratedSuggestion(Type.SEARCH_SUGGEST, "misspelled", null)
|
| + .addGeneratedSuggestion(
|
| + Type.SEARCH_SUGGEST, "misspelled words", null)
|
| + .setAutocompleteText(""))
|
| + );
|
| + checkAutocompleteText(suggestionsMap, "wiki", "wikipedia", 4, 9);
|
| + checkAutocompleteText(suggestionsMap, "onomatop", "onomatopoeia", 8, 12);
|
| + checkAutocompleteText(suggestionsMap, "mispellled", "mispellled", 10, 10);
|
| + }
|
| +
|
| + /**
|
| + * crbug.com/267901
|
| + * @MediumTest
|
| + * @Feature({"Omnibox"})
|
| + */
|
| + @FlakyTest
|
| + public void testPerformSearchQuery() throws InterruptedException {
|
| + UiUtils.settleDownUI(getInstrumentation());
|
| + final String testQuery = "Test Query";
|
| +
|
| + ChromeTabUtils.waitForTabPageLoaded(getActivity().getActivityTab(), new Runnable() {
|
| + @Override
|
| + public void run() {
|
| + ThreadUtils.runOnUiThreadBlocking(new Runnable() {
|
| + @Override
|
| + public void run() {
|
| + final LocationBarLayout locationBar =
|
| + (LocationBarLayout) getActivity().findViewById(R.id.location_bar);
|
| + locationBar.performSearchQueryForTest(testQuery);
|
| + }
|
| + });
|
| + }
|
| + });
|
| +
|
| + getInstrumentation().runOnMainSync(new Runnable() {
|
| + @Override
|
| + public void run() {
|
| + final UrlBar urlBar = (UrlBar) getActivity().findViewById(R.id.url_bar);
|
| + String currentUrl = urlBar.getText().toString();
|
| + assertEquals(testQuery, currentUrl);
|
| + }
|
| + });
|
| + }
|
| +
|
| + @MediumTest
|
| + @Feature({"Omnibox"})
|
| + public void testDuplicateAutocompleteTextResults()
|
| + throws InterruptedException, ExecutionException {
|
| + Map<String, List<SuggestionsResult>> suggestionsMap = buildSuggestionMap(
|
| + new TestSuggestionResultsBuilder()
|
| + .setTextShownFor("test")
|
| + .addSuggestions(new SuggestionsResultBuilder()
|
| + .addGeneratedSuggestion(Type.SEARCH_HISTORY, "test", null)
|
| + .addGeneratedSuggestion(Type.SEARCH_HISTORY, "testing", null)
|
| + .setAutocompleteText("ing"))
|
| + .addSuggestions(new SuggestionsResultBuilder()
|
| + .addGeneratedSuggestion(Type.SEARCH_HISTORY, "test", null)
|
| + .addGeneratedSuggestion(Type.SEARCH_HISTORY, "testz", null)
|
| + .setAutocompleteText("ing"))
|
| + .addSuggestions(new SuggestionsResultBuilder()
|
| + .addGeneratedSuggestion(Type.SEARCH_HISTORY, "test", null)
|
| + .addGeneratedSuggestion(Type.SEARCH_HISTORY, "testblarg", null)
|
| + .setAutocompleteText("ing")));
|
| + checkAutocompleteText(suggestionsMap, "test", "testing", 4, 7);
|
| + }
|
| +
|
| + @MediumTest
|
| + @Feature({"Omnibox"})
|
| + public void testGrowingAutocompleteTextResults()
|
| + throws InterruptedException, ExecutionException {
|
| + Map<String, List<SuggestionsResult>> suggestionsMap = buildSuggestionMap(
|
| + new TestSuggestionResultsBuilder()
|
| + .setTextShownFor("test")
|
| + .addSuggestions(new SuggestionsResultBuilder()
|
| + .addGeneratedSuggestion(Type.SEARCH_HISTORY, "test", null)
|
| + .addGeneratedSuggestion(Type.SEARCH_HISTORY, "testing", null)
|
| + .setAutocompleteText("i"))
|
| + .addSuggestions(new SuggestionsResultBuilder()
|
| + .addGeneratedSuggestion(Type.SEARCH_HISTORY, "test", null)
|
| + .addGeneratedSuggestion(Type.SEARCH_HISTORY, "testz", null)
|
| + .setAutocompleteText("in"))
|
| + .addSuggestions(new SuggestionsResultBuilder()
|
| + .addGeneratedSuggestion(Type.SEARCH_HISTORY, "test", null)
|
| + .addGeneratedSuggestion(Type.SEARCH_HISTORY, "testblarg", null)
|
| + .setAutocompleteText("ing for the win")));
|
| + checkAutocompleteText(suggestionsMap, "test", "testing for the win", 4, 19);
|
| + }
|
| +
|
| + @MediumTest
|
| + @Feature({"Omnibox"})
|
| + public void testShrinkingAutocompleteTextResults()
|
| + throws InterruptedException, ExecutionException {
|
| + Map<String, List<SuggestionsResult>> suggestionsMap = buildSuggestionMap(
|
| + new TestSuggestionResultsBuilder()
|
| + .setTextShownFor("test")
|
| + .addSuggestions(new SuggestionsResultBuilder()
|
| + .addGeneratedSuggestion(Type.SEARCH_HISTORY, "test", null)
|
| + .addGeneratedSuggestion(Type.SEARCH_HISTORY, "testing", null)
|
| + .setAutocompleteText("ing is awesome"))
|
| + .addSuggestions(new SuggestionsResultBuilder()
|
| + .addGeneratedSuggestion(Type.SEARCH_HISTORY, "test", null)
|
| + .addGeneratedSuggestion(Type.SEARCH_HISTORY, "testz", null)
|
| + .setAutocompleteText("ing is hard"))
|
| + .addSuggestions(new SuggestionsResultBuilder()
|
| + .addGeneratedSuggestion(Type.SEARCH_HISTORY, "test", null)
|
| + .addGeneratedSuggestion(Type.SEARCH_HISTORY, "testblarg", null)
|
| + .setAutocompleteText("ingz")));
|
| + checkAutocompleteText(suggestionsMap, "test", "testingz", 4, 8);
|
| + }
|
| +
|
| + private void checkAutocompleteText(
|
| + Map<String, List<SuggestionsResult>> suggestionsMap,
|
| + final String textToType, final String expectedAutocompleteText,
|
| + final int expectedAutocompleteStart, final int expectedAutocompleteEnd)
|
| + throws InterruptedException, ExecutionException {
|
| +
|
| + final TextView urlBarView = (TextView) getActivity().findViewById(R.id.url_bar);
|
| + ThreadUtils.runOnUiThreadBlocking(new Runnable() {
|
| + @Override
|
| + public void run() {
|
| + urlBarView.requestFocus();
|
| + urlBarView.setText("");
|
| + }
|
| + });
|
| +
|
| + final LocationBarLayout locationBar =
|
| + ((LocationBarLayout) getActivity().findViewById(R.id.location_bar));
|
| +
|
| + final Object suggestionsProcessedSignal = new Object();
|
| + final AtomicInteger suggestionsLeft = new AtomicInteger(
|
| + suggestionsMap.get(textToType).size());
|
| + OnSuggestionsReceivedListener suggestionsListener = new OnSuggestionsReceivedListener() {
|
| + @Override
|
| + public void onSuggestionsReceived(
|
| + List<OmniboxSuggestion> suggestions,
|
| + String inlineAutocompleteText) {
|
| + locationBar.onSuggestionsReceived(suggestions, inlineAutocompleteText);
|
| + synchronized (suggestionsProcessedSignal) {
|
| + int remaining = suggestionsLeft.decrementAndGet();
|
| + if (remaining == 0) {
|
| + suggestionsProcessedSignal.notifyAll();
|
| + } else if (remaining < 0) {
|
| + fail("Unexpected suggestions received");
|
| + }
|
| + }
|
| + }
|
| + };
|
| + final TestAutocompleteController controller = new TestAutocompleteController(
|
| + locationBar, suggestionsListener, suggestionsMap);
|
| +
|
| + ThreadUtils.runOnUiThreadBlocking(new Runnable() {
|
| + @Override
|
| + public void run() {
|
| + locationBar.setAutocompleteController(controller);
|
| + }
|
| + });
|
| +
|
| + KeyUtils.typeTextIntoView(getInstrumentation(), urlBarView, textToType);
|
| +
|
| + synchronized (suggestionsProcessedSignal) {
|
| + long endTime = SystemClock.uptimeMillis() + 3000;
|
| + while (suggestionsLeft.get() != 0) {
|
| + long waitTime = endTime - SystemClock.uptimeMillis();
|
| + if (waitTime <= 0) break;
|
| + suggestionsProcessedSignal.wait(waitTime);
|
| + }
|
| + }
|
| +
|
| + CharSequence urlText = ThreadUtils.runOnUiThreadBlocking(new Callable<CharSequence>() {
|
| + @Override
|
| + public CharSequence call() throws Exception {
|
| + return urlBarView.getText();
|
| + }
|
| + });
|
| + assertEquals("URL Bar text not autocompleted as expected.",
|
| + expectedAutocompleteText, urlText.toString());
|
| + assertEquals(expectedAutocompleteStart, Selection.getSelectionStart(urlText));
|
| + assertEquals(expectedAutocompleteEnd, Selection.getSelectionEnd(urlText));
|
| + }
|
| +
|
| + /**
|
| + * The following test is a basic way to assess how much instant slows down typing in the
|
| + * omnibox. It is meant to be run manually for investigation purposes.
|
| + * When instant was enabled for all suggestions (including searched), I would get a 40% increase
|
| + * in the average time on this test. With instant off, it was almost identical.
|
| + * Marking the test disabled so it is not picked up by our test runner, as it is supposed to be
|
| + * run manually.
|
| + */
|
| + public void manualTestTypingPerformance() throws InterruptedException {
|
| + final String text = "searching for pizza";
|
| + // Type 10 times something on the omnibox and get the average time with and without instant.
|
| + long instantAverage = 0;
|
| + long noInstantAverage = 0;
|
| +
|
| + for (int i = 0; i < 2; ++i) {
|
| + boolean instantOn = (i == 1);
|
| + setAllowPrerender(instantOn);
|
| +
|
| + for (int j = 0; j < 10; ++j) {
|
| + long before = System.currentTimeMillis();
|
| + typeInOmnibox(text, true);
|
| + if (instantOn) {
|
| + instantAverage += System.currentTimeMillis() - before;
|
| + } else {
|
| + noInstantAverage += System.currentTimeMillis() - before;
|
| + }
|
| + clearUrlBar();
|
| + getInstrumentation().waitForIdleSync();
|
| + }
|
| + }
|
| + instantAverage /= 10;
|
| + noInstantAverage /= 10;
|
| + System.err.println("******************************************************************");
|
| + System.err.println("**** Instant average=" + instantAverage);
|
| + System.err.println("**** No instant average=" + noInstantAverage);
|
| + System.err.println("******************************************************************");
|
| + }
|
| +
|
| + /**
|
| + * crbug.com/414353
|
| + * Test to verify security-icon "lock or globe" on visiting http and secured Urls.
|
| + * @EnormousTest
|
| + */
|
| + @FlakyTest
|
| + public void testSecurityIcon() throws InterruptedException {
|
| + final String testUrl = TestHttpServerClient.getUrl(
|
| + "chrome/test/data/android/omnibox/one.html");
|
| + final String securedExternalUrl = "https://www.google.com";
|
| +
|
| + ImageView navigationButton = (ImageView)
|
| + getActivity().findViewById(R.id.navigation_button);
|
| + ImageButton securityButton = (ImageButton)
|
| + getActivity().findViewById(R.id.security_button);
|
| +
|
| + loadUrl(testUrl);
|
| + final LocationBarLayout locationBar =
|
| + (LocationBarLayout) getActivity().findViewById(R.id.location_bar);
|
| + boolean securityIcon = locationBar.isSecurityButtonShown();
|
| + assertFalse("Omnibox should not have a Security icon", securityIcon);
|
| + assertEquals("navigation_button with wrong resource-id",
|
| + R.id.navigation_button, navigationButton.getId());
|
| + assertTrue(navigationButton.isShown());
|
| + assertFalse(securityButton.isShown());
|
| +
|
| + loadUrl(securedExternalUrl);
|
| + securityIcon = locationBar.isSecurityButtonShown();
|
| + assertTrue("Omnibox should have a Security icon", securityIcon);
|
| + assertEquals("security_button with wrong resource-id",
|
| + R.id.security_button, securityButton.getId());
|
| + assertTrue(securityButton.isShown());
|
| + assertFalse(navigationButton.isShown());
|
| + }
|
| +
|
| + @SmallTest
|
| + public void testSplitPathFromUrlDisplayText() {
|
| + verifySplitUrlAndPath("", null, LocationBarLayout.splitPathFromUrlDisplayText(""));
|
| + verifySplitUrlAndPath(
|
| + "https:", null, LocationBarLayout.splitPathFromUrlDisplayText("https:"));
|
| + verifySplitUrlAndPath("about:blank", null,
|
| + LocationBarLayout.splitPathFromUrlDisplayText("about:blank"));
|
| +
|
| + verifySplitUrlAndPath("chrome://flags", null,
|
| + LocationBarLayout.splitPathFromUrlDisplayText("chrome://flags"));
|
| + verifySplitUrlAndPath("chrome://flags", "/?egads",
|
| + LocationBarLayout.splitPathFromUrlDisplayText("chrome://flags/?egads"));
|
| +
|
| + verifySplitUrlAndPath("www.google.com", null,
|
| + LocationBarLayout.splitPathFromUrlDisplayText("www.google.com"));
|
| + verifySplitUrlAndPath("www.google.com", null,
|
| + LocationBarLayout.splitPathFromUrlDisplayText("www.google.com/"));
|
| + verifySplitUrlAndPath("www.google.com", "/?q=blah",
|
| + LocationBarLayout.splitPathFromUrlDisplayText("www.google.com/?q=blah"));
|
| +
|
| + verifySplitUrlAndPath("https://www.google.com", null,
|
| + LocationBarLayout.splitPathFromUrlDisplayText("https://www.google.com"));
|
| + verifySplitUrlAndPath("https://www.google.com", null,
|
| + LocationBarLayout.splitPathFromUrlDisplayText("https://www.google.com/"));
|
| + verifySplitUrlAndPath("https://www.google.com", "/?q=blah",
|
| + LocationBarLayout.splitPathFromUrlDisplayText("https://www.google.com/?q=blah"));
|
| +
|
| + // crbug.com/414990
|
| + String testUrl = "https://disneyworld.disney.go.com/special-offers/"
|
| + + "?CMP=KNC-WDW_FY15_DOM_Q1RO_BR_Gold_SpOffer|G|4141300.RR.AM.01.47"
|
| + + "&keyword_id=s6JyxRifG_dm|walt%20disney%20world|37174067873|e|1540wwa14043";
|
| + verifySplitUrlAndPath("https://disneyworld.disney.go.com",
|
| + "/special-offers/?CMP=KNC-WDW_FY15_DOM_Q1RO_BR_Gold_SpOffer|G|4141300.RR.AM.01.47"
|
| + + "&keyword_id=s6JyxRifG_dm|walt%20disney%20world|37174067873|e|"
|
| + + "1540wwa14043",
|
| + LocationBarLayout.splitPathFromUrlDisplayText(testUrl));
|
| +
|
| + // crbug.com/415387
|
| + verifySplitUrlAndPath("ftp://example.com", "/ftp.html",
|
| + LocationBarLayout.splitPathFromUrlDisplayText("ftp://example.com/ftp.html"));
|
| +
|
| + // crbug.com/447416
|
| + verifySplitUrlAndPath("file:///dev/blah", null,
|
| + LocationBarLayout.splitPathFromUrlDisplayText("file:///dev/blah"));
|
| + verifySplitUrlAndPath("javascript:window.alert('hello');", null,
|
| + LocationBarLayout.splitPathFromUrlDisplayText("javascript:window.alert('hello');"));
|
| + verifySplitUrlAndPath("data:text/html;charset=utf-8,Page%201", null,
|
| + LocationBarLayout.splitPathFromUrlDisplayText(
|
| + "data:text/html;charset=utf-8,Page%201"));
|
| + }
|
| +
|
| + private void verifySplitUrlAndPath(
|
| + String expectedPrePath, String expectedPostPath, Pair<String, String> actualValues) {
|
| + assertEquals(expectedPrePath, actualValues.first);
|
| + assertEquals(expectedPostPath, actualValues.second);
|
| + }
|
| +
|
| + @Override
|
| + public void startMainActivity() throws InterruptedException {
|
| + if (getName().equals("testsplitPathFromUrlDisplayText")
|
| + || getName().equals("testDefaultText")) {
|
| + return;
|
| + }
|
| + startMainActivityOnBlankPage();
|
| + }
|
| +}
|
|
|