| Index: chrome/android/javatests/src/org/chromium/chrome/browser/tabmodel/ContextMenuLoadUrlParamsTest.java
|
| diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/tabmodel/ContextMenuLoadUrlParamsTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/tabmodel/ContextMenuLoadUrlParamsTest.java
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..a40c90ba8bfc7b70955daf5af86e4e9b2b41deb7
|
| --- /dev/null
|
| +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/tabmodel/ContextMenuLoadUrlParamsTest.java
|
| @@ -0,0 +1,138 @@
|
| +// 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.tabmodel;
|
| +
|
| +import android.test.FlakyTest;
|
| +
|
| +import com.google.android.apps.chrome.R;
|
| +
|
| +import org.chromium.base.ThreadUtils;
|
| +import org.chromium.chrome.browser.ChromeActivity;
|
| +import org.chromium.chrome.browser.Tab;
|
| +import org.chromium.chrome.browser.tabmodel.TabModel.TabLaunchType;
|
| +import org.chromium.chrome.browser.tabmodel.TabWindowManager.TabModelSelectorFactory;
|
| +import org.chromium.chrome.test.ChromeTabbedActivityTestBase;
|
| +import org.chromium.chrome.test.util.TestHttpServerClient;
|
| +import org.chromium.chrome.test.util.browser.contextmenu.ContextMenuUtils;
|
| +import org.chromium.content_public.browser.LoadUrlParams;
|
| +import org.chromium.ui.base.WindowAndroid;
|
| +
|
| +import java.util.concurrent.TimeoutException;
|
| +
|
| +/**
|
| + * Verifies URL load parameters set when triggering navigations from the context menu.
|
| + */
|
| +public class ContextMenuLoadUrlParamsTest extends ChromeTabbedActivityTestBase {
|
| + // Load parameters of the last call to openNewTab().
|
| + LoadUrlParams mOpenNewTabLoadUrlParams;
|
| +
|
| + // Records parameters of calls to TabModelSelector methods and otherwise behaves like
|
| + // TabModelSelectorImpl.
|
| + class RecordingTabModelSelector extends TabModelSelectorImpl {
|
| + @Override
|
| + public Tab openNewTab(LoadUrlParams loadUrlParams, TabLaunchType type, Tab parent,
|
| + boolean incognito) {
|
| + mOpenNewTabLoadUrlParams = loadUrlParams;
|
| + return super.openNewTab(loadUrlParams, type, parent, incognito);
|
| + }
|
| +
|
| + public RecordingTabModelSelector(ChromeActivity activity, int selectorIndex,
|
| + WindowAndroid windowAndroid) {
|
| + super(activity, selectorIndex, windowAndroid);
|
| + }
|
| + }
|
| +
|
| + @Override
|
| + public void setUp() throws Exception {
|
| + // Plant RecordingTabModelSelector as the TabModelSelector used in Main. The factory has to
|
| + // be set before super.setUp(), as super.setUp() creates Main and consequently the
|
| + // TabModelSelector.
|
| + ThreadUtils.runOnUiThreadBlocking(new Runnable() {
|
| + @Override
|
| + public void run() {
|
| + TabWindowManager.getInstance().setTabModelSelectorFactory(
|
| + new TabModelSelectorFactory() {
|
| + @Override
|
| + public TabModelSelector buildSelector(ChromeActivity activity,
|
| + WindowAndroid windowAndroid, int selectorIndex) {
|
| + return new RecordingTabModelSelector(activity, selectorIndex,
|
| + windowAndroid);
|
| + }
|
| + });
|
| + }
|
| + });
|
| + super.setUp();
|
| + }
|
| +
|
| + /**
|
| + * Verifies that the referrer is correctly set for "Open in new tab".
|
| + * Bug: crbug.com/413216
|
| + * @MediumTest
|
| + * @Feature({"Browser"})
|
| + */
|
| + @FlakyTest
|
| + public void testOpenInNewTabReferrer()
|
| + throws InterruptedException, TimeoutException {
|
| + String url =
|
| + TestHttpServerClient.getUrl("chrome/test/data/android/context_menu_test.html");
|
| + String expectedReferrer = url;
|
| + triggerContextMenuLoad(url, "testLink", R.id.contextmenu_open_in_new_tab);
|
| +
|
| + assertNotNull(mOpenNewTabLoadUrlParams);
|
| + assertEquals(expectedReferrer, mOpenNewTabLoadUrlParams.getReferrer().getUrl());
|
| + }
|
| +
|
| + /**
|
| + * Verifies that the referrer is not set for "Open in new incognito tab".
|
| + * Bug: crbug.com/413216
|
| + * @MediumTest
|
| + * @Feature({"Browser"})
|
| + */
|
| + @FlakyTest
|
| + public void testOpenInIncognitoTabNoReferrer()
|
| + throws InterruptedException, TimeoutException {
|
| + String url =
|
| + TestHttpServerClient.getUrl("chrome/test/data/android/context_menu_test.html");
|
| + triggerContextMenuLoad(url, "testLink", R.id.contextmenu_open_in_incognito_tab);
|
| +
|
| + assertNotNull(mOpenNewTabLoadUrlParams);
|
| + assertNull(mOpenNewTabLoadUrlParams.getReferrer());
|
| + }
|
| +
|
| + /**
|
| + * Verifies that the referrer is stripped from username and password fields.
|
| + * Bug: crbug.com/413216
|
| + * @MediumTest
|
| + * @Feature({"Browser"})
|
| + */
|
| + @FlakyTest
|
| + public void testOpenInNewTabSanitizeReferrer()
|
| + throws InterruptedException, TimeoutException {
|
| + String url = TestHttpServerClient.getUrl("chrome/test/data/android/context_menu_test.html",
|
| + "user", "pass");
|
| + String expectedReferrer =
|
| + TestHttpServerClient.getUrl("chrome/test/data/android/context_menu_test.html");
|
| + assertTrue(url.contains("pass")); // Sanity check.
|
| + triggerContextMenuLoad(url, "testLink", R.id.contextmenu_open_in_new_tab);
|
| +
|
| + assertNotNull(mOpenNewTabLoadUrlParams);
|
| + assertEquals(expectedReferrer, mOpenNewTabLoadUrlParams.getReferrer().getUrl());
|
| + }
|
| +
|
| + private void triggerContextMenuLoad(String url, String openerDomId, int menuItemId)
|
| + throws InterruptedException, TimeoutException {
|
| + loadUrl(url);
|
| + assertWaitForPageScaleFactorMatch(0.5f);
|
| + Tab tab = getActivity().getActivityTab();
|
| + ContextMenuUtils.selectContextMenuItem(this, tab, openerDomId, menuItemId);
|
| + getInstrumentation().waitForIdleSync();
|
| + }
|
| +
|
| + @Override
|
| + public void startMainActivity() throws InterruptedException {
|
| + startMainActivityOnBlankPage();
|
| + }
|
| +}
|
| +
|
|
|