Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(476)

Side by Side Diff: chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/CustomTabActivityTest.java

Issue 2805763003: customtabs: Add a test for external app redirection. (Closed)
Patch Set: . Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 package org.chromium.chrome.browser.customtabs; 5 package org.chromium.chrome.browser.customtabs;
6 6
7 import static org.chromium.base.test.util.Restriction.RESTRICTION_TYPE_NON_LOW_E ND_DEVICE; 7 import static org.chromium.base.test.util.Restriction.RESTRICTION_TYPE_NON_LOW_E ND_DEVICE;
8 8
9 import android.app.Activity; 9 import android.app.Activity;
10 import android.app.Application; 10 import android.app.Application;
(...skipping 28 matching lines...) Expand all
39 import android.view.MenuItem; 39 import android.view.MenuItem;
40 import android.view.View; 40 import android.view.View;
41 import android.view.ViewGroup; 41 import android.view.ViewGroup;
42 import android.widget.EditText; 42 import android.widget.EditText;
43 import android.widget.ImageButton; 43 import android.widget.ImageButton;
44 44
45 import org.chromium.base.ActivityState; 45 import org.chromium.base.ActivityState;
46 import org.chromium.base.ApplicationStatus; 46 import org.chromium.base.ApplicationStatus;
47 import org.chromium.base.ApplicationStatus.ActivityStateListener; 47 import org.chromium.base.ApplicationStatus.ActivityStateListener;
48 import org.chromium.base.ObserverList.RewindableIterator; 48 import org.chromium.base.ObserverList.RewindableIterator;
49 import org.chromium.base.PathUtils;
50 import org.chromium.base.ThreadUtils; 49 import org.chromium.base.ThreadUtils;
51 import org.chromium.base.library_loader.LibraryLoader;
52 import org.chromium.base.library_loader.LibraryProcessType;
53 import org.chromium.base.test.util.CallbackHelper; 50 import org.chromium.base.test.util.CallbackHelper;
54 import org.chromium.base.test.util.CommandLineFlags; 51 import org.chromium.base.test.util.CommandLineFlags;
55 import org.chromium.base.test.util.DisabledTest; 52 import org.chromium.base.test.util.DisabledTest;
56 import org.chromium.base.test.util.Restriction; 53 import org.chromium.base.test.util.Restriction;
57 import org.chromium.base.test.util.RetryOnFailure; 54 import org.chromium.base.test.util.RetryOnFailure;
58 import org.chromium.chrome.R; 55 import org.chromium.chrome.R;
59 import org.chromium.chrome.browser.ChromeActivity; 56 import org.chromium.chrome.browser.ChromeActivity;
60 import org.chromium.chrome.browser.ChromeSwitches; 57 import org.chromium.chrome.browser.ChromeSwitches;
61 import org.chromium.chrome.browser.ChromeTabbedActivity; 58 import org.chromium.chrome.browser.ChromeTabbedActivity;
62 import org.chromium.chrome.browser.IntentHandler; 59 import org.chromium.chrome.browser.IntentHandler;
63 import org.chromium.chrome.browser.TabsOpenedFromExternalAppTest; 60 import org.chromium.chrome.browser.TabsOpenedFromExternalAppTest;
64 import org.chromium.chrome.browser.WarmupManager; 61 import org.chromium.chrome.browser.WarmupManager;
65 import org.chromium.chrome.browser.appmenu.AppMenuHandler; 62 import org.chromium.chrome.browser.appmenu.AppMenuHandler;
66 import org.chromium.chrome.browser.document.ChromeLauncherActivity; 63 import org.chromium.chrome.browser.document.ChromeLauncherActivity;
67 import org.chromium.chrome.browser.firstrun.FirstRunStatus;
68 import org.chromium.chrome.browser.metrics.PageLoadMetrics; 64 import org.chromium.chrome.browser.metrics.PageLoadMetrics;
69 import org.chromium.chrome.browser.prerender.ExternalPrerenderHandler; 65 import org.chromium.chrome.browser.prerender.ExternalPrerenderHandler;
70 import org.chromium.chrome.browser.profiles.Profile; 66 import org.chromium.chrome.browser.profiles.Profile;
71 import org.chromium.chrome.browser.tab.EmptyTabObserver; 67 import org.chromium.chrome.browser.tab.EmptyTabObserver;
72 import org.chromium.chrome.browser.tab.Tab; 68 import org.chromium.chrome.browser.tab.Tab;
73 import org.chromium.chrome.browser.tab.TabObserver; 69 import org.chromium.chrome.browser.tab.TabObserver;
74 import org.chromium.chrome.browser.tab.TabTestUtils; 70 import org.chromium.chrome.browser.tab.TabTestUtils;
75 import org.chromium.chrome.browser.tabmodel.EmptyTabModelObserver; 71 import org.chromium.chrome.browser.tabmodel.EmptyTabModelObserver;
76 import org.chromium.chrome.browser.tabmodel.TabModel.TabLaunchType; 72 import org.chromium.chrome.browser.tabmodel.TabModel.TabLaunchType;
77 import org.chromium.chrome.browser.tabmodel.TabModelSelector; 73 import org.chromium.chrome.browser.tabmodel.TabModelSelector;
78 import org.chromium.chrome.browser.toolbar.CustomTabToolbar; 74 import org.chromium.chrome.browser.toolbar.CustomTabToolbar;
79 import org.chromium.chrome.browser.util.ColorUtils; 75 import org.chromium.chrome.browser.util.ColorUtils;
80 import org.chromium.chrome.test.util.ChromeRestriction; 76 import org.chromium.chrome.test.util.ChromeRestriction;
81 import org.chromium.chrome.test.util.browser.LocationSettingsTestUtil; 77 import org.chromium.chrome.test.util.browser.LocationSettingsTestUtil;
82 import org.chromium.chrome.test.util.browser.contextmenu.ContextMenuUtils; 78 import org.chromium.chrome.test.util.browser.contextmenu.ContextMenuUtils;
83 import org.chromium.content.browser.BrowserStartupController;
84 import org.chromium.content.browser.BrowserStartupController.StartupCallback;
85 import org.chromium.content.browser.test.util.Criteria; 79 import org.chromium.content.browser.test.util.Criteria;
86 import org.chromium.content.browser.test.util.CriteriaHelper; 80 import org.chromium.content.browser.test.util.CriteriaHelper;
87 import org.chromium.content.browser.test.util.DOMUtils; 81 import org.chromium.content.browser.test.util.DOMUtils;
88 import org.chromium.content.browser.test.util.JavaScriptUtils; 82 import org.chromium.content.browser.test.util.JavaScriptUtils;
89 import org.chromium.content_public.browser.LoadUrlParams; 83 import org.chromium.content_public.browser.LoadUrlParams;
90 import org.chromium.content_public.browser.WebContentsObserver; 84 import org.chromium.content_public.browser.WebContentsObserver;
91 import org.chromium.net.test.EmbeddedTestServer; 85 import org.chromium.net.test.EmbeddedTestServer;
92 import org.chromium.net.test.util.TestWebServer; 86 import org.chromium.net.test.util.TestWebServer;
93 import org.chromium.ui.mojom.WindowOpenDisposition; 87 import org.chromium.ui.mojom.WindowOpenDisposition;
94 88
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
143 private CustomTabActivity mActivity; 137 private CustomTabActivity mActivity;
144 private String mTestPage; 138 private String mTestPage;
145 private String mTestPage2; 139 private String mTestPage2;
146 private EmbeddedTestServer mTestServer; 140 private EmbeddedTestServer mTestServer;
147 private TestWebServer mWebServer; 141 private TestWebServer mWebServer;
148 142
149 @Override 143 @Override
150 protected void setUp() throws Exception { 144 protected void setUp() throws Exception {
151 super.setUp(); 145 super.setUp();
152 146
153 ThreadUtils.runOnUiThreadBlocking(new Runnable() {
154 @Override
155 public void run() {
156 FirstRunStatus.setFirstRunFlowComplete(true);
157 }
158 });
159
160 Context appContext = getInstrumentation().getTargetContext().getApplicat ionContext(); 147 Context appContext = getInstrumentation().getTargetContext().getApplicat ionContext();
161 mTestServer = EmbeddedTestServer.createAndStartServer(appContext); 148 mTestServer = EmbeddedTestServer.createAndStartServer(appContext);
162 mTestPage = mTestServer.getURL(TEST_PAGE); 149 mTestPage = mTestServer.getURL(TEST_PAGE);
163 mTestPage2 = mTestServer.getURL(TEST_PAGE_2); 150 mTestPage2 = mTestServer.getURL(TEST_PAGE_2);
164 PathUtils.setPrivateDataDirectorySuffix(PRIVATE_DATA_DIRECTORY_SUFFIX);
165 LibraryLoader.get(LibraryProcessType.PROCESS_BROWSER).ensureInitialized( );
166 mWebServer = TestWebServer.start(); 151 mWebServer = TestWebServer.start();
167 152
168 CustomTabsConnection connection = 153 CustomTabsConnection connection =
169 CustomTabsConnection.getInstance((Application) appContext); 154 CustomTabsConnection.getInstance((Application) appContext);
170 connection.setForcePrerender(true); 155 connection.setForcePrerender(true);
171 } 156 }
172 157
173 @Override 158 @Override
174 protected void tearDown() throws Exception { 159 protected void tearDown() throws Exception {
175 Context appContext = getInstrumentation().getTargetContext().getApplicat ionContext(); 160 Context appContext = getInstrumentation().getTargetContext().getApplicat ionContext();
176 CustomTabsConnection connection = 161 CustomTabsConnection connection =
177 CustomTabsConnection.getInstance((Application) appContext); 162 CustomTabsConnection.getInstance((Application) appContext);
178 connection.setForcePrerender(false); 163 connection.setForcePrerender(false);
179 164
180 ThreadUtils.runOnUiThreadBlocking(new Runnable() {
181 @Override
182 public void run() {
183 FirstRunStatus.setFirstRunFlowComplete(false);
184 }
185 });
186
187 mTestServer.stopAndDestroyServer(); 165 mTestServer.stopAndDestroyServer();
188 166
189 // finish() is called on a non-UI thread by the testing harness. Must hi de the menu 167 // finish() is called on a non-UI thread by the testing harness. Must hi de the menu
190 // first, otherwise the UI is manipulated on a non-UI thread. 168 // first, otherwise the UI is manipulated on a non-UI thread.
191 ThreadUtils.runOnUiThreadBlocking(new Runnable() { 169 ThreadUtils.runOnUiThreadBlocking(new Runnable() {
192 @Override 170 @Override
193 public void run() { 171 public void run() {
194 if (mActivity == null) return; 172 if (mActivity == null) return;
195 AppMenuHandler handler = mActivity.getAppMenuHandler(); 173 AppMenuHandler handler = mActivity.getAppMenuHandler();
196 if (handler != null) handler.hideAppMenu(); 174 if (handler != null) handler.hideAppMenu();
(...skipping 1931 matching lines...) Expand 10 before | Expand all | Expand 10 after
2128 try { 2106 try {
2129 startCustomTabActivityWithIntent(CustomTabsTestUtils.createMinimalCu stomTabIntent( 2107 startCustomTabActivityWithIntent(CustomTabsTestUtils.createMinimalCu stomTabIntent(
2130 context, mTestPage)); 2108 context, mTestPage));
2131 } catch (InterruptedException e) { 2109 } catch (InterruptedException e) {
2132 fail(); 2110 fail();
2133 } 2111 }
2134 Tab tab = getActivity().getActivityTab(); 2112 Tab tab = getActivity().getActivityTab();
2135 assertEquals(mTestPage, tab.getUrl()); 2113 assertEquals(mTestPage, tab.getUrl());
2136 } 2114 }
2137 2115
2138 private CustomTabsConnection warmUpAndWait() {
2139 final Context context = getInstrumentation().getTargetContext().getAppli cationContext();
2140 CustomTabsConnection connection =
2141 CustomTabsTestUtils.setUpConnection((Application) context);
2142 final CallbackHelper startupCallbackHelper = new CallbackHelper();
2143 assertTrue(connection.warmup(0));
2144 ThreadUtils.runOnUiThread(new Runnable() {
2145 @Override
2146 public void run() {
2147 BrowserStartupController.get(LibraryProcessType.PROCESS_BROWSER)
2148 .addStartupCompletedObserver(new StartupCallback() {
2149 @Override
2150 public void onSuccess(boolean alreadyStarted) {
2151 startupCallbackHelper.notifyCalled();
2152 }
2153
2154 @Override
2155 public void onFailure() {
2156 fail();
2157 }
2158 });
2159 }
2160 });
2161
2162 try {
2163 startupCallbackHelper.waitForCallback(0);
2164 } catch (TimeoutException | InterruptedException e) {
2165 fail();
2166 }
2167 return connection;
2168 }
2169
2170 private ChromeActivity reparentAndVerifyTab() throws InterruptedException { 2116 private ChromeActivity reparentAndVerifyTab() throws InterruptedException {
2171 ActivityResult result = null; 2117 ActivityResult result = null;
2172 final ActivityMonitor monitor = getInstrumentation().addMonitor( 2118 final ActivityMonitor monitor = getInstrumentation().addMonitor(
2173 ChromeTabbedActivity.class.getName(), result, false); 2119 ChromeTabbedActivity.class.getName(), result, false);
2174 final Tab tabToBeReparented = mActivity.getActivityTab(); 2120 final Tab tabToBeReparented = mActivity.getActivityTab();
2175 final CallbackHelper tabHiddenHelper = new CallbackHelper(); 2121 final CallbackHelper tabHiddenHelper = new CallbackHelper();
2176 TabObserver observer = new EmptyTabObserver() { 2122 TabObserver observer = new EmptyTabObserver() {
2177 @Override 2123 @Override
2178 public void onHidden(Tab tab) { 2124 public void onHidden(Tab tab) {
2179 tabHiddenHelper.notifyCalled(); 2125 tabHiddenHelper.notifyCalled();
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after
2338 2284
2339 private static String getExpectedVisibilityForSpeculationMode(int speculatio nMode) { 2285 private static String getExpectedVisibilityForSpeculationMode(int speculatio nMode) {
2340 switch (speculationMode) { 2286 switch (speculationMode) {
2341 case CustomTabsConnection.SpeculationParams.PRERENDER: 2287 case CustomTabsConnection.SpeculationParams.PRERENDER:
2342 return "prerender"; 2288 return "prerender";
2343 default: 2289 default:
2344 return "visible"; 2290 return "visible";
2345 } 2291 }
2346 } 2292 }
2347 } 2293 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698