Index: content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java |
diff --git a/content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java b/content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java |
index d9e0d77b1061fdcefa7c1225ea7081c0270a3b52..dbbbc4e0caa69383c1c0e4dc3a52f74a0156aa3e 100644 |
--- a/content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java |
+++ b/content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java |
@@ -331,6 +331,9 @@ import java.util.Map; |
private boolean mAttachedToWindow = false; |
+ // Pid of the renderer process backing this ContentViewCore. |
+ private int mPid = 0; |
+ |
private ContentViewGestureHandler mContentViewGestureHandler; |
private PinchGestureStateListener mPinchGestureStateListener; |
private UpdateFrameInfoListener mUpdateFrameInfoListener; |
@@ -700,6 +703,8 @@ import java.util.Map; |
resetGestureDetectors(); |
} |
}; |
+ |
+ mPid = nativeGetCurrentRenderProcessId(mNativeContentViewCore); |
} |
@CalledByNative |
@@ -1412,13 +1417,13 @@ import java.util.Map; |
public void onAttachedToWindow() { |
mAttachedToWindow = true; |
if (mNativeContentViewCore != 0) { |
- int pid = nativeGetCurrentRenderProcessId(mNativeContentViewCore); |
- ChildProcessLauncher.bindAsHighPriority(pid); |
- // Normally the initial binding is removed in onRenderProcessSwap(), but it is |
- // possible to construct WebContents and spawn the renderer before passing it to |
- // ContentViewCore. In this case there will be no onRendererSwap() call and the |
- // initial binding will be removed here. |
- ChildProcessLauncher.removeInitialBinding(pid); |
+ assert mPid == nativeGetCurrentRenderProcessId(mNativeContentViewCore); |
+ ChildProcessLauncher.bindAsHighPriority(mPid); |
+ // Normally the initial binding is removed in onRenderProcessSwap(), but it is possible |
+ // to construct WebContents and spawn the renderer before passing it to ContentViewCore. |
+ // In this case there will be no onRenderProcessSwap() call and the initial binding will |
+ // be removed here. |
+ ChildProcessLauncher.removeInitialBinding(mPid); |
} |
setAccessibilityState(mAccessibilityManager.isEnabled()); |
} |
@@ -1430,8 +1435,8 @@ import java.util.Map; |
public void onDetachedFromWindow() { |
mAttachedToWindow = false; |
if (mNativeContentViewCore != 0) { |
- int pid = nativeGetCurrentRenderProcessId(mNativeContentViewCore); |
- ChildProcessLauncher.unbindAsHighPriority(pid); |
+ assert mPid == nativeGetCurrentRenderProcessId(mNativeContentViewCore); |
+ ChildProcessLauncher.unbindAsHighPriority(mPid); |
} |
setInjectedAccessibility(false); |
hidePopupDialog(); |
@@ -1443,9 +1448,9 @@ import java.util.Map; |
* @see View#onVisibilityChanged(android.view.View, int) |
*/ |
public void onVisibilityChanged(View changedView, int visibility) { |
- if (visibility != View.VISIBLE) { |
- mZoomControlsDelegate.dismissZoomPicker(); |
- } |
+ if (visibility != View.VISIBLE) { |
+ mZoomControlsDelegate.dismissZoomPicker(); |
+ } |
} |
/** |
@@ -1813,6 +1818,11 @@ import java.util.Map; |
@SuppressWarnings("unused") |
@CalledByNative |
private void onTabCrash() { |
+ assert mPid != 0; |
+ getContentViewClient().onRendererCrash(ChildProcessLauncher.isOomProtected(mPid)); |
+ mPid = 0; |
+ |
+ // Legacy method, to be dropped once all clients switch to onRendererCrash(). |
getContentViewClient().onTabCrash(); |
} |
@@ -2388,6 +2398,7 @@ import java.util.Map; |
@SuppressWarnings("unused") |
@CalledByNative |
private void onRenderProcessSwap(int oldPid, int newPid) { |
+ assert mPid == oldPid || mPid == newPid; |
if (mAttachedToWindow && oldPid != newPid) { |
ChildProcessLauncher.unbindAsHighPriority(oldPid); |
ChildProcessLauncher.bindAsHighPriority(newPid); |
@@ -2396,6 +2407,7 @@ import java.util.Map; |
// We want to remove the initial binding even if the ContentView is not attached, so that |
// renderers for ContentViews loading in background do not retain the high priority. |
ChildProcessLauncher.removeInitialBinding(newPid); |
+ mPid = newPid; |
} |
@SuppressWarnings("unused") |