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

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

Issue 2853423003: Revert of Convert ChromeActivityTestCaseBase direct children to JUnit4 (Closed)
Patch Set: Created 3 years, 7 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; 5 package org.chromium.chrome.browser;
6 6
7 import android.content.Context; 7 import android.content.Context;
8 import android.support.test.InstrumentationRegistry;
9 import android.support.test.filters.LargeTest; 8 import android.support.test.filters.LargeTest;
10 import android.test.MoreAsserts; 9 import android.test.MoreAsserts;
11 import android.util.SparseArray; 10 import android.util.SparseArray;
12 import android.util.SparseBooleanArray; 11 import android.util.SparseBooleanArray;
13 12
14 import org.junit.After;
15 import org.junit.Assert;
16 import org.junit.Before;
17 import org.junit.Rule;
18 import org.junit.Test;
19 import org.junit.runner.RunWith;
20
21 import org.chromium.base.ThreadUtils; 13 import org.chromium.base.ThreadUtils;
22 import org.chromium.base.test.util.CommandLineFlags;
23 import org.chromium.base.test.util.DisabledTest; 14 import org.chromium.base.test.util.DisabledTest;
24 import org.chromium.base.test.util.Feature; 15 import org.chromium.base.test.util.Feature;
25 import org.chromium.base.test.util.Restriction; 16 import org.chromium.base.test.util.Restriction;
26 import org.chromium.base.test.util.RetryOnFailure; 17 import org.chromium.base.test.util.RetryOnFailure;
27 import org.chromium.chrome.browser.compositor.layouts.Layout; 18 import org.chromium.chrome.browser.compositor.layouts.Layout;
28 import org.chromium.chrome.browser.tab.Tab; 19 import org.chromium.chrome.browser.tab.Tab;
29 import org.chromium.chrome.browser.tabmodel.TabCreatorManager.TabCreator; 20 import org.chromium.chrome.browser.tabmodel.TabCreatorManager.TabCreator;
30 import org.chromium.chrome.browser.tabmodel.TabModel.TabLaunchType; 21 import org.chromium.chrome.browser.tabmodel.TabModel.TabLaunchType;
31 import org.chromium.chrome.browser.tabmodel.TabModel.TabSelectionType; 22 import org.chromium.chrome.browser.tabmodel.TabModel.TabSelectionType;
32 import org.chromium.chrome.browser.tabmodel.TabModelUtils; 23 import org.chromium.chrome.browser.tabmodel.TabModelUtils;
33 import org.chromium.chrome.test.ChromeActivityTestRule; 24 import org.chromium.chrome.test.ChromeActivityTestCaseBase;
34 import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
35 import org.chromium.chrome.test.util.ChromeRestriction; 25 import org.chromium.chrome.test.util.ChromeRestriction;
36 import org.chromium.chrome.test.util.ChromeTabUtils; 26 import org.chromium.chrome.test.util.ChromeTabUtils;
37 import org.chromium.chrome.test.util.PrerenderTestHelper; 27 import org.chromium.chrome.test.util.PrerenderTestHelper;
38 import org.chromium.content.browser.BindingManager; 28 import org.chromium.content.browser.BindingManager;
39 import org.chromium.content.browser.ChildProcessLauncher; 29 import org.chromium.content.browser.ChildProcessLauncher;
40 import org.chromium.content.browser.ManagedChildProcessConnection; 30 import org.chromium.content.browser.ManagedChildProcessConnection;
41 import org.chromium.content.browser.test.ChildProcessAllocatorSettings; 31 import org.chromium.content.browser.test.ChildProcessAllocatorSettings;
42 import org.chromium.content.browser.test.util.Criteria; 32 import org.chromium.content.browser.test.util.Criteria;
43 import org.chromium.content.browser.test.util.CriteriaHelper; 33 import org.chromium.content.browser.test.util.CriteriaHelper;
44 import org.chromium.content.browser.test.util.TouchCommon;
45 import org.chromium.content_public.browser.LoadUrlParams; 34 import org.chromium.content_public.browser.LoadUrlParams;
46 import org.chromium.net.test.EmbeddedTestServer; 35 import org.chromium.net.test.EmbeddedTestServer;
47 import org.chromium.ui.base.DeviceFormFactor; 36 import org.chromium.ui.base.DeviceFormFactor;
48 import org.chromium.ui.base.PageTransition; 37 import org.chromium.ui.base.PageTransition;
49 38
50 import java.util.concurrent.Callable; 39 import java.util.concurrent.Callable;
51 40
52 /** 41 /**
53 * Integration tests for the BindingManager API. This test plants a mock Binding Manager 42 * Integration tests for the BindingManager API. This test plants a mock Binding Manager
54 * implementation and verifies that the signals it relies on are correctly deliv ered. 43 * implementation and verifies that the signals it relies on are correctly deliv ered.
55 */ 44 */
56 @RunWith(ChromeJUnit4ClassRunner.class)
57 @RetryOnFailure 45 @RetryOnFailure
58 @CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE, 46 public class BindingManagerIntegrationTest extends ChromeActivityTestCaseBase<Ch romeActivity> {
59 ChromeActivityTestRule.DISABLE_NETWORK_PREDICTION_FLAG})
60 public class BindingManagerIntegrationTest {
61 @Rule
62 public ChromeActivityTestRule<ChromeActivity> mActivityTestRule =
63 new ChromeActivityTestRule<>(ChromeActivity.class);
64 47
65 private static class MockBindingManager implements BindingManager { 48 private static class MockBindingManager implements BindingManager {
66 // Maps pid to the last received visibility state of the renderer. 49 // Maps pid to the last received visibility state of the renderer.
67 private final SparseBooleanArray mProcessInForegroundMap = new SparseBoo leanArray(); 50 private final SparseBooleanArray mProcessInForegroundMap = new SparseBoo leanArray();
68 // Maps pid to a string recording calls to setInForeground() and visibil ityDetermined(). 51 // Maps pid to a string recording calls to setInForeground() and visibil ityDetermined().
69 private final SparseArray<String> mVisibilityCallsMap = new SparseArray< String>(); 52 private final SparseArray<String> mVisibilityCallsMap = new SparseArray< String>();
70 private boolean mIsReleaseAllModerateBindingsCalled; 53 private boolean mIsReleaseAllModerateBindingsCalled;
71 54
72 void assertIsInForeground(final int pid) { 55 void assertIsInForeground(final int pid) {
73 CriteriaHelper.pollInstrumentationThread(new Criteria() { 56 CriteriaHelper.pollInstrumentationThread(new Criteria() {
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
165 148
166 private static final String FILE_PATH = "/chrome/test/data/android/test.html "; 149 private static final String FILE_PATH = "/chrome/test/data/android/test.html ";
167 private static final String FILE_PATH2 = "/chrome/test/data/android/simple.h tml"; 150 private static final String FILE_PATH2 = "/chrome/test/data/android/simple.h tml";
168 // about:version will always be handled by a different renderer than a local file. 151 // about:version will always be handled by a different renderer than a local file.
169 private static final String ABOUT_VERSION_PATH = "chrome://version/"; 152 private static final String ABOUT_VERSION_PATH = "chrome://version/";
170 private static final String SHARED_RENDERER_PAGE_PATH = 153 private static final String SHARED_RENDERER_PAGE_PATH =
171 "/chrome/test/data/android/bindingmanager/shared_renderer1.html"; 154 "/chrome/test/data/android/bindingmanager/shared_renderer1.html";
172 private static final String SHARED_RENDERER_PAGE2_PATH = 155 private static final String SHARED_RENDERER_PAGE2_PATH =
173 "/chrome/test/data/android/bindingmanager/shared_renderer2.html"; 156 "/chrome/test/data/android/bindingmanager/shared_renderer2.html";
174 157
158 public BindingManagerIntegrationTest() {
159 super(ChromeActivity.class);
160 }
161
175 /** 162 /**
176 * Verifies that the .setProcessInForeground() signal is called correctly as the tabs are 163 * Verifies that the .setProcessInForeground() signal is called correctly as the tabs are
177 * created and switched. 164 * created and switched.
178 */ 165 */
179 @Test
180 @LargeTest 166 @LargeTest
181 @Feature({"ProcessManagement"}) 167 @Feature({"ProcessManagement"})
182 public void testTabSwitching() throws InterruptedException { 168 public void testTabSwitching() throws InterruptedException {
183 // Create two tabs and wait until they are loaded, so that their rendere rs are around. 169 // Create two tabs and wait until they are loaded, so that their rendere rs are around.
184 final Tab[] tabs = new Tab[2]; 170 final Tab[] tabs = new Tab[2];
185 InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable( ) { 171 getInstrumentation().runOnMainSync(new Runnable() {
186 @Override 172 @Override
187 public void run() { 173 public void run() {
188 // Foreground tab. 174 // Foreground tab.
189 TabCreator tabCreator = mActivityTestRule.getActivity().getCurre ntTabCreator(); 175 TabCreator tabCreator = getActivity().getCurrentTabCreator();
190 tabs[0] = tabCreator.createNewTab( 176 tabs[0] = tabCreator.createNewTab(
191 new LoadUrlParams(mTestServer.getURL(FILE_PATH)), 177 new LoadUrlParams(mTestServer.getURL(FILE_PATH)),
192 TabLaunchType.FROM_CHROME_UI, null); 178 TabLaunchType.FROM_CHROME_UI, null);
193 // Background tab. 179 // Background tab.
194 tabs[1] = tabCreator.createNewTab( 180 tabs[1] = tabCreator.createNewTab(
195 new LoadUrlParams(mTestServer.getURL(FILE_PATH)), 181 new LoadUrlParams(mTestServer.getURL(FILE_PATH)),
196 TabLaunchType.FROM_LONGPRESS_BACKGROUND, null); 182 TabLaunchType.FROM_LONGPRESS_BACKGROUND, null);
197 // On Svelte devices the background tab would not be loaded auto matically, so 183 // On Svelte devices the background tab would not be loaded auto matically, so
198 // trigger the load manually. 184 // trigger the load manually.
199 tabs[1].show(TabSelectionType.FROM_USER); 185 tabs[1].show(TabSelectionType.FROM_USER);
200 tabs[1].hide(); 186 tabs[1].hide();
201 } 187 }
202 }); 188 });
203 ChromeTabUtils.waitForTabPageLoaded(tabs[0], mTestServer.getURL(FILE_PAT H)); 189 ChromeTabUtils.waitForTabPageLoaded(tabs[0], mTestServer.getURL(FILE_PAT H));
204 ChromeTabUtils.waitForTabPageLoaded(tabs[1], mTestServer.getURL(FILE_PAT H)); 190 ChromeTabUtils.waitForTabPageLoaded(tabs[1], mTestServer.getURL(FILE_PAT H));
205 191
206 // Wait for the new tab animations on phones to finish. 192 // Wait for the new tab animations on phones to finish.
207 if (!DeviceFormFactor.isTablet(mActivityTestRule.getActivity())) { 193 if (!DeviceFormFactor.isTablet(getActivity())) {
208 final ChromeActivity activity = mActivityTestRule.getActivity(); 194 final ChromeActivity activity = getActivity();
209 CriteriaHelper.pollUiThread(new Criteria("Did not finish animation") { 195 CriteriaHelper.pollUiThread(new Criteria("Did not finish animation") {
210 @Override 196 @Override
211 public boolean isSatisfied() { 197 public boolean isSatisfied() {
212 Layout layout = activity.getCompositorViewHolder() 198 Layout layout = activity.getCompositorViewHolder()
213 .getLayoutManager().getActiveLayout(); 199 .getLayoutManager().getActiveLayout();
214 return !layout.isLayoutAnimating(); 200 return !layout.isLayoutAnimating();
215 } 201 }
216 }); 202 });
217 } 203 }
218 InstrumentationRegistry.getInstrumentation().waitForIdleSync(); 204 getInstrumentation().waitForIdleSync();
219 205
220 InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable( ) { 206 getInstrumentation().runOnMainSync(new Runnable() {
221 @Override 207 @Override
222 public void run() { 208 public void run() {
223 // Make sure that the renderers were spawned. 209 // Make sure that the renderers were spawned.
224 Assert.assertTrue(tabs[0].getContentViewCore().getCurrentRenderP rocessId() > 0); 210 assertTrue(tabs[0].getContentViewCore().getCurrentRenderProcessI d() > 0);
225 Assert.assertTrue(tabs[1].getContentViewCore().getCurrentRenderP rocessId() > 0); 211 assertTrue(tabs[1].getContentViewCore().getCurrentRenderProcessI d() > 0);
226 212
227 // Verify that the renderer of the foreground tab was signalled as visible. 213 // Verify that the renderer of the foreground tab was signalled as visible.
228 mBindingManager.assertIsInForeground( 214 mBindingManager.assertIsInForeground(
229 tabs[0].getContentViewCore().getCurrentRenderProcessId() ); 215 tabs[0].getContentViewCore().getCurrentRenderProcessId() );
230 // Verify that the renderer of the tab loaded in background was signalled as not 216 // Verify that the renderer of the tab loaded in background was signalled as not
231 // visible. 217 // visible.
232 mBindingManager.assertIsInBackground( 218 mBindingManager.assertIsInBackground(
233 tabs[1].getContentViewCore().getCurrentRenderProcessId() ); 219 tabs[1].getContentViewCore().getCurrentRenderProcessId() );
234 220
235 // Select tabs[1] and verify that the renderer visibility was fl ipped. 221 // Select tabs[1] and verify that the renderer visibility was fl ipped.
236 TabModelUtils.setIndex( 222 TabModelUtils.setIndex(getActivity().getCurrentTabModel(), index Of(tabs[1]));
237 mActivityTestRule.getActivity().getCurrentTabModel(), in dexOf(tabs[1]));
238 mBindingManager.assertIsInBackground( 223 mBindingManager.assertIsInBackground(
239 tabs[0].getContentViewCore().getCurrentRenderProcessId() ); 224 tabs[0].getContentViewCore().getCurrentRenderProcessId() );
240 mBindingManager.assertIsInForeground( 225 mBindingManager.assertIsInForeground(
241 tabs[1].getContentViewCore().getCurrentRenderProcessId() ); 226 tabs[1].getContentViewCore().getCurrentRenderProcessId() );
242 } 227 }
243 }); 228 });
244 } 229 }
245 230
246 /** 231 /**
247 * Verifies that the .setProcessInForeground() signal is called correctly wh en a tab that 232 * Verifies that the .setProcessInForeground() signal is called correctly wh en a tab that
248 * crashed in background is restored in foreground. This is a regression tes t for 233 * crashed in background is restored in foreground. This is a regression tes t for
249 * http://crbug.com/399521. 234 * http://crbug.com/399521.
250 */ 235 */
251 @Test
252 @DisabledTest(message = "crbug.com/543153") 236 @DisabledTest(message = "crbug.com/543153")
253 @LargeTest 237 @LargeTest
254 @Feature({"ProcessManagement"}) 238 @Feature({"ProcessManagement"})
255 public void testCrashInBackground() throws InterruptedException { 239 public void testCrashInBackground() throws InterruptedException {
256 // Create two tabs and wait until they are loaded, so that their rendere rs are around. 240 // Create two tabs and wait until they are loaded, so that their rendere rs are around.
257 final Tab[] tabs = new Tab[2]; 241 final Tab[] tabs = new Tab[2];
258 InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable( ) { 242 getInstrumentation().runOnMainSync(new Runnable() {
259 @Override 243 @Override
260 public void run() { 244 public void run() {
261 // Foreground tab. 245 // Foreground tab.
262 TabCreator tabCreator = mActivityTestRule.getActivity().getCurre ntTabCreator(); 246 TabCreator tabCreator = getActivity().getCurrentTabCreator();
263 tabs[0] = tabCreator.createNewTab( 247 tabs[0] = tabCreator.createNewTab(
264 new LoadUrlParams(mTestServer.getURL(FILE_PATH)), 248 new LoadUrlParams(mTestServer.getURL(FILE_PATH)),
265 TabLaunchType.FROM_CHROME_UI, null); 249 TabLaunchType.FROM_CHROME_UI, null);
266 // Background tab. 250 // Background tab.
267 tabs[1] = tabCreator.createNewTab( 251 tabs[1] = tabCreator.createNewTab(
268 new LoadUrlParams(mTestServer.getURL(FILE_PATH)), 252 new LoadUrlParams(mTestServer.getURL(FILE_PATH)),
269 TabLaunchType.FROM_LONGPRESS_BACKGROUND, null); 253 TabLaunchType.FROM_LONGPRESS_BACKGROUND, null);
270 // On Svelte devices the background tab would not be loaded auto matically, so 254 // On Svelte devices the background tab would not be loaded auto matically, so
271 // trigger the load manually. 255 // trigger the load manually.
272 tabs[1].show(TabSelectionType.FROM_USER); 256 tabs[1].show(TabSelectionType.FROM_USER);
273 tabs[1].hide(); 257 tabs[1].hide();
274 } 258 }
275 }); 259 });
276 ChromeTabUtils.waitForTabPageLoaded(tabs[0], mTestServer.getURL(FILE_PAT H)); 260 ChromeTabUtils.waitForTabPageLoaded(tabs[0], mTestServer.getURL(FILE_PAT H));
277 ChromeTabUtils.waitForTabPageLoaded(tabs[1], mTestServer.getURL(FILE_PAT H)); 261 ChromeTabUtils.waitForTabPageLoaded(tabs[1], mTestServer.getURL(FILE_PAT H));
278 262
279 // Wait for the new tab animations on phones to finish. 263 // Wait for the new tab animations on phones to finish.
280 if (!DeviceFormFactor.isTablet(mActivityTestRule.getActivity())) { 264 if (!DeviceFormFactor.isTablet(getActivity())) {
281 final ChromeActivity activity = mActivityTestRule.getActivity(); 265 final ChromeActivity activity = getActivity();
282 CriteriaHelper.pollUiThread(new Criteria("Did not finish animation") { 266 CriteriaHelper.pollUiThread(new Criteria("Did not finish animation") {
283 @Override 267 @Override
284 public boolean isSatisfied() { 268 public boolean isSatisfied() {
285 Layout layout = activity.getCompositorViewHolder() 269 Layout layout = activity.getCompositorViewHolder()
286 .getLayoutManager().getActiveLayout(); 270 .getLayoutManager().getActiveLayout();
287 return !layout.isLayoutAnimating(); 271 return !layout.isLayoutAnimating();
288 } 272 }
289 }); 273 });
290 } 274 }
291 InstrumentationRegistry.getInstrumentation().waitForIdleSync(); 275 getInstrumentation().waitForIdleSync();
292 276
293 InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable( ) { 277 getInstrumentation().runOnMainSync(new Runnable() {
294 @Override 278 @Override
295 public void run() { 279 public void run() {
296 // Make sure that the renderers were spawned. 280 // Make sure that the renderers were spawned.
297 Assert.assertTrue(tabs[0].getContentViewCore().getCurrentRenderP rocessId() > 0); 281 assertTrue(tabs[0].getContentViewCore().getCurrentRenderProcessI d() > 0);
298 Assert.assertTrue(tabs[1].getContentViewCore().getCurrentRenderP rocessId() > 0); 282 assertTrue(tabs[1].getContentViewCore().getCurrentRenderProcessI d() > 0);
299 283
300 // Verify that the renderer of the foreground tab was signalled as visible. 284 // Verify that the renderer of the foreground tab was signalled as visible.
301 mBindingManager.assertIsInForeground( 285 mBindingManager.assertIsInForeground(
302 tabs[0].getContentViewCore().getCurrentRenderProcessId() ); 286 tabs[0].getContentViewCore().getCurrentRenderProcessId() );
303 // Verify that the renderer of the tab loaded in background was signalled as not 287 // Verify that the renderer of the tab loaded in background was signalled as not
304 // visible. 288 // visible.
305 mBindingManager.assertIsInBackground( 289 mBindingManager.assertIsInBackground(
306 tabs[1].getContentViewCore().getCurrentRenderProcessId() ); 290 tabs[1].getContentViewCore().getCurrentRenderProcessId() );
307 } 291 }
308 }); 292 });
309 293
310 // Kill the renderer and wait for the crash to be noted by the browser p rocess. 294 // Kill the renderer and wait for the crash to be noted by the browser p rocess.
311 Assert.assertTrue(ChildProcessLauncher.crashProcessForTesting( 295 assertTrue(ChildProcessLauncher.crashProcessForTesting(
312 tabs[1].getContentViewCore().getCurrentRenderProcessId())); 296 tabs[1].getContentViewCore().getCurrentRenderProcessId()));
313 297
314 CriteriaHelper.pollInstrumentationThread( 298 CriteriaHelper.pollInstrumentationThread(
315 new Criteria("Renderer crash wasn't noticed by the browser.") { 299 new Criteria("Renderer crash wasn't noticed by the browser.") {
316 @Override 300 @Override
317 public boolean isSatisfied() { 301 public boolean isSatisfied() {
318 return tabs[1].getContentViewCore().getCurrentRenderProc essId() == 0; 302 return tabs[1].getContentViewCore().getCurrentRenderProc essId() == 0;
319 } 303 }
320 }); 304 });
321 305
322 // Switch to the tab that crashed in background. 306 // Switch to the tab that crashed in background.
323 InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable( ) { 307 getInstrumentation().runOnMainSync(new Runnable() {
324 @Override 308 @Override
325 public void run() { 309 public void run() {
326 TabModelUtils.setIndex( 310 TabModelUtils.setIndex(getActivity().getCurrentTabModel(), index Of(tabs[1]));
327 mActivityTestRule.getActivity().getCurrentTabModel(), in dexOf(tabs[1]));
328 } 311 }
329 }); 312 });
330 313
331 // Wait until the process is spawned and its visibility is determined. 314 // Wait until the process is spawned and its visibility is determined.
332 CriteriaHelper.pollInstrumentationThread( 315 CriteriaHelper.pollInstrumentationThread(
333 new Criteria("Process for the crashed tab was not respawned.") { 316 new Criteria("Process for the crashed tab was not respawned.") {
334 @Override 317 @Override
335 public boolean isSatisfied() { 318 public boolean isSatisfied() {
336 return tabs[1].getContentViewCore().getCurrentRenderProc essId() != 0; 319 return tabs[1].getContentViewCore().getCurrentRenderProc essId() != 0;
337 } 320 }
338 }); 321 });
339 322
340 mBindingManager.assertSetInForegroundWasCalled( 323 mBindingManager.assertSetInForegroundWasCalled(
341 "isInForeground() was not called for the process.", 324 "isInForeground() was not called for the process.",
342 tabs[1].getContentViewCore().getCurrentRenderProcessId()); 325 tabs[1].getContentViewCore().getCurrentRenderProcessId());
343 326
344 InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable( ) { 327 getInstrumentation().runOnMainSync(new Runnable() {
345 @Override 328 @Override
346 public void run() { 329 public void run() {
347 // Verify the visibility of the renderers. 330 // Verify the visibility of the renderers.
348 mBindingManager.assertIsInBackground( 331 mBindingManager.assertIsInBackground(
349 tabs[0].getContentViewCore().getCurrentRenderProcessId() ); 332 tabs[0].getContentViewCore().getCurrentRenderProcessId() );
350 mBindingManager.assertIsInForeground( 333 mBindingManager.assertIsInForeground(
351 tabs[1].getContentViewCore().getCurrentRenderProcessId() ); 334 tabs[1].getContentViewCore().getCurrentRenderProcessId() );
352 } 335 }
353 }); 336 });
354 } 337 }
355 338
356 /** 339 /**
357 * Verifies that a renderer that crashes in foreground has the correct visib ility when 340 * Verifies that a renderer that crashes in foreground has the correct visib ility when
358 * recreated. 341 * recreated.
359 */ 342 */
360 @Test
361 @LargeTest 343 @LargeTest
362 @Feature({"ProcessManagement"}) 344 @Feature({"ProcessManagement"})
363 public void testCrashInForeground() throws InterruptedException { 345 public void testCrashInForeground() throws InterruptedException {
364 // Create a tab in foreground and wait until it is loaded. 346 // Create a tab in foreground and wait until it is loaded.
365 final String testUrl = mTestServer.getURL(FILE_PATH); 347 final String testUrl = mTestServer.getURL(FILE_PATH);
366 final Tab tab = ThreadUtils.runOnUiThreadBlockingNoException( 348 final Tab tab = ThreadUtils.runOnUiThreadBlockingNoException(
367 new Callable<Tab>() { 349 new Callable<Tab>() {
368 @Override 350 @Override
369 public Tab call() throws Exception { 351 public Tab call() throws Exception {
370 TabCreator tabCreator = 352 TabCreator tabCreator = getActivity().getCurrentTabCreat or();
371 mActivityTestRule.getActivity().getCurrentTabCre ator();
372 return tabCreator.createNewTab( 353 return tabCreator.createNewTab(
373 new LoadUrlParams(testUrl), TabLaunchType.FROM_C HROME_UI, null); 354 new LoadUrlParams(testUrl), TabLaunchType.FROM_C HROME_UI, null);
374 } 355 }
375 }); 356 });
376 ChromeTabUtils.waitForTabPageLoaded(tab, testUrl); 357 ChromeTabUtils.waitForTabPageLoaded(tab, testUrl);
377 InstrumentationRegistry.getInstrumentation().waitForIdleSync(); 358 getInstrumentation().waitForIdleSync();
378 359
379 // Kill the renderer and wait for the crash to be noted by the browser p rocess. 360 // Kill the renderer and wait for the crash to be noted by the browser p rocess.
380 Assert.assertTrue(ChildProcessLauncher.crashProcessForTesting( 361 assertTrue(ChildProcessLauncher.crashProcessForTesting(
381 tab.getContentViewCore().getCurrentRenderProcessId())); 362 tab.getContentViewCore().getCurrentRenderProcessId()));
382 363
383 CriteriaHelper.pollInstrumentationThread( 364 CriteriaHelper.pollInstrumentationThread(
384 new Criteria("Renderer crash wasn't noticed by the browser.") { 365 new Criteria("Renderer crash wasn't noticed by the browser.") {
385 @Override 366 @Override
386 public boolean isSatisfied() { 367 public boolean isSatisfied() {
387 return tab.getContentViewCore().getCurrentRenderProcessI d() == 0; 368 return tab.getContentViewCore().getCurrentRenderProcessI d() == 0;
388 } 369 }
389 }); 370 });
390 371
391 // Reload the tab, respawning the renderer. 372 // Reload the tab, respawning the renderer.
392 InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable( ) { 373 getInstrumentation().runOnMainSync(new Runnable() {
393 @Override 374 @Override
394 public void run() { 375 public void run() {
395 tab.reload(); 376 tab.reload();
396 } 377 }
397 }); 378 });
398 379
399 ChromeTabUtils.waitForTabPageLoaded(tab, testUrl); 380 ChromeTabUtils.waitForTabPageLoaded(tab, testUrl);
400 381
401 // Wait until the process is spawned and its visibility is determined. 382 // Wait until the process is spawned and its visibility is determined.
402 CriteriaHelper.pollInstrumentationThread( 383 CriteriaHelper.pollInstrumentationThread(
403 new Criteria("Process for the crashed tab was not respawned.") { 384 new Criteria("Process for the crashed tab was not respawned.") {
404 @Override 385 @Override
405 public boolean isSatisfied() { 386 public boolean isSatisfied() {
406 return tab.getContentViewCore().getCurrentRenderProcessI d() != 0; 387 return tab.getContentViewCore().getCurrentRenderProcessI d() != 0;
407 } 388 }
408 }); 389 });
409 390
410 mBindingManager.assertSetInForegroundWasCalled( 391 mBindingManager.assertSetInForegroundWasCalled(
411 "isInForeground() was not called for the process.", 392 "isInForeground() was not called for the process.",
412 tab.getContentViewCore().getCurrentRenderProcessId()); 393 tab.getContentViewCore().getCurrentRenderProcessId());
413 394
414 InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable( ) { 395 getInstrumentation().runOnMainSync(new Runnable() {
415 @Override 396 @Override
416 public void run() { 397 public void run() {
417 // Verify the visibility of the renderer. 398 // Verify the visibility of the renderer.
418 mBindingManager.assertIsInForeground( 399 mBindingManager.assertIsInForeground(
419 tab.getContentViewCore().getCurrentRenderProcessId()); 400 tab.getContentViewCore().getCurrentRenderProcessId());
420 } 401 }
421 }); 402 });
422 } 403 }
423 404
424 private int getRenderProcessId(final Tab tab) { 405 private int getRenderProcessId(final Tab tab) {
425 return ThreadUtils.runOnUiThreadBlockingNoException(new Callable<Integer >() { 406 return ThreadUtils.runOnUiThreadBlockingNoException(new Callable<Integer >() {
426 @Override 407 @Override
427 public Integer call() throws Exception { 408 public Integer call() throws Exception {
428 return tab.getContentViewCore().getCurrentRenderProcessId(); 409 return tab.getContentViewCore().getCurrentRenderProcessId();
429 } 410 }
430 }); 411 });
431 } 412 }
432 413
433 /** 414 /**
434 * Ensures correctness of the visibilityDetermined() calls, that would be ge nerally preceded by 415 * Ensures correctness of the visibilityDetermined() calls, that would be ge nerally preceded by
435 * setInForeground(), but it can't be guaranteed because they are triggered from different 416 * setInForeground(), but it can't be guaranteed because they are triggered from different
436 * threads. 417 * threads.
437 */ 418 */
438 @Test
439 @LargeTest 419 @LargeTest
440 @Feature({"ProcessManagement"}) 420 @Feature({"ProcessManagement"})
441 public void testVisibilityDetermined() throws InterruptedException { 421 public void testVisibilityDetermined() throws InterruptedException {
442 // Create a tab in foreground and wait until it is loaded. 422 // Create a tab in foreground and wait until it is loaded.
443 final Tab fgTab = ThreadUtils.runOnUiThreadBlockingNoException( 423 final Tab fgTab = ThreadUtils.runOnUiThreadBlockingNoException(
444 new Callable<Tab>() { 424 new Callable<Tab>() {
445 @Override 425 @Override
446 public Tab call() { 426 public Tab call() {
447 TabCreator tabCreator = 427 TabCreator tabCreator = getActivity().getCurrentTabCreat or();
448 mActivityTestRule.getActivity().getCurrentTabCre ator();
449 return tabCreator.createNewTab( 428 return tabCreator.createNewTab(
450 new LoadUrlParams(mTestServer.getURL(FILE_PATH)) , 429 new LoadUrlParams(mTestServer.getURL(FILE_PATH)) ,
451 TabLaunchType.FROM_CHROME_UI, null); 430 TabLaunchType.FROM_CHROME_UI, null);
452 }}); 431 }});
453 ChromeTabUtils.waitForTabPageLoaded(fgTab, mTestServer.getURL(FILE_PATH) ); 432 ChromeTabUtils.waitForTabPageLoaded(fgTab, mTestServer.getURL(FILE_PATH) );
454 int initialNavigationPid = getRenderProcessId(fgTab); 433 int initialNavigationPid = getRenderProcessId(fgTab);
455 // Ensure the following calls happened: 434 // Ensure the following calls happened:
456 // - FG - setInForeground(true) - when the tab is created in the foregr ound 435 // - FG - setInForeground(true) - when the tab is created in the foregr ound
457 // - DETERMINED - visibilityDetermined() - after the initial navigation is committed 436 // - DETERMINED - visibilityDetermined() - after the initial navigation is committed
458 Assert.assertEquals( 437 assertEquals("FG;DETERMINED;", mBindingManager.getVisibilityCalls(initia lNavigationPid));
459 "FG;DETERMINED;", mBindingManager.getVisibilityCalls(initialNavi gationPid));
460 438
461 // Navigate to about:version which requires a different renderer. 439 // Navigate to about:version which requires a different renderer.
462 mActivityTestRule.loadUrlInTab(ABOUT_VERSION_PATH, PageTransition.LINK, fgTab); 440 loadUrlInTab(ABOUT_VERSION_PATH, PageTransition.LINK, fgTab);
463 int secondNavigationPid = getRenderProcessId(fgTab); 441 int secondNavigationPid = getRenderProcessId(fgTab);
464 MoreAsserts.assertNotEqual(secondNavigationPid, initialNavigationPid); 442 MoreAsserts.assertNotEqual(secondNavigationPid, initialNavigationPid);
465 // Ensure the following calls happened: 443 // Ensure the following calls happened:
466 // - BG - setInForeground(false) - when the renderer is created for unc ommited frame 444 // - BG - setInForeground(false) - when the renderer is created for unc ommited frame
467 // - FG - setInForeground(true) - when the frame is swapped in on commi t 445 // - FG - setInForeground(true) - when the frame is swapped in on commi t
468 // - DETERMINED - visibilityDetermined() - after the navigation is comm itted 446 // - DETERMINED - visibilityDetermined() - after the navigation is comm itted
469 // Or BG -> DETERMINED -> FG is also possible because setInForeground() and 447 // Or BG -> DETERMINED -> FG is also possible because setInForeground() and
470 // visibilityDetermined() are triggered from different threads. 448 // visibilityDetermined() are triggered from different threads.
471 mBindingManager.assertIsInForeground(secondNavigationPid); 449 mBindingManager.assertIsInForeground(secondNavigationPid);
472 String visibilityCalls = mBindingManager.getVisibilityCalls(secondNaviga tionPid); 450 String visibilityCalls = mBindingManager.getVisibilityCalls(secondNaviga tionPid);
473 Assert.assertTrue(visibilityCalls, 451 assertTrue(visibilityCalls, "BG;FG;DETERMINED;".equals(visibilityCalls)
474 "BG;FG;DETERMINED;".equals(visibilityCalls) 452 || "BG;DETERMINED;FG;".equals(visibilityCalls));
475 || "BG;DETERMINED;FG;".equals(visibilityCalls));
476 453
477 // Open a tab in the background and load it. 454 // Open a tab in the background and load it.
478 final Tab bgTab = ThreadUtils.runOnUiThreadBlockingNoException( 455 final Tab bgTab = ThreadUtils.runOnUiThreadBlockingNoException(
479 new Callable<Tab>() { 456 new Callable<Tab>() {
480 @Override 457 @Override
481 public Tab call() { 458 public Tab call() {
482 TabCreator tabCreator = 459 TabCreator tabCreator = getActivity().getCurrentTabCreat or();
483 mActivityTestRule.getActivity().getCurrentTabCre ator();
484 Tab tab = tabCreator.createNewTab( 460 Tab tab = tabCreator.createNewTab(
485 new LoadUrlParams(mTestServer.getURL(FILE_PATH)) , 461 new LoadUrlParams(mTestServer.getURL(FILE_PATH)) ,
486 TabLaunchType.FROM_LONGPRESS_BACKGROUND, null); 462 TabLaunchType.FROM_LONGPRESS_BACKGROUND, null);
487 // On Svelte devices the background tab would not be loa ded automatically, 463 // On Svelte devices the background tab would not be loa ded automatically,
488 // so trigger the load manually. 464 // so trigger the load manually.
489 tab.show(TabSelectionType.FROM_USER); 465 tab.show(TabSelectionType.FROM_USER);
490 tab.hide(); 466 tab.hide();
491 return tab; 467 return tab;
492 }}); 468 }});
493 ChromeTabUtils.waitForTabPageLoaded(bgTab, mTestServer.getURL(FILE_PATH) ); 469 ChromeTabUtils.waitForTabPageLoaded(bgTab, mTestServer.getURL(FILE_PATH) );
494 int bgNavigationPid = getRenderProcessId(bgTab); 470 int bgNavigationPid = getRenderProcessId(bgTab);
495 // Ensure the following calls happened: 471 // Ensure the following calls happened:
496 // - BG - setInForeground(false) - when tab is created in the backgroun d 472 // - BG - setInForeground(false) - when tab is created in the backgroun d
497 // - DETERMINED - visibilityDetermined() - after the navigation is comm itted 473 // - DETERMINED - visibilityDetermined() - after the navigation is comm itted
498 Assert.assertEquals("BG;DETERMINED;", mBindingManager.getVisibilityCalls (bgNavigationPid)); 474 assertEquals("BG;DETERMINED;", mBindingManager.getVisibilityCalls(bgNavi gationPid));
499 } 475 }
500 476
501 /** 477 /**
502 * When a user navigates to a prererendered URL, the tab swaps in the preren der's render 478 * When a user navigates to a prererendered URL, the tab swaps in the preren der's render
503 * process and discards its old render process. Test that visibilityDetermin ed() is called for 479 * process and discards its old render process. Test that visibilityDetermin ed() is called for
504 * the swapped in render process. 480 * the swapped in render process.
505 */ 481 */
506 @Test
507 @LargeTest 482 @LargeTest
508 @Restriction({Restriction.RESTRICTION_TYPE_NON_LOW_END_DEVICE}) 483 @Restriction({Restriction.RESTRICTION_TYPE_NON_LOW_END_DEVICE})
509 @Feature({"ProcessManagement"}) 484 @Feature({"ProcessManagement"})
510 public void testVisibilityDeterminedNavigateToPrerenderedPage() throws Inter ruptedException { 485 public void testVisibilityDeterminedNavigateToPrerenderedPage() throws Inter ruptedException {
511 mActivityTestRule.loadUrl(mTestServer.getURL(FILE_PATH)); 486 loadUrl(mTestServer.getURL(FILE_PATH));
512 Tab tab = mActivityTestRule.getActivity().getActivityTab(); 487 Tab tab = getActivity().getActivityTab();
513 int pid1 = getRenderProcessId(tab); 488 int pid1 = getRenderProcessId(tab);
514 489
515 String prerenderUrl = mTestServer.getURL(FILE_PATH2); 490 String prerenderUrl = mTestServer.getURL(FILE_PATH2);
516 PrerenderTestHelper.prerenderUrl(prerenderUrl, tab); 491 PrerenderTestHelper.prerenderUrl(prerenderUrl, tab);
517 Assert.assertEquals( 492 assertEquals(TabLoadStatus.FULL_PRERENDERED_PAGE_LOAD, loadUrl(prerender Url));
518 TabLoadStatus.FULL_PRERENDERED_PAGE_LOAD, mActivityTestRule.load Url(prerenderUrl));
519 493
520 int pid2 = getRenderProcessId(tab); 494 int pid2 = getRenderProcessId(tab);
521 MoreAsserts.assertNotEqual(pid1, pid2); 495 MoreAsserts.assertNotEqual(pid1, pid2);
522 496
523 Assert.assertTrue(mBindingManager.getVisibilityCalls(pid1).contains("DET ERMINED;")); 497 assertTrue(mBindingManager.getVisibilityCalls(pid1).contains("DETERMINED ;"));
524 Assert.assertTrue(mBindingManager.getVisibilityCalls(pid2).contains("DET ERMINED;")); 498 assertTrue(mBindingManager.getVisibilityCalls(pid2).contains("DETERMINED ;"));
525 } 499 }
526 500
527 /** 501 /**
528 * Verifies that BindingManager.releaseAllModerateBindings() is called once all the sandboxed 502 * Verifies that BindingManager.releaseAllModerateBindings() is called once all the sandboxed
529 * services are allocated. 503 * services are allocated.
530 */ 504 */
531 @Test
532 @ChildProcessAllocatorSettings(sandboxedServiceCount = 4) 505 @ChildProcessAllocatorSettings(sandboxedServiceCount = 4)
533 @LargeTest 506 @LargeTest
534 @Feature({"ProcessManagement"}) 507 @Feature({"ProcessManagement"})
535 public void testReleaseAllModerateBindings() throws InterruptedException { 508 public void testReleaseAllModerateBindings() throws InterruptedException {
536 final TabCreator tabCreator = mActivityTestRule.getActivity().getCurrent TabCreator(); 509 final TabCreator tabCreator = getActivity().getCurrentTabCreator();
537 final Tab[] tabs = new Tab[3]; 510 final Tab[] tabs = new Tab[3];
538 InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable( ) { 511 getInstrumentation().runOnMainSync(new Runnable() {
539 @Override 512 @Override
540 public void run() { 513 public void run() {
541 // Foreground tab. 514 // Foreground tab.
542 tabs[0] = tabCreator.createNewTab( 515 tabs[0] = tabCreator.createNewTab(
543 new LoadUrlParams("about:blank"), TabLaunchType.FROM_CHR OME_UI, null); 516 new LoadUrlParams("about:blank"), TabLaunchType.FROM_CHR OME_UI, null);
544 // Background tab. 517 // Background tab.
545 tabs[1] = tabCreator.createNewTab( 518 tabs[1] = tabCreator.createNewTab(
546 new LoadUrlParams("about:blank"), TabLaunchType.FROM_CHR OME_UI, null); 519 new LoadUrlParams("about:blank"), TabLaunchType.FROM_CHR OME_UI, null);
547 } 520 }
548 }); 521 });
549 ChromeTabUtils.waitForTabPageLoaded(tabs[0], "about:blank"); 522 ChromeTabUtils.waitForTabPageLoaded(tabs[0], "about:blank");
550 ChromeTabUtils.waitForTabPageLoaded(tabs[1], "about:blank"); 523 ChromeTabUtils.waitForTabPageLoaded(tabs[1], "about:blank");
551 // At this point 3 sanboxed services are allocated; the initial one + 2 new tabs. 524 // At this point 3 sanboxed services are allocated; the initial one + 2 new tabs.
552 Assert.assertFalse(mBindingManager.isReleaseAllModerateBindingsCalled()) ; 525 assertFalse(mBindingManager.isReleaseAllModerateBindingsCalled());
553 526
554 InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable( ) { 527 getInstrumentation().runOnMainSync(new Runnable() {
555 @Override 528 @Override
556 public void run() { 529 public void run() {
557 // Foreground tab. 530 // Foreground tab.
558 tabs[2] = tabCreator.createNewTab( 531 tabs[2] = tabCreator.createNewTab(
559 new LoadUrlParams("about:blank"), TabLaunchType.FROM_CHR OME_UI, null); 532 new LoadUrlParams("about:blank"), TabLaunchType.FROM_CHR OME_UI, null);
560 } 533 }
561 }); 534 });
562 ChromeTabUtils.waitForTabPageLoaded(tabs[2], "about:blank"); 535 ChromeTabUtils.waitForTabPageLoaded(tabs[2], "about:blank");
563 // At this point all the sanboxed services are allocated. 536 // At this point all the sanboxed services are allocated.
564 mBindingManager.assertIsReleaseAllModerateBindingsCalled(); 537 mBindingManager.assertIsReleaseAllModerateBindingsCalled();
565 } 538 }
566 539
567 // Test crashes on tablets. See crbug.com/594407 540 // Test crashes on tablets. See crbug.com/594407
568 @Test
569 @LargeTest 541 @LargeTest
570 @Feature({"ProcessManagement"}) 542 @Feature({"ProcessManagement"})
571 @Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE) 543 @Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE)
572 public void testRestoreSharedRenderer() throws Exception { 544 public void testRestoreSharedRenderer() throws Exception {
573 mActivityTestRule.loadUrl(mTestServer.getURL(SHARED_RENDERER_PAGE_PATH)) ; 545 loadUrl(mTestServer.getURL(SHARED_RENDERER_PAGE_PATH));
574 546
575 final Tab[] tabs = new Tab[2]; 547 final Tab[] tabs = new Tab[2];
576 tabs[0] = mActivityTestRule.getActivity().getActivityTab(); 548 tabs[0] = getActivity().getActivityTab();
577 TouchCommon.singleClickView(tabs[0].getView()); 549 singleClickView(tabs[0].getView());
578 550
579 CriteriaHelper.pollInstrumentationThread(new Criteria("Child tab isn't o pened.") { 551 CriteriaHelper.pollInstrumentationThread(new Criteria("Child tab isn't o pened.") {
580 @Override 552 @Override
581 public boolean isSatisfied() { 553 public boolean isSatisfied() {
582 return mActivityTestRule.getActivity().getCurrentTabModel().getC ount() == 2 554 return getActivity().getCurrentTabModel().getCount() == 2
583 && tabs[0] != mActivityTestRule.getActivity().getActivit yTab() 555 && tabs[0] != getActivity().getActivityTab()
584 && mActivityTestRule.getActivity() 556 && getActivity()
585 .getActivityTab() 557 .getActivityTab()
586 .getContentViewCore() 558 .getContentViewCore()
587 .getCurrentRenderProcessId() 559 .getCurrentRenderProcessId()
588 != 0; 560 != 0;
589 } 561 }
590 }); 562 });
591 tabs[1] = mActivityTestRule.getActivity().getActivityTab(); 563 tabs[1] = getActivity().getActivityTab();
592 Assert.assertEquals(tabs[0].getContentViewCore().getCurrentRenderProcess Id(), 564 assertEquals(tabs[0].getContentViewCore().getCurrentRenderProcessId(),
593 tabs[1].getContentViewCore().getCurrentRenderProcessId()); 565 tabs[1].getContentViewCore().getCurrentRenderProcessId());
594 566
595 InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable( ) { 567 getInstrumentation().runOnMainSync(new Runnable() {
596 @Override 568 @Override
597 public void run() { 569 public void run() {
598 // Verify the visibility of the renderer. 570 // Verify the visibility of the renderer.
599 mBindingManager.assertIsInForeground( 571 mBindingManager.assertIsInForeground(
600 tabs[0].getContentViewCore().getCurrentRenderProcessId() ); 572 tabs[0].getContentViewCore().getCurrentRenderProcessId() );
601 } 573 }
602 }); 574 });
603 575
604 Assert.assertTrue(ChildProcessLauncher.crashProcessForTesting( 576 assertTrue(ChildProcessLauncher.crashProcessForTesting(
605 tabs[1].getContentViewCore().getCurrentRenderProcessId())); 577 tabs[1].getContentViewCore().getCurrentRenderProcessId()));
606 578
607 CriteriaHelper.pollInstrumentationThread( 579 CriteriaHelper.pollInstrumentationThread(
608 new Criteria("Renderer crash wasn't noticed by the browser.") { 580 new Criteria("Renderer crash wasn't noticed by the browser.") {
609 @Override 581 @Override
610 public boolean isSatisfied() { 582 public boolean isSatisfied() {
611 return tabs[1].getContentViewCore().getCurrentRenderProc essId() == 0; 583 return tabs[1].getContentViewCore().getCurrentRenderProc essId() == 0;
612 } 584 }
613 }); 585 });
614 // Reload the tab, respawning the renderer. 586 // Reload the tab, respawning the renderer.
615 InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable( ) { 587 getInstrumentation().runOnMainSync(new Runnable() {
616 @Override 588 @Override
617 public void run() { 589 public void run() {
618 tabs[1].reload(); 590 tabs[1].reload();
619 } 591 }
620 }); 592 });
621 593
622 ChromeTabUtils.waitForTabPageLoaded( 594 ChromeTabUtils.waitForTabPageLoaded(
623 tabs[1], mTestServer.getURL(SHARED_RENDERER_PAGE2_PATH)); 595 tabs[1], mTestServer.getURL(SHARED_RENDERER_PAGE2_PATH));
624 596
625 // Wait until the process is spawned and its visibility is determined. 597 // Wait until the process is spawned and its visibility is determined.
626 CriteriaHelper.pollInstrumentationThread( 598 CriteriaHelper.pollInstrumentationThread(
627 new Criteria("Process for the crashed tab was not respawned.") { 599 new Criteria("Process for the crashed tab was not respawned.") {
628 @Override 600 @Override
629 public boolean isSatisfied() { 601 public boolean isSatisfied() {
630 return tabs[1].getContentViewCore().getCurrentRenderProc essId() != 0; 602 return tabs[1].getContentViewCore().getCurrentRenderProc essId() != 0;
631 } 603 }
632 }); 604 });
633 605
634 mBindingManager.assertSetInForegroundWasCalled( 606 mBindingManager.assertSetInForegroundWasCalled(
635 "setInForeground() was not called for the process.", 607 "setInForeground() was not called for the process.",
636 tabs[1].getContentViewCore().getCurrentRenderProcessId()); 608 tabs[1].getContentViewCore().getCurrentRenderProcessId());
637 609
638 InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable( ) { 610 getInstrumentation().runOnMainSync(new Runnable() {
639 @Override 611 @Override
640 public void run() { 612 public void run() {
641 // Verify the visibility of the renderer. 613 // Verify the visibility of the renderer.
642 mBindingManager.assertIsInForeground( 614 mBindingManager.assertIsInForeground(
643 tabs[1].getContentViewCore().getCurrentRenderProcessId() ); 615 tabs[1].getContentViewCore().getCurrentRenderProcessId() );
644 tabs[1].hide(); 616 tabs[1].hide();
645 mBindingManager.assertIsInBackground( 617 mBindingManager.assertIsInBackground(
646 tabs[1].getContentViewCore().getCurrentRenderProcessId() ); 618 tabs[1].getContentViewCore().getCurrentRenderProcessId() );
647 } 619 }
648 }); 620 });
649 } 621 }
650 622
651 @Before 623 @Override
652 public void setUp() throws Exception { 624 public void startMainActivity() throws InterruptedException {
625 startMainActivityOnBlankPage();
626 }
627
628 @Override
629 protected void setUp() throws Exception {
653 // Hook in the test binding manager. 630 // Hook in the test binding manager.
654 mBindingManager = new MockBindingManager(); 631 mBindingManager = new MockBindingManager();
655 ChildProcessLauncher.setBindingManagerForTesting(mBindingManager); 632 ChildProcessLauncher.setBindingManagerForTesting(mBindingManager);
656 633
657 mActivityTestRule.startMainActivityOnBlankPage(); 634 super.setUp();
658 635
659 mTestServer = EmbeddedTestServer.createAndStartServer( 636 mTestServer = EmbeddedTestServer.createAndStartServer(getInstrumentation ().getContext());
660 InstrumentationRegistry.getInstrumentation().getContext());
661 } 637 }
662 638
663 @After 639 @Override
664 public void tearDown() throws Exception { 640 protected void tearDown() throws Exception {
665 mTestServer.stopAndDestroyServer(); 641 mTestServer.stopAndDestroyServer();
642 super.tearDown();
666 } 643 }
667 644
668 /** 645 /**
669 * @return the index of the given tab in the current tab model 646 * @return the index of the given tab in the current tab model
670 */ 647 */
671 private int indexOf(Tab tab) { 648 private int indexOf(Tab tab) {
672 return mActivityTestRule.getActivity().getCurrentTabModel().indexOf(tab) ; 649 return getActivity().getCurrentTabModel().indexOf(tab);
673 } 650 }
674 } 651 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698