Index: content/public/android/java/src/org/chromium/content/browser/ChildProcessConnectionImpl.java |
diff --git a/content/public/android/java/src/org/chromium/content/browser/ChildProcessConnectionImpl.java b/content/public/android/java/src/org/chromium/content/browser/ChildProcessConnectionImpl.java |
index 202099469a64c9c40999ddb14250805b6f819f0c..b13ffbb6ca60d4e52d773ce65f08f8178dac445f 100644 |
--- a/content/public/android/java/src/org/chromium/content/browser/ChildProcessConnectionImpl.java |
+++ b/content/public/android/java/src/org/chromium/content/browser/ChildProcessConnectionImpl.java |
@@ -177,9 +177,9 @@ public class ChildProcessConnectionImpl implements ChildProcessConnection { |
if (mServiceDisconnected) { |
return; |
} |
- mServiceDisconnected = true; |
// Stash the status of the oom bindings, since stop() will release all bindings. |
- mWasOomProtected = mInitialBinding.isBound() || mStrongBinding.isBound(); |
+ mWasOomProtected = isCurrentlyOomProtected(); |
+ mServiceDisconnected = true; |
Log.w(TAG, "onServiceDisconnected (crash or killed by oom): pid=" + mPid); |
stop(); // We don't want to auto-restart on crash. Let the browser do that. |
mDeathCallback.onChildProcessDied(ChildProcessConnectionImpl.this); |
@@ -407,11 +407,19 @@ public class ChildProcessConnectionImpl implements ChildProcessConnection { |
if (mServiceDisconnected) { |
return mWasOomProtected; |
} else { |
- return mInitialBinding.isBound() || mStrongBinding.isBound(); |
+ return isCurrentlyOomProtected(); |
} |
} |
} |
+ private boolean isCurrentlyOomProtected() { |
+ synchronized (mLock) { |
+ assert !mServiceDisconnected; |
+ if (mAlwaysInForeground) return ChildProcessLauncher.isApplicationInForeground(); |
+ return mInitialBinding.isBound() || mStrongBinding.isBound(); |
+ } |
+ } |
+ |
@Override |
public void dropOomBindings() { |
synchronized (mLock) { |