Index: chrome/android/javatests/src/org/chromium/chrome/browser/BindingManagerIntegrationTest.java |
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/BindingManagerIntegrationTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/BindingManagerIntegrationTest.java |
index 44cc7ab8ab11304cef7270f045e9a74ef6ef662b..241589f8f638d46f8062d1fcaf42bbb13ad8e777 100644 |
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/BindingManagerIntegrationTest.java |
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/BindingManagerIntegrationTest.java |
@@ -5,21 +5,12 @@ |
package org.chromium.chrome.browser; |
import android.content.Context; |
-import android.support.test.InstrumentationRegistry; |
import android.support.test.filters.LargeTest; |
import android.test.MoreAsserts; |
import android.util.SparseArray; |
import android.util.SparseBooleanArray; |
-import org.junit.After; |
-import org.junit.Assert; |
-import org.junit.Before; |
-import org.junit.Rule; |
-import org.junit.Test; |
-import org.junit.runner.RunWith; |
- |
import org.chromium.base.ThreadUtils; |
-import org.chromium.base.test.util.CommandLineFlags; |
import org.chromium.base.test.util.DisabledTest; |
import org.chromium.base.test.util.Feature; |
import org.chromium.base.test.util.Restriction; |
@@ -30,8 +21,7 @@ |
import org.chromium.chrome.browser.tabmodel.TabModel.TabLaunchType; |
import org.chromium.chrome.browser.tabmodel.TabModel.TabSelectionType; |
import org.chromium.chrome.browser.tabmodel.TabModelUtils; |
-import org.chromium.chrome.test.ChromeActivityTestRule; |
-import org.chromium.chrome.test.ChromeJUnit4ClassRunner; |
+import org.chromium.chrome.test.ChromeActivityTestCaseBase; |
import org.chromium.chrome.test.util.ChromeRestriction; |
import org.chromium.chrome.test.util.ChromeTabUtils; |
import org.chromium.chrome.test.util.PrerenderTestHelper; |
@@ -41,7 +31,6 @@ |
import org.chromium.content.browser.test.ChildProcessAllocatorSettings; |
import org.chromium.content.browser.test.util.Criteria; |
import org.chromium.content.browser.test.util.CriteriaHelper; |
-import org.chromium.content.browser.test.util.TouchCommon; |
import org.chromium.content_public.browser.LoadUrlParams; |
import org.chromium.net.test.EmbeddedTestServer; |
import org.chromium.ui.base.DeviceFormFactor; |
@@ -53,14 +42,8 @@ |
* Integration tests for the BindingManager API. This test plants a mock BindingManager |
* implementation and verifies that the signals it relies on are correctly delivered. |
*/ |
-@RunWith(ChromeJUnit4ClassRunner.class) |
@RetryOnFailure |
-@CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE, |
- ChromeActivityTestRule.DISABLE_NETWORK_PREDICTION_FLAG}) |
-public class BindingManagerIntegrationTest { |
- @Rule |
- public ChromeActivityTestRule<ChromeActivity> mActivityTestRule = |
- new ChromeActivityTestRule<>(ChromeActivity.class); |
+public class BindingManagerIntegrationTest extends ChromeActivityTestCaseBase<ChromeActivity> { |
private static class MockBindingManager implements BindingManager { |
// Maps pid to the last received visibility state of the renderer. |
@@ -172,21 +155,24 @@ |
private static final String SHARED_RENDERER_PAGE2_PATH = |
"/chrome/test/data/android/bindingmanager/shared_renderer2.html"; |
+ public BindingManagerIntegrationTest() { |
+ super(ChromeActivity.class); |
+ } |
+ |
/** |
* Verifies that the .setProcessInForeground() signal is called correctly as the tabs are |
* created and switched. |
*/ |
- @Test |
@LargeTest |
@Feature({"ProcessManagement"}) |
public void testTabSwitching() throws InterruptedException { |
// Create two tabs and wait until they are loaded, so that their renderers are around. |
final Tab[] tabs = new Tab[2]; |
- InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable() { |
+ getInstrumentation().runOnMainSync(new Runnable() { |
@Override |
public void run() { |
// Foreground tab. |
- TabCreator tabCreator = mActivityTestRule.getActivity().getCurrentTabCreator(); |
+ TabCreator tabCreator = getActivity().getCurrentTabCreator(); |
tabs[0] = tabCreator.createNewTab( |
new LoadUrlParams(mTestServer.getURL(FILE_PATH)), |
TabLaunchType.FROM_CHROME_UI, null); |
@@ -204,8 +190,8 @@ |
ChromeTabUtils.waitForTabPageLoaded(tabs[1], mTestServer.getURL(FILE_PATH)); |
// Wait for the new tab animations on phones to finish. |
- if (!DeviceFormFactor.isTablet(mActivityTestRule.getActivity())) { |
- final ChromeActivity activity = mActivityTestRule.getActivity(); |
+ if (!DeviceFormFactor.isTablet(getActivity())) { |
+ final ChromeActivity activity = getActivity(); |
CriteriaHelper.pollUiThread(new Criteria("Did not finish animation") { |
@Override |
public boolean isSatisfied() { |
@@ -215,14 +201,14 @@ |
} |
}); |
} |
- InstrumentationRegistry.getInstrumentation().waitForIdleSync(); |
- |
- InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable() { |
+ getInstrumentation().waitForIdleSync(); |
+ |
+ getInstrumentation().runOnMainSync(new Runnable() { |
@Override |
public void run() { |
// Make sure that the renderers were spawned. |
- Assert.assertTrue(tabs[0].getContentViewCore().getCurrentRenderProcessId() > 0); |
- Assert.assertTrue(tabs[1].getContentViewCore().getCurrentRenderProcessId() > 0); |
+ assertTrue(tabs[0].getContentViewCore().getCurrentRenderProcessId() > 0); |
+ assertTrue(tabs[1].getContentViewCore().getCurrentRenderProcessId() > 0); |
// Verify that the renderer of the foreground tab was signalled as visible. |
mBindingManager.assertIsInForeground( |
@@ -233,8 +219,7 @@ |
tabs[1].getContentViewCore().getCurrentRenderProcessId()); |
// Select tabs[1] and verify that the renderer visibility was flipped. |
- TabModelUtils.setIndex( |
- mActivityTestRule.getActivity().getCurrentTabModel(), indexOf(tabs[1])); |
+ TabModelUtils.setIndex(getActivity().getCurrentTabModel(), indexOf(tabs[1])); |
mBindingManager.assertIsInBackground( |
tabs[0].getContentViewCore().getCurrentRenderProcessId()); |
mBindingManager.assertIsInForeground( |
@@ -248,18 +233,17 @@ |
* crashed in background is restored in foreground. This is a regression test for |
* http://crbug.com/399521. |
*/ |
- @Test |
@DisabledTest(message = "crbug.com/543153") |
@LargeTest |
@Feature({"ProcessManagement"}) |
public void testCrashInBackground() throws InterruptedException { |
// Create two tabs and wait until they are loaded, so that their renderers are around. |
final Tab[] tabs = new Tab[2]; |
- InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable() { |
+ getInstrumentation().runOnMainSync(new Runnable() { |
@Override |
public void run() { |
// Foreground tab. |
- TabCreator tabCreator = mActivityTestRule.getActivity().getCurrentTabCreator(); |
+ TabCreator tabCreator = getActivity().getCurrentTabCreator(); |
tabs[0] = tabCreator.createNewTab( |
new LoadUrlParams(mTestServer.getURL(FILE_PATH)), |
TabLaunchType.FROM_CHROME_UI, null); |
@@ -277,8 +261,8 @@ |
ChromeTabUtils.waitForTabPageLoaded(tabs[1], mTestServer.getURL(FILE_PATH)); |
// Wait for the new tab animations on phones to finish. |
- if (!DeviceFormFactor.isTablet(mActivityTestRule.getActivity())) { |
- final ChromeActivity activity = mActivityTestRule.getActivity(); |
+ if (!DeviceFormFactor.isTablet(getActivity())) { |
+ final ChromeActivity activity = getActivity(); |
CriteriaHelper.pollUiThread(new Criteria("Did not finish animation") { |
@Override |
public boolean isSatisfied() { |
@@ -288,14 +272,14 @@ |
} |
}); |
} |
- InstrumentationRegistry.getInstrumentation().waitForIdleSync(); |
- |
- InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable() { |
+ getInstrumentation().waitForIdleSync(); |
+ |
+ getInstrumentation().runOnMainSync(new Runnable() { |
@Override |
public void run() { |
// Make sure that the renderers were spawned. |
- Assert.assertTrue(tabs[0].getContentViewCore().getCurrentRenderProcessId() > 0); |
- Assert.assertTrue(tabs[1].getContentViewCore().getCurrentRenderProcessId() > 0); |
+ assertTrue(tabs[0].getContentViewCore().getCurrentRenderProcessId() > 0); |
+ assertTrue(tabs[1].getContentViewCore().getCurrentRenderProcessId() > 0); |
// Verify that the renderer of the foreground tab was signalled as visible. |
mBindingManager.assertIsInForeground( |
@@ -308,7 +292,7 @@ |
}); |
// Kill the renderer and wait for the crash to be noted by the browser process. |
- Assert.assertTrue(ChildProcessLauncher.crashProcessForTesting( |
+ assertTrue(ChildProcessLauncher.crashProcessForTesting( |
tabs[1].getContentViewCore().getCurrentRenderProcessId())); |
CriteriaHelper.pollInstrumentationThread( |
@@ -320,11 +304,10 @@ |
}); |
// Switch to the tab that crashed in background. |
- InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable() { |
- @Override |
- public void run() { |
- TabModelUtils.setIndex( |
- mActivityTestRule.getActivity().getCurrentTabModel(), indexOf(tabs[1])); |
+ getInstrumentation().runOnMainSync(new Runnable() { |
+ @Override |
+ public void run() { |
+ TabModelUtils.setIndex(getActivity().getCurrentTabModel(), indexOf(tabs[1])); |
} |
}); |
@@ -341,7 +324,7 @@ |
"isInForeground() was not called for the process.", |
tabs[1].getContentViewCore().getCurrentRenderProcessId()); |
- InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable() { |
+ getInstrumentation().runOnMainSync(new Runnable() { |
@Override |
public void run() { |
// Verify the visibility of the renderers. |
@@ -357,7 +340,6 @@ |
* Verifies that a renderer that crashes in foreground has the correct visibility when |
* recreated. |
*/ |
- @Test |
@LargeTest |
@Feature({"ProcessManagement"}) |
public void testCrashInForeground() throws InterruptedException { |
@@ -367,17 +349,16 @@ |
new Callable<Tab>() { |
@Override |
public Tab call() throws Exception { |
- TabCreator tabCreator = |
- mActivityTestRule.getActivity().getCurrentTabCreator(); |
+ TabCreator tabCreator = getActivity().getCurrentTabCreator(); |
return tabCreator.createNewTab( |
new LoadUrlParams(testUrl), TabLaunchType.FROM_CHROME_UI, null); |
} |
}); |
ChromeTabUtils.waitForTabPageLoaded(tab, testUrl); |
- InstrumentationRegistry.getInstrumentation().waitForIdleSync(); |
+ getInstrumentation().waitForIdleSync(); |
// Kill the renderer and wait for the crash to be noted by the browser process. |
- Assert.assertTrue(ChildProcessLauncher.crashProcessForTesting( |
+ assertTrue(ChildProcessLauncher.crashProcessForTesting( |
tab.getContentViewCore().getCurrentRenderProcessId())); |
CriteriaHelper.pollInstrumentationThread( |
@@ -389,7 +370,7 @@ |
}); |
// Reload the tab, respawning the renderer. |
- InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable() { |
+ getInstrumentation().runOnMainSync(new Runnable() { |
@Override |
public void run() { |
tab.reload(); |
@@ -411,7 +392,7 @@ |
"isInForeground() was not called for the process.", |
tab.getContentViewCore().getCurrentRenderProcessId()); |
- InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable() { |
+ getInstrumentation().runOnMainSync(new Runnable() { |
@Override |
public void run() { |
// Verify the visibility of the renderer. |
@@ -435,7 +416,6 @@ |
* setInForeground(), but it can't be guaranteed because they are triggered from different |
* threads. |
*/ |
- @Test |
@LargeTest |
@Feature({"ProcessManagement"}) |
public void testVisibilityDetermined() throws InterruptedException { |
@@ -444,8 +424,7 @@ |
new Callable<Tab>() { |
@Override |
public Tab call() { |
- TabCreator tabCreator = |
- mActivityTestRule.getActivity().getCurrentTabCreator(); |
+ TabCreator tabCreator = getActivity().getCurrentTabCreator(); |
return tabCreator.createNewTab( |
new LoadUrlParams(mTestServer.getURL(FILE_PATH)), |
TabLaunchType.FROM_CHROME_UI, null); |
@@ -455,11 +434,10 @@ |
// Ensure the following calls happened: |
// - FG - setInForeground(true) - when the tab is created in the foreground |
// - DETERMINED - visibilityDetermined() - after the initial navigation is committed |
- Assert.assertEquals( |
- "FG;DETERMINED;", mBindingManager.getVisibilityCalls(initialNavigationPid)); |
+ assertEquals("FG;DETERMINED;", mBindingManager.getVisibilityCalls(initialNavigationPid)); |
// Navigate to about:version which requires a different renderer. |
- mActivityTestRule.loadUrlInTab(ABOUT_VERSION_PATH, PageTransition.LINK, fgTab); |
+ loadUrlInTab(ABOUT_VERSION_PATH, PageTransition.LINK, fgTab); |
int secondNavigationPid = getRenderProcessId(fgTab); |
MoreAsserts.assertNotEqual(secondNavigationPid, initialNavigationPid); |
// Ensure the following calls happened: |
@@ -470,17 +448,15 @@ |
// visibilityDetermined() are triggered from different threads. |
mBindingManager.assertIsInForeground(secondNavigationPid); |
String visibilityCalls = mBindingManager.getVisibilityCalls(secondNavigationPid); |
- Assert.assertTrue(visibilityCalls, |
- "BG;FG;DETERMINED;".equals(visibilityCalls) |
- || "BG;DETERMINED;FG;".equals(visibilityCalls)); |
+ assertTrue(visibilityCalls, "BG;FG;DETERMINED;".equals(visibilityCalls) |
+ || "BG;DETERMINED;FG;".equals(visibilityCalls)); |
// Open a tab in the background and load it. |
final Tab bgTab = ThreadUtils.runOnUiThreadBlockingNoException( |
new Callable<Tab>() { |
@Override |
public Tab call() { |
- TabCreator tabCreator = |
- mActivityTestRule.getActivity().getCurrentTabCreator(); |
+ TabCreator tabCreator = getActivity().getCurrentTabCreator(); |
Tab tab = tabCreator.createNewTab( |
new LoadUrlParams(mTestServer.getURL(FILE_PATH)), |
TabLaunchType.FROM_LONGPRESS_BACKGROUND, null); |
@@ -495,7 +471,7 @@ |
// Ensure the following calls happened: |
// - BG - setInForeground(false) - when tab is created in the background |
// - DETERMINED - visibilityDetermined() - after the navigation is committed |
- Assert.assertEquals("BG;DETERMINED;", mBindingManager.getVisibilityCalls(bgNavigationPid)); |
+ assertEquals("BG;DETERMINED;", mBindingManager.getVisibilityCalls(bgNavigationPid)); |
} |
/** |
@@ -503,39 +479,36 @@ |
* process and discards its old render process. Test that visibilityDetermined() is called for |
* the swapped in render process. |
*/ |
- @Test |
@LargeTest |
@Restriction({Restriction.RESTRICTION_TYPE_NON_LOW_END_DEVICE}) |
@Feature({"ProcessManagement"}) |
public void testVisibilityDeterminedNavigateToPrerenderedPage() throws InterruptedException { |
- mActivityTestRule.loadUrl(mTestServer.getURL(FILE_PATH)); |
- Tab tab = mActivityTestRule.getActivity().getActivityTab(); |
+ loadUrl(mTestServer.getURL(FILE_PATH)); |
+ Tab tab = getActivity().getActivityTab(); |
int pid1 = getRenderProcessId(tab); |
String prerenderUrl = mTestServer.getURL(FILE_PATH2); |
PrerenderTestHelper.prerenderUrl(prerenderUrl, tab); |
- Assert.assertEquals( |
- TabLoadStatus.FULL_PRERENDERED_PAGE_LOAD, mActivityTestRule.loadUrl(prerenderUrl)); |
+ assertEquals(TabLoadStatus.FULL_PRERENDERED_PAGE_LOAD, loadUrl(prerenderUrl)); |
int pid2 = getRenderProcessId(tab); |
MoreAsserts.assertNotEqual(pid1, pid2); |
- Assert.assertTrue(mBindingManager.getVisibilityCalls(pid1).contains("DETERMINED;")); |
- Assert.assertTrue(mBindingManager.getVisibilityCalls(pid2).contains("DETERMINED;")); |
+ assertTrue(mBindingManager.getVisibilityCalls(pid1).contains("DETERMINED;")); |
+ assertTrue(mBindingManager.getVisibilityCalls(pid2).contains("DETERMINED;")); |
} |
/** |
* Verifies that BindingManager.releaseAllModerateBindings() is called once all the sandboxed |
* services are allocated. |
*/ |
- @Test |
@ChildProcessAllocatorSettings(sandboxedServiceCount = 4) |
@LargeTest |
@Feature({"ProcessManagement"}) |
public void testReleaseAllModerateBindings() throws InterruptedException { |
- final TabCreator tabCreator = mActivityTestRule.getActivity().getCurrentTabCreator(); |
+ final TabCreator tabCreator = getActivity().getCurrentTabCreator(); |
final Tab[] tabs = new Tab[3]; |
- InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable() { |
+ getInstrumentation().runOnMainSync(new Runnable() { |
@Override |
public void run() { |
// Foreground tab. |
@@ -549,9 +522,9 @@ |
ChromeTabUtils.waitForTabPageLoaded(tabs[0], "about:blank"); |
ChromeTabUtils.waitForTabPageLoaded(tabs[1], "about:blank"); |
// At this point 3 sanboxed services are allocated; the initial one + 2 new tabs. |
- Assert.assertFalse(mBindingManager.isReleaseAllModerateBindingsCalled()); |
- |
- InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable() { |
+ assertFalse(mBindingManager.isReleaseAllModerateBindingsCalled()); |
+ |
+ getInstrumentation().runOnMainSync(new Runnable() { |
@Override |
public void run() { |
// Foreground tab. |
@@ -565,34 +538,33 @@ |
} |
// Test crashes on tablets. See crbug.com/594407 |
- @Test |
@LargeTest |
@Feature({"ProcessManagement"}) |
@Restriction(ChromeRestriction.RESTRICTION_TYPE_PHONE) |
public void testRestoreSharedRenderer() throws Exception { |
- mActivityTestRule.loadUrl(mTestServer.getURL(SHARED_RENDERER_PAGE_PATH)); |
+ loadUrl(mTestServer.getURL(SHARED_RENDERER_PAGE_PATH)); |
final Tab[] tabs = new Tab[2]; |
- tabs[0] = mActivityTestRule.getActivity().getActivityTab(); |
- TouchCommon.singleClickView(tabs[0].getView()); |
+ tabs[0] = getActivity().getActivityTab(); |
+ singleClickView(tabs[0].getView()); |
CriteriaHelper.pollInstrumentationThread(new Criteria("Child tab isn't opened.") { |
@Override |
public boolean isSatisfied() { |
- return mActivityTestRule.getActivity().getCurrentTabModel().getCount() == 2 |
- && tabs[0] != mActivityTestRule.getActivity().getActivityTab() |
- && mActivityTestRule.getActivity() |
+ return getActivity().getCurrentTabModel().getCount() == 2 |
+ && tabs[0] != getActivity().getActivityTab() |
+ && getActivity() |
.getActivityTab() |
.getContentViewCore() |
.getCurrentRenderProcessId() |
!= 0; |
} |
}); |
- tabs[1] = mActivityTestRule.getActivity().getActivityTab(); |
- Assert.assertEquals(tabs[0].getContentViewCore().getCurrentRenderProcessId(), |
+ tabs[1] = getActivity().getActivityTab(); |
+ assertEquals(tabs[0].getContentViewCore().getCurrentRenderProcessId(), |
tabs[1].getContentViewCore().getCurrentRenderProcessId()); |
- InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable() { |
+ getInstrumentation().runOnMainSync(new Runnable() { |
@Override |
public void run() { |
// Verify the visibility of the renderer. |
@@ -601,7 +573,7 @@ |
} |
}); |
- Assert.assertTrue(ChildProcessLauncher.crashProcessForTesting( |
+ assertTrue(ChildProcessLauncher.crashProcessForTesting( |
tabs[1].getContentViewCore().getCurrentRenderProcessId())); |
CriteriaHelper.pollInstrumentationThread( |
@@ -612,7 +584,7 @@ |
} |
}); |
// Reload the tab, respawning the renderer. |
- InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable() { |
+ getInstrumentation().runOnMainSync(new Runnable() { |
@Override |
public void run() { |
tabs[1].reload(); |
@@ -635,7 +607,7 @@ |
"setInForeground() was not called for the process.", |
tabs[1].getContentViewCore().getCurrentRenderProcessId()); |
- InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable() { |
+ getInstrumentation().runOnMainSync(new Runnable() { |
@Override |
public void run() { |
// Verify the visibility of the renderer. |
@@ -648,27 +620,32 @@ |
}); |
} |
- @Before |
- public void setUp() throws Exception { |
+ @Override |
+ public void startMainActivity() throws InterruptedException { |
+ startMainActivityOnBlankPage(); |
+ } |
+ |
+ @Override |
+ protected void setUp() throws Exception { |
// Hook in the test binding manager. |
mBindingManager = new MockBindingManager(); |
ChildProcessLauncher.setBindingManagerForTesting(mBindingManager); |
- mActivityTestRule.startMainActivityOnBlankPage(); |
- |
- mTestServer = EmbeddedTestServer.createAndStartServer( |
- InstrumentationRegistry.getInstrumentation().getContext()); |
- } |
- |
- @After |
- public void tearDown() throws Exception { |
+ super.setUp(); |
+ |
+ mTestServer = EmbeddedTestServer.createAndStartServer(getInstrumentation().getContext()); |
+ } |
+ |
+ @Override |
+ protected void tearDown() throws Exception { |
mTestServer.stopAndDestroyServer(); |
+ super.tearDown(); |
} |
/** |
* @return the index of the given tab in the current tab model |
*/ |
private int indexOf(Tab tab) { |
- return mActivityTestRule.getActivity().getCurrentTabModel().indexOf(tab); |
+ return getActivity().getCurrentTabModel().indexOf(tab); |
} |
} |