Fix for renderer visibility on Android that doesn't break Aura and Mac.
http://crrev.com/287864 fixed an issue where a renderer that was killed in background and later reloaded was being respawned with incorrect process visibility, causing it to be killed on Android. The fix skipped resetting the |is_hidden_| flag of RenderWidgetHost, so that RenderWidgetHost crashing in background would retain its visibility status and trigger the ::Show() paths correctly when recreating the View in foreground, fixing the process visibility issues. Unfortunetely, this wasn't that good of an idea. It turns out that while it is the RenderWidgetHost that is the authoritative source of visibility truth that views rely on, it is the view that is responsible for providing signals (WasShown / WasHidden) to the widget host. That means that after a renderer crashes and the view is destroyed, RenderWidgetHost has no way to track its visibility anymore and all bets are off. It turns out that view implementations on Aura and Mac relied on the RenderWidgetHost visibility being reset upon crash (http://crbug.com/401859). Hence, this patch undoes the original "fix" and instead ensures that resetting the |is_hidden_| flag issues a notification for the RenderProcessHost, so that the process visibility signal that we attempted to fix with the original patch is still working. Regression test for http://crbug.com/399521 is in Chrome for Android repo (BindingManagerIntegrationTest). BUG=399521 BUG=401859 Review URL: https://codereview.chromium.org/459613007 Cr-Commit-Position: refs/heads/master@{#289276} git-svn-id: svn://svn.chromium.org/chrome/trunk/src@289276 0039d316-1c4b-4281-b951-d872f2087c98
Showing
Please register or sign in to comment