New issue
Advanced search Search tips
Note: Color blocks (like or ) mean that a user may not be available. Tooltip shows the reason.

Issue 628325 link

Starred by 2 users

Issue metadata

Status: Fixed
Owner:
Closed: Jul 2016
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: All
Pri: 2
Type: Bug



Sign in to add a comment

OOPIFs not visible when loaded in an inactive tab

Project Member Reported by alex...@chromium.org, Jul 14 2016

Issue description

What steps will reproduce the problem?
(1) Start Chrome with --site-per-process
(2) Open a tab so you have two tabs.  Type http://csreis.github.io/tests/cross-site-iframe-simple.html into the omnibox in the first tab.
(3) Right after pressing enter, switch to the second tab.
(4) Wait a bit for the first tab to finish loading.
(6) Switch back to the first tab.

At this point, the OOPIF is not visible.  The subframe process does show up in process manager, and clicking on the second tab and then back to the first tab again makes the OOPIF show up.  So this seems to be some sort of visibility issue.  Note that document.visibilityState shows "visible" for the OOPIF when it's not showing.

I reproed this on 54.0.2795.0 Mac Canary and 53.0.2785.8 Linux dev.  

Even simpler repro: insert <a href="http://csreis.github.io/tests/cross-site-iframe-simple.html">link</a> and ctrl-click it.  After waiting for the tab to load, switch to it.

It seems that basically any OOPIF that finishes loading while in an inactive tab won't initially show up.  

This affects --isolate-extensions as well.  I've tried right-clicking the "Beautify FB" extension's Options link and "Open link in new tab".  After waiting for the new tab to load and switching to it, the Facebook subframe doesn't show up.  This seems pretty bad, so I'm adding the blocking label.
 

Comment 1 by lfg@chromium.org, Jul 14 2016

Cc: -lfg@chromium.org
Owner: lfg@chromium.org

Comment 2 by lfg@chromium.org, Jul 14 2016

Status: Started (was: Available)

Comment 3 by lfg@chromium.org, Jul 14 2016

Here's a summary of the problem: when the load completes, the parent's renderer sends and IPC from RemoteFrame::visibilityChanged, which overrides the browser's visibility. This causes WebContents and RenderWidgetHost (for the child frame) visibility's to go out of sync. We probably need something in CrossProcessFrameConnector to only update the visibility on the child process if the WebContents itself is visible. I'll start working on that tomorrow.


Comment 5 by lfg@chromium.org, Jul 19 2016

Status: Fixed (was: Started)

Sign in to add a comment