• ppi@chromium.org's avatar
    Fix for renderer visibility on Android that doesn't break Aura and Mac. · f1b469b0
    ppi@chromium.org authored
    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
    f1b469b0
render_widget_host_impl.h 32.7 KB