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

Side by Side Diff: chrome/android/javatests/src/org/chromium/chrome/browser/externalnav/UrlOverridingTest.java

Issue 2770193004: (reland) Use stricter checking in UrlOverridingTest (Closed)
Patch Set: fix merging, better error msg 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 | no next file » | 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.externalnav; 5 package org.chromium.chrome.browser.externalnav;
6 6
7 import android.app.Activity; 7 import android.app.Activity;
8 import android.app.Instrumentation; 8 import android.app.Instrumentation;
9 import android.app.Instrumentation.ActivityMonitor; 9 import android.app.Instrumentation.ActivityMonitor;
10 import android.content.Context; 10 import android.content.Context;
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
64 private static final String NAVIGATION_WITH_FALLBACK_URL_PARENT_FRAME_PAGE = 64 private static final String NAVIGATION_WITH_FALLBACK_URL_PARENT_FRAME_PAGE =
65 BASE_PATH + "navigation_with_fallback_url_parent_frame.html"; 65 BASE_PATH + "navigation_with_fallback_url_parent_frame.html";
66 private static final String FALLBACK_LANDING_PATH = BASE_PATH + "hello.html" ; 66 private static final String FALLBACK_LANDING_PATH = BASE_PATH + "hello.html" ;
67 private static final String OPEN_WINDOW_FROM_USER_GESTURE_PAGE = 67 private static final String OPEN_WINDOW_FROM_USER_GESTURE_PAGE =
68 BASE_PATH + "open_window_from_user_gesture.html"; 68 BASE_PATH + "open_window_from_user_gesture.html";
69 private static final String NAVIGATION_FROM_JAVA_REDIRECTION_PAGE = 69 private static final String NAVIGATION_FROM_JAVA_REDIRECTION_PAGE =
70 BASE_PATH + "navigation_from_java_redirection.html"; 70 BASE_PATH + "navigation_from_java_redirection.html";
71 71
72 private static class TestTabObserver extends EmptyTabObserver { 72 private static class TestTabObserver extends EmptyTabObserver {
73 private final CallbackHelper mFinishCallback; 73 private final CallbackHelper mFinishCallback;
74 private final CallbackHelper mPageFailCallback; 74 private final CallbackHelper mFailCallback;
75 private final CallbackHelper mLoadFailCallback;
76 75
77 TestTabObserver(final CallbackHelper finishCallback, final CallbackHelpe r pageFailCallback, 76 TestTabObserver(final CallbackHelper finishCallback, final CallbackHelpe r failCallback) {
78 final CallbackHelper loadFailCallback) {
79 mFinishCallback = finishCallback; 77 mFinishCallback = finishCallback;
80 mPageFailCallback = pageFailCallback; 78 mFailCallback = failCallback;
81 mLoadFailCallback = loadFailCallback;
82 } 79 }
83 80
84 @Override 81 @Override
85 public void onDidFinishNavigation(Tab tab, String url, boolean isInMainF rame, 82 public void onDidFinishNavigation(Tab tab, String url, boolean isInMainF rame,
86 boolean isErrorPage, boolean hasCommitted, boolean isSameDocumen t, 83 boolean isErrorPage, boolean hasCommitted, boolean isSameDocumen t,
87 boolean isFragmentNavigation, Integer pageTransition, int errorC ode, 84 boolean isFragmentNavigation, Integer pageTransition, int errorC ode,
88 int httpStatusCode) { 85 int httpStatusCode) {
89 if (errorCode != 0) { 86 if (errorCode == 0) return;
90 mLoadFailCallback.notifyCalled(); 87 mFailCallback.notifyCalled();
91 }
92 } 88 }
93 89
94 @Override 90 @Override
95 public void onPageLoadFinished(Tab tab) { 91 public void onPageLoadFinished(Tab tab) {
96 mFinishCallback.notifyCalled(); 92 mFinishCallback.notifyCalled();
97 } 93 }
98 94
99 @Override 95 @Override
100 public void onPageLoadFailed(Tab tab, int errorCode) {
101 mPageFailCallback.notifyCalled();
102 }
103
104 @Override
105 public void onDidFailLoad(Tab tab, boolean isMainFrame, int errorCode, S tring description,
106 String failingUrl) {
107 mLoadFailCallback.notifyCalled();
108 }
109
110 @Override
111 public void onDestroyed(Tab tab) { 96 public void onDestroyed(Tab tab) {
112 // A new tab is destroyed when loading is overridden while opening i t. 97 // A new tab is destroyed when loading is overridden while opening i t.
113 mPageFailCallback.notifyCalled(); 98 mFailCallback.notifyCalled();
114 } 99 }
115 } 100 }
116 101
117 private ActivityMonitor mActivityMonitor; 102 private ActivityMonitor mActivityMonitor;
118 private EmbeddedTestServer mTestServer; 103 private EmbeddedTestServer mTestServer;
119 104
120 public UrlOverridingTest() { 105 public UrlOverridingTest() {
121 super(ChromeActivity.class); 106 super(ChromeActivity.class);
122 } 107 }
123 108
(...skipping 16 matching lines...) Expand all
140 125
141 private void loadUrlAndWaitForIntentUrl(final String url, boolean needClick, 126 private void loadUrlAndWaitForIntentUrl(final String url, boolean needClick,
142 boolean shouldLaunchExternalIntent, boolean isMainFrame) throws Inte rruptedException { 127 boolean shouldLaunchExternalIntent, boolean isMainFrame) throws Inte rruptedException {
143 loadUrlAndWaitForIntentUrl(url, needClick, 0, shouldLaunchExternalIntent , url, isMainFrame); 128 loadUrlAndWaitForIntentUrl(url, needClick, 0, shouldLaunchExternalIntent , url, isMainFrame);
144 } 129 }
145 130
146 private void loadUrlAndWaitForIntentUrl(final String url, boolean needClick, 131 private void loadUrlAndWaitForIntentUrl(final String url, boolean needClick,
147 int expectedNewTabCount, final boolean shouldLaunchExternalIntent, 132 int expectedNewTabCount, final boolean shouldLaunchExternalIntent,
148 final String expectedFinalUrl, boolean isMainFrame) throws Interrupt edException { 133 final String expectedFinalUrl, boolean isMainFrame) throws Interrupt edException {
149 final CallbackHelper finishCallback = new CallbackHelper(); 134 final CallbackHelper finishCallback = new CallbackHelper();
150 final CallbackHelper pageFailCallback = new CallbackHelper(); 135 final CallbackHelper failCallback = new CallbackHelper();
151 final CallbackHelper loadFailCallback = new CallbackHelper();
152 final CallbackHelper newTabCallback = new CallbackHelper(); 136 final CallbackHelper newTabCallback = new CallbackHelper();
153 137
154 final Tab tab = getActivity().getActivityTab(); 138 final Tab tab = getActivity().getActivityTab();
155 final Tab[] latestTabHolder = new Tab[1]; 139 final Tab[] latestTabHolder = new Tab[1];
156 latestTabHolder[0] = tab; 140 latestTabHolder[0] = tab;
157 tab.addObserver(new TestTabObserver(finishCallback, pageFailCallback, lo adFailCallback)); 141 tab.addObserver(new TestTabObserver(finishCallback, failCallback));
158 if (expectedNewTabCount > 0) { 142 if (expectedNewTabCount > 0) {
159 getActivity().getTabModelSelector().addObserver(new EmptyTabModelSel ectorObserver() { 143 getActivity().getTabModelSelector().addObserver(new EmptyTabModelSel ectorObserver() {
160 @Override 144 @Override
161 public void onNewTabCreated(Tab newTab) { 145 public void onNewTabCreated(Tab newTab) {
162 newTabCallback.notifyCalled(); 146 newTabCallback.notifyCalled();
163 newTab.addObserver(new TestTabObserver( 147 newTab.addObserver(new TestTabObserver(finishCallback, failC allback));
164 finishCallback, pageFailCallback, loadFailCallback)) ;
165 latestTabHolder[0] = newTab; 148 latestTabHolder[0] = newTab;
166 } 149 }
167 }); 150 });
168 } 151 }
169 152
170 getActivity().onUserInteraction(); 153 getActivity().onUserInteraction();
171 getInstrumentation().runOnMainSync(new Runnable() { 154 getInstrumentation().runOnMainSync(new Runnable() {
172 @Override 155 @Override
173 public void run() { 156 public void run() {
174 tab.loadUrl(new LoadUrlParams(url, PageTransition.LINK)); 157 tab.loadUrl(new LoadUrlParams(url, PageTransition.LINK));
175 } 158 }
176 }); 159 });
177 160
178 if (finishCallback.getCallCount() == 0) { 161 if (finishCallback.getCallCount() == 0) {
179 try { 162 try {
180 finishCallback.waitForCallback(0, 1, 20, TimeUnit.SECONDS); 163 finishCallback.waitForCallback(0, 1, 20, TimeUnit.SECONDS);
181 } catch (TimeoutException ex) { 164 } catch (TimeoutException ex) {
182 fail(); 165 fail();
183 return; 166 return;
184 } 167 }
185 } 168 }
186 169
187 SystemClock.sleep(1); 170 SystemClock.sleep(1);
188 getActivity().onUserInteraction(); 171 getActivity().onUserInteraction();
189 if (needClick) { 172 if (needClick) {
190 singleClickView(tab.getView()); 173 singleClickView(tab.getView());
191 } 174 }
192 175
193 CallbackHelper helper = isMainFrame ? pageFailCallback : loadFailCallbac k; 176 if (failCallback.getCallCount() == 0) {
194 if (helper.getCallCount() == 0) {
195 try { 177 try {
196 helper.waitForCallback(0, 1, 20, TimeUnit.SECONDS); 178 failCallback.waitForCallback(0, 1, 20, TimeUnit.SECONDS);
197 } catch (TimeoutException ex) { 179 } catch (TimeoutException ex) {
198 fail(); 180 fail("Haven't received navigation failure of intents.");
199 return; 181 return;
200 } 182 }
201 } 183 }
202 184
185 boolean hasFallbackUrl =
186 expectedFinalUrl != null && !TextUtils.equals(url, expectedFinal Url);
187
188 if (hasFallbackUrl) {
189 if (finishCallback.getCallCount() == 1) {
190 try {
191 finishCallback.waitForCallback(1, 1, 20, TimeUnit.SECONDS);
192 } catch (TimeoutException ex) {
193 fail("Fallback URL is not loaded");
194 return;
195 }
196 }
197 }
198
203 assertEquals(expectedNewTabCount, newTabCallback.getCallCount()); 199 assertEquals(expectedNewTabCount, newTabCallback.getCallCount());
204 // For sub frames, the |loadFailCallback| run through different threads 200 // For sub frames, the |loadFailCallback| run through different threads
205 // from the ExternalNavigationHandler. As a result, there is no guarante e 201 // from the ExternalNavigationHandler. As a result, there is no guarante e
206 // when url override result would come. 202 // when url override result would come.
207 CriteriaHelper.pollUiThread( 203 CriteriaHelper.pollUiThread(
208 new Criteria() { 204 new Criteria() {
209 @Override 205 @Override
210 public boolean isSatisfied() { 206 public boolean isSatisfied() {
211 // Note that we do not distinguish between OVERRIDE_WITH _CLOBBERING_TAB 207 // Note that we do not distinguish between OVERRIDE_WITH _CLOBBERING_TAB
212 // and NO_OVERRIDE since tab clobbering will eventually lead to NO_OVERRIDE. 208 // and NO_OVERRIDE since tab clobbering will eventually lead to NO_OVERRIDE.
213 // in the tab. Rather, we check the final URL to disting uish between 209 // in the tab. Rather, we check the final URL to disting uish between
214 // fallback and normal navigation. See crbug.com/487364 for more. 210 // fallback and normal navigation. See crbug.com/487364 for more.
215 Tab tab = latestTabHolder[0]; 211 Tab tab = latestTabHolder[0];
216 if (shouldLaunchExternalIntent 212 if (shouldLaunchExternalIntent
217 != (OverrideUrlLoadingResult.OVERRIDE_WITH_EXTER NAL_INTENT 213 != (OverrideUrlLoadingResult.OVERRIDE_WITH_EXTER NAL_INTENT
218 == tab.getInterceptNavigationDelegate() 214 == tab.getInterceptNavigationDelegate()
219 .getLastOverrideUrlLoadingResult ForTests())) { 215 .getLastOverrideUrlLoadingResult ForTests())) {
220 return false; 216 return false;
221 } 217 }
222 updateFailureReason("Expected: " + expectedFinalUrl + " actual: " 218 updateFailureReason("Expected: " + expectedFinalUrl + " actual: "
223 + tab.getUrl()); 219 + tab.getUrl());
224 return expectedFinalUrl == null 220 return expectedFinalUrl == null
225 || TextUtils.equals(expectedFinalUrl, tab.getUrl ()); 221 || TextUtils.equals(expectedFinalUrl, tab.getUrl ());
226 } 222 }
227 }); 223 });
224
225 CriteriaHelper.pollUiThread(
226 Criteria.equals(shouldLaunchExternalIntent ? 1 : 0, new Callable <Integer>() {
227 @Override
228 public Integer call() {
229 return mActivityMonitor.getHits();
230 }
231 }));
232 assertEquals(1 + (hasFallbackUrl ? 1 : 0), finishCallback.getCallCount() );
233 assertEquals(1, failCallback.getCallCount());
228 } 234 }
229 235
230 @SmallTest 236 @SmallTest
231 @RetryOnFailure 237 @RetryOnFailure
232 public void testNavigationFromTimer() throws InterruptedException { 238 public void testNavigationFromTimer() throws InterruptedException {
233 loadUrlAndWaitForIntentUrl( 239 loadUrlAndWaitForIntentUrl(
234 mTestServer.getURL(NAVIGATION_FROM_TIMEOUT_PAGE), false, false, true); 240 mTestServer.getURL(NAVIGATION_FROM_TIMEOUT_PAGE), false, false, true);
235 } 241 }
236 242
237 @SmallTest 243 @SmallTest
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
349 return mActivityMonitor.getHits(); 355 return mActivityMonitor.getHits();
350 } 356 }
351 })); 357 }));
352 } 358 }
353 359
354 @Override 360 @Override
355 public void startMainActivity() throws InterruptedException { 361 public void startMainActivity() throws InterruptedException {
356 startMainActivityOnBlankPage(); 362 startMainActivityOnBlankPage();
357 } 363 }
358 } 364 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698