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

Unified Diff: content/public/android/javatests/src/org/chromium/content/browser/BindingManagerImplTest.java

Issue 673573003: Android: remove the initial binding when the renderer commits. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix a Java checkstyle warning. Created 6 years, 1 month 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/public/android/javatests/src/org/chromium/content/browser/BindingManagerImplTest.java
diff --git a/content/public/android/javatests/src/org/chromium/content/browser/BindingManagerImplTest.java b/content/public/android/javatests/src/org/chromium/content/browser/BindingManagerImplTest.java
index d344326f869a63f59d455c5e470a67fc513c5692..1d1e28e0d16a6b86bd5938b20aa4e1283d9548b4 100644
--- a/content/public/android/javatests/src/org/chromium/content/browser/BindingManagerImplTest.java
+++ b/content/public/android/javatests/src/org/chromium/content/browser/BindingManagerImplTest.java
@@ -172,13 +172,13 @@ public class BindingManagerImplTest extends InstrumentationTestCase {
}
/**
- * Verifies the binding removal policies for low end devices:
- * - removal of the initial binding should be delayed
+ * Verifies the strong binding removal policies for low end devices:
+ * - the initial binding should not be affected
* - removal of a strong binding should be executed synchronously
*/
@SmallTest
@Feature({"ProcessManagement"})
- public void testBindingRemovalOnLowEnd() throws Throwable {
+ public void testStrongBindingRemovalOnLowEnd() throws Throwable {
// This test applies only to the low-end manager.
final BindingManagerImpl manager = mLowEndManager;
@@ -193,31 +193,27 @@ public class BindingManagerImplTest extends InstrumentationTestCase {
runTestOnUiThread(new Runnable() {
@Override
public void run() {
- // Add a strong binding, verify that the initial binding is not removed immediately.
+ // Add a strong binding, verify that the initial binding is not removed.
manager.setInForeground(connection.getPid(), true);
assertTrue(connection.isStrongBindingBound());
assertTrue(connection.isInitialBindingBound());
- // Remove the strong binding, verify that the strong binding is removed immediately.
+ // Remove the strong binding, verify that the strong binding is removed immediately
+ // and that the initial binding is not affected.
manager.setInForeground(connection.getPid(), false);
assertFalse(connection.isStrongBindingBound());
+ assertTrue(connection.isInitialBindingBound());
}
});
-
- // Wait until the posted unbinding task gets executed and verify that the inital binding was
- // eventually removed. Note that this works only because the test binding manager has the
- // unbinding delay set to 0.
- getInstrumentation().waitForIdleSync();
- assertFalse(connection.isInitialBindingBound());
}
/**
- * Verifies the binding removal policies for high end devices, where the removal of both initial
- * and strong binding should be delayed.
+ * Verifies the strong binding removal policies for high end devices, where the removal should
+ * be delayed.
*/
@SmallTest
@Feature({"ProcessManagement"})
- public void testBindingRemovalOnHighEnd() throws Throwable {
+ public void testStrongBindingRemovalOnHighEnd() throws Throwable {
// This test applies only to the high-end manager.
final BindingManagerImpl manager = mHighEndManager;
@@ -231,7 +227,7 @@ public class BindingManagerImplTest extends InstrumentationTestCase {
runTestOnUiThread(new Runnable() {
@Override
public void run() {
- // Add a strong binding, verify that the initial binding is not removed immediately.
+ // Add a strong binding, verify that the initial binding is not removed.
manager.setInForeground(connection.getPid(), true);
assertTrue(connection.isStrongBindingBound());
assertTrue(connection.isInitialBindingBound());
@@ -240,15 +236,40 @@ public class BindingManagerImplTest extends InstrumentationTestCase {
// immediately.
manager.setInForeground(connection.getPid(), false);
assertTrue(connection.isStrongBindingBound());
+ assertTrue(connection.isInitialBindingBound());
}
});
- // Wait until the posted unbinding tasks get executed and verify that both bindings were
- // eventually removed. Note that this works only because the test binding manager has the
- // unbinding delay set to 0.
+ // Wait until the posted unbinding tasks get executed and verify that the strong binding was
+ // removed while the initial binding is not affected. Note that this works only because the
+ // test binding manager has the unbinding delay set to 0.
getInstrumentation().waitForIdleSync();
- assertFalse(connection.isInitialBindingBound());
assertFalse(connection.isStrongBindingBound());
+ assertTrue(connection.isInitialBindingBound());
+ }
+
+ /**
+ * Verifies that the initial binding is removed after determinedVisibility() is called.
+ */
+ @SmallTest
+ @Feature({"ProcessManagement"})
+ public void testInitialBindingRemoval() {
+ // This test applies to both low-end and high-end policies.
+ for (ManagerEntry managerEntry : mAllManagers) {
+ BindingManagerImpl manager = managerEntry.mManager;
+ String message = managerEntry.getErrorMessage();
+
+ // Add a connection to the manager.
+ MockChildProcessConnection connection = new MockChildProcessConnection(1);
+ manager.addNewConnection(connection.getPid(), connection);
+
+ // Verify that the initial binding is held.
+ assertTrue(connection.isInitialBindingBound());
+
+ // Call determinedVisibility() and verify that the initial binding was released.
+ manager.determinedVisibility(connection.getPid());
+ assertFalse(connection.isInitialBindingBound());
+ }
}
/**
@@ -277,6 +298,7 @@ public class BindingManagerImplTest extends InstrumentationTestCase {
// After initial binding is removed, the connection is no longer oom protected.
manager.setInForeground(connection.getPid(), false);
+ manager.determinedVisibility(connection.getPid());
getInstrumentation().waitForIdleSync();
assertFalse(message, manager.isOomProtected(connection.getPid()));
« no previous file with comments | « content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698