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

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: Address comments. 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
« no previous file with comments | « no previous file | chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/CustomTabActivityTestBase.java » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 2077 matching lines...) Expand 10 before | Expand all | Expand 10 after
2274 try { 2252 try {
2275 startCustomTabActivityWithIntent(CustomTabsTestUtils.createMinimalCu stomTabIntent( 2253 startCustomTabActivityWithIntent(CustomTabsTestUtils.createMinimalCu stomTabIntent(
2276 context, mTestPage)); 2254 context, mTestPage));
2277 } catch (InterruptedException e) { 2255 } catch (InterruptedException e) {
2278 fail(); 2256 fail();
2279 } 2257 }
2280 Tab tab = getActivity().getActivityTab(); 2258 Tab tab = getActivity().getActivityTab();
2281 assertEquals(mTestPage, tab.getUrl()); 2259 assertEquals(mTestPage, tab.getUrl());
2282 } 2260 }
2283 2261
2284 private CustomTabsConnection warmUpAndWait() {
2285 final Context context = getInstrumentation().getTargetContext().getAppli cationContext();
2286 CustomTabsConnection connection =
2287 CustomTabsTestUtils.setUpConnection((Application) context);
2288 final CallbackHelper startupCallbackHelper = new CallbackHelper();
2289 assertTrue(connection.warmup(0));
2290 ThreadUtils.runOnUiThread(new Runnable() {
2291 @Override
2292 public void run() {
2293 BrowserStartupController.get(LibraryProcessType.PROCESS_BROWSER)
2294 .addStartupCompletedObserver(new StartupCallback() {
2295 @Override
2296 public void onSuccess(boolean alreadyStarted) {
2297 startupCallbackHelper.notifyCalled();
2298 }
2299
2300 @Override
2301 public void onFailure() {
2302 fail();
2303 }
2304 });
2305 }
2306 });
2307
2308 try {
2309 startupCallbackHelper.waitForCallback(0);
2310 } catch (TimeoutException | InterruptedException e) {
2311 fail();
2312 }
2313 return connection;
2314 }
2315
2316 private ChromeActivity reparentAndVerifyTab() throws InterruptedException { 2262 private ChromeActivity reparentAndVerifyTab() throws InterruptedException {
2317 ActivityResult result = null; 2263 ActivityResult result = null;
2318 final ActivityMonitor monitor = getInstrumentation().addMonitor( 2264 final ActivityMonitor monitor = getInstrumentation().addMonitor(
2319 ChromeTabbedActivity.class.getName(), result, false); 2265 ChromeTabbedActivity.class.getName(), result, false);
2320 final Tab tabToBeReparented = mActivity.getActivityTab(); 2266 final Tab tabToBeReparented = mActivity.getActivityTab();
2321 final CallbackHelper tabHiddenHelper = new CallbackHelper(); 2267 final CallbackHelper tabHiddenHelper = new CallbackHelper();
2322 TabObserver observer = new EmptyTabObserver() { 2268 TabObserver observer = new EmptyTabObserver() {
2323 @Override 2269 @Override
2324 public void onHidden(Tab tab) { 2270 public void onHidden(Tab tab) {
2325 tabHiddenHelper.notifyCalled(); 2271 tabHiddenHelper.notifyCalled();
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after
2496 switch (speculationMode) { 2442 switch (speculationMode) {
2497 case CustomTabsConnection.SpeculationParams.PRERENDER: 2443 case CustomTabsConnection.SpeculationParams.PRERENDER:
2498 return "prerender"; 2444 return "prerender";
2499 case CustomTabsConnection.SpeculationParams.HIDDEN_TAB: 2445 case CustomTabsConnection.SpeculationParams.HIDDEN_TAB:
2500 return "hidden"; 2446 return "hidden";
2501 default: 2447 default:
2502 return "visible"; 2448 return "visible";
2503 } 2449 }
2504 } 2450 }
2505 } 2451 }
OLDNEW
« no previous file with comments | « no previous file | chrome/android/javatests/src/org/chromium/chrome/browser/customtabs/CustomTabActivityTestBase.java » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698