OLD | NEW |
(Empty) | |
| 1 // Copyright 2015 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 |
| 5 package org.chromium.chrome.browser.tabmodel; |
| 6 |
| 7 import android.test.FlakyTest; |
| 8 |
| 9 import com.google.android.apps.chrome.R; |
| 10 |
| 11 import org.chromium.base.ThreadUtils; |
| 12 import org.chromium.chrome.browser.ChromeActivity; |
| 13 import org.chromium.chrome.browser.Tab; |
| 14 import org.chromium.chrome.browser.tabmodel.TabModel.TabLaunchType; |
| 15 import org.chromium.chrome.browser.tabmodel.TabWindowManager.TabModelSelectorFac
tory; |
| 16 import org.chromium.chrome.test.ChromeTabbedActivityTestBase; |
| 17 import org.chromium.chrome.test.util.TestHttpServerClient; |
| 18 import org.chromium.chrome.test.util.browser.contextmenu.ContextMenuUtils; |
| 19 import org.chromium.content_public.browser.LoadUrlParams; |
| 20 import org.chromium.ui.base.WindowAndroid; |
| 21 |
| 22 import java.util.concurrent.TimeoutException; |
| 23 |
| 24 /** |
| 25 * Verifies URL load parameters set when triggering navigations from the context
menu. |
| 26 */ |
| 27 public class ContextMenuLoadUrlParamsTest extends ChromeTabbedActivityTestBase { |
| 28 // Load parameters of the last call to openNewTab(). |
| 29 LoadUrlParams mOpenNewTabLoadUrlParams; |
| 30 |
| 31 // Records parameters of calls to TabModelSelector methods and otherwise beh
aves like |
| 32 // TabModelSelectorImpl. |
| 33 class RecordingTabModelSelector extends TabModelSelectorImpl { |
| 34 @Override |
| 35 public Tab openNewTab(LoadUrlParams loadUrlParams, TabLaunchType type, T
ab parent, |
| 36 boolean incognito) { |
| 37 mOpenNewTabLoadUrlParams = loadUrlParams; |
| 38 return super.openNewTab(loadUrlParams, type, parent, incognito); |
| 39 } |
| 40 |
| 41 public RecordingTabModelSelector(ChromeActivity activity, int selectorIn
dex, |
| 42 WindowAndroid windowAndroid) { |
| 43 super(activity, selectorIndex, windowAndroid); |
| 44 } |
| 45 } |
| 46 |
| 47 @Override |
| 48 public void setUp() throws Exception { |
| 49 // Plant RecordingTabModelSelector as the TabModelSelector used in Main.
The factory has to |
| 50 // be set before super.setUp(), as super.setUp() creates Main and conseq
uently the |
| 51 // TabModelSelector. |
| 52 ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
| 53 @Override |
| 54 public void run() { |
| 55 TabWindowManager.getInstance().setTabModelSelectorFactory( |
| 56 new TabModelSelectorFactory() { |
| 57 @Override |
| 58 public TabModelSelector buildSelector(ChromeActivity
activity, |
| 59 WindowAndroid windowAndroid, int selectorInd
ex) { |
| 60 return new RecordingTabModelSelector(activity, s
electorIndex, |
| 61 windowAndroid); |
| 62 } |
| 63 }); |
| 64 } |
| 65 }); |
| 66 super.setUp(); |
| 67 } |
| 68 |
| 69 /** |
| 70 * Verifies that the referrer is correctly set for "Open in new tab". |
| 71 * Bug: crbug.com/413216 |
| 72 * @MediumTest |
| 73 * @Feature({"Browser"}) |
| 74 */ |
| 75 @FlakyTest |
| 76 public void testOpenInNewTabReferrer() |
| 77 throws InterruptedException, TimeoutException { |
| 78 String url = |
| 79 TestHttpServerClient.getUrl("chrome/test/data/android/context_me
nu_test.html"); |
| 80 String expectedReferrer = url; |
| 81 triggerContextMenuLoad(url, "testLink", R.id.contextmenu_open_in_new_tab
); |
| 82 |
| 83 assertNotNull(mOpenNewTabLoadUrlParams); |
| 84 assertEquals(expectedReferrer, mOpenNewTabLoadUrlParams.getReferrer().ge
tUrl()); |
| 85 } |
| 86 |
| 87 /** |
| 88 * Verifies that the referrer is not set for "Open in new incognito tab". |
| 89 * Bug: crbug.com/413216 |
| 90 * @MediumTest |
| 91 * @Feature({"Browser"}) |
| 92 */ |
| 93 @FlakyTest |
| 94 public void testOpenInIncognitoTabNoReferrer() |
| 95 throws InterruptedException, TimeoutException { |
| 96 String url = |
| 97 TestHttpServerClient.getUrl("chrome/test/data/android/context_me
nu_test.html"); |
| 98 triggerContextMenuLoad(url, "testLink", R.id.contextmenu_open_in_incogni
to_tab); |
| 99 |
| 100 assertNotNull(mOpenNewTabLoadUrlParams); |
| 101 assertNull(mOpenNewTabLoadUrlParams.getReferrer()); |
| 102 } |
| 103 |
| 104 /** |
| 105 * Verifies that the referrer is stripped from username and password fields. |
| 106 * Bug: crbug.com/413216 |
| 107 * @MediumTest |
| 108 * @Feature({"Browser"}) |
| 109 */ |
| 110 @FlakyTest |
| 111 public void testOpenInNewTabSanitizeReferrer() |
| 112 throws InterruptedException, TimeoutException { |
| 113 String url = TestHttpServerClient.getUrl("chrome/test/data/android/conte
xt_menu_test.html", |
| 114 "user", "pass"); |
| 115 String expectedReferrer = |
| 116 TestHttpServerClient.getUrl("chrome/test/data/android/context_me
nu_test.html"); |
| 117 assertTrue(url.contains("pass")); // Sanity check. |
| 118 triggerContextMenuLoad(url, "testLink", R.id.contextmenu_open_in_new_tab
); |
| 119 |
| 120 assertNotNull(mOpenNewTabLoadUrlParams); |
| 121 assertEquals(expectedReferrer, mOpenNewTabLoadUrlParams.getReferrer().ge
tUrl()); |
| 122 } |
| 123 |
| 124 private void triggerContextMenuLoad(String url, String openerDomId, int menu
ItemId) |
| 125 throws InterruptedException, TimeoutException { |
| 126 loadUrl(url); |
| 127 assertWaitForPageScaleFactorMatch(0.5f); |
| 128 Tab tab = getActivity().getActivityTab(); |
| 129 ContextMenuUtils.selectContextMenuItem(this, tab, openerDomId, menuItemI
d); |
| 130 getInstrumentation().waitForIdleSync(); |
| 131 } |
| 132 |
| 133 @Override |
| 134 public void startMainActivity() throws InterruptedException { |
| 135 startMainActivityOnBlankPage(); |
| 136 } |
| 137 } |
| 138 |
OLD | NEW |