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

Issue 770622 link

Starred by 1 user

Issue metadata

Status: Fixed
Owner:
Closed: Dec 2017
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: Linux , Windows , Mac
Pri: 2
Type: Bug



Sign in to add a comment

oopif ( Top document isolation) - flash nor rendering in sub iframe

Reported by elad.ba...@overwolf.com, Oct 2 2017

Issue description

UserAgent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36

Example URL:

Steps to reproduce the problem:
1. open index.html
2. (allow flash)
3. 

What is the expected behavior?
the flash inside the iframe should be rendering

What went wrong?
flash video is not rendering (but the video do play)

Does it occur on multiple sites: N/A

Is it a problem with a plugin? N/A 

Did this work before? N/A 

Does this work in other browsers? N/A

Chrome version: 61.0.3163.100  Channel: stable
OS Version: 10.0
Flash Version: Shockwave Flash 27.0 r0
 
index.html
433 bytes View Download
iframe.html
411 bytes View Download
Labels: Needs-Triage-M61
Cc: ranjitkan@chromium.org
Labels: Needs-Feedback
Unable to reproduce the issue on Stable build 61.0.3163.100 and canary 63.0.3230.0 on Windows 10, Mac 10.12.6, Ubuntu 14.04. Hitting the Play button twice played the video inside iframe without any issues. Screen shot attached.

Request you to please check and please let us know if we missed any thing else here.

Thanks.!

Flash.png
144 KB View Download
is "--top-document-isolation" flag enabled?

 
Top_document_isolation_flag.jpg
41.6 KB View Download
Project Member

Comment 4 by sheriffbot@chromium.org, Oct 3 2017

Labels: -Needs-Feedback
Thank you for providing more feedback. Adding requester "ranjitkan@chromium.org" to the cc list and removing "Needs-Feedback" label.

For more details visit https://www.chromium.org/issue-tracking/autotriage - Your friendly Sheriffbot

Comment 5 by hdodda@chromium.org, Oct 10 2017

Cc: hdodda@chromium.org
Components: Internals>Plugins>Flash
Labels: -Type-Compat M-63 OS-Linux OS-Mac Type-Bug
Status: Untriaged (was: Unconfirmed)
Able to reproduce the issue in windows 10 , mac os 10.12.6 and ubuntu 14.04 using chrome M61 #61.0.3163.100 and M63 #63.0.3236.0 after enabling the flag given in comment #3 . If flag is not abled issue is not reproduced.

This issue is seen from M55 and earlier to M55 , the given flag is not available in chrome://flags and is a Non-regression issue.

Marking it as untraiged for further inpust on this.

Thanks!
Components: Internals>Sandbox>SiteIsolation
Cc: wjmaclean@chromium.org dcheng@chromium.org alex...@chromium.org creis@chromium.org
Owner: kenrb@chromium.org
Status: Assigned (was: Untriaged)
Ken, would you be able to check whether this affects other OOPIF modes and not just TDI?  Since the video plays but doesn't render, I wonder if there's something regressed in Flash visibility inside OOPIFs.  I believe Flash used to play fine from OOPIFs at some point, but it's been a while since I've tried that.

Comment 8 by creis@chromium.org, Nov 22 2017

Cc: lfg@chromium.org
Might be related to  issue 593520 , but for nested iframes?

Comment 9 by kenrb@chromium.org, Nov 22 2017

On Windows I can repro the problem with TDI, but I haven't been able to make it occur with --site-per-process.

So far I haven't been able to figure out why that might be, but I'm still investigating.
hi, 
this may help you:

it's look like the sub_frame is observing to the right renderWidget

i was able to fix it by this workaround code:

at render_frame_impl.cc:
void RenderFrameImpl::DidCommitAndDrawCompositorFrame() {
#if BUILDFLAG(ENABLE_PLUGINS)
  // Notify all instances that we painted.  The same caveats apply as for
  // ViewFlushedPaint regarding instances closing themselves, so we take
  // similar precautions.
  PepperPluginSet plugins = active_pepper_instances_;
  for (auto* plugin : plugins) {
    if (active_pepper_instances_.find(plugin) != active_pepper_instances_.end())
      plugin->ViewInitiatedPaint();
  }

  // fix oopfis rendering flash inside iframe  <----------------   
  if (render_view_ && !is_main_frame_) {
    render_view_->DidCommitAndDrawCompositorFrame();
  }
#endif
}

and at render_widget.cc:


void RenderWidget::DidCommitAndDrawCompositorFrame() {
  // NOTE: Tests may break if this event is renamed or moved. See
  // tab_capture_performancetest.cc.
  TRACE_EVENT0("gpu", "RenderWidget::DidCommitAndDrawCompositorFrame");
 
  // changes : OOPIS flash fix
  if (did_commit_and_draw_compositor_frame_)
    return;
  
  // prevent recursive calls 
  base::AutoReset<bool> draw_compositor_frame(&did_commit_and_draw_compositor_frame_, true);
  // end OOPIS flash fix

  for (auto& observer : render_frames_)
    observer.DidCommitAndDrawCompositorFrame();

  // Notify subclasses that we initiated the paint operation.
  DidInitiatePaint();
}

hope it helps



Comment 11 by kenrb@chromium.org, Nov 22 2017

Labels: -Needs-Triage-M61
Thanks, that is helpful. I worked out that the problem is when the Flash video is loaded within a local frame that is within an OOPIF, which is why the sample you provided repros under TDI but not --site-per-process.

Indeed, it looks like the problem is that the child RenderFrame isn't registering itself with the correct RenderWidget, and so it doesn't get the DidCommitAndDrawCompositorFrame() message. I can put up a fix to make it register itself properly tomorrow, although I am surprised that this hasn't caused worse bugs.
Project Member

Comment 12 by bugdroid1@chromium.org, Nov 29 2017

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/c398e285eea601718751f6b6cac5a126bebba724

commit c398e285eea601718751f6b6cac5a126bebba724
Author: Ken Buchanan <kenrb@chromium.org>
Date: Wed Nov 29 19:28:57 2017

Correctly register RenderFrames with their associated RenderWidgets

Currently all RenderFrameImpls call RegisterRenderFrame on the
RenderView, and additionally, out-of-process iframe RFIs call it on the
RenderWidgets that they own.

This is incorrect for local child frames of OOPIFs, because they need
to register with the OOPIF's RenderWidget also.

This patch corrects and simplifies RenderFrameImpl widget registration,
making all of them register with their associated widgets after their
WebFrame is created, and unregister just before their WebFrame is
destroyed.

Bug:  770622 
Change-Id: I51be01147d3a810bf6e6c0214150b3714ea1c181
Reviewed-on: https://chromium-review.googlesource.com/791071
Commit-Queue: Ken Buchanan <kenrb@chromium.org>
Reviewed-by: Alex Moshchuk <alexmos@chromium.org>
Cr-Commit-Position: refs/heads/master@{#520196}
[modify] https://crrev.com/c398e285eea601718751f6b6cac5a126bebba724/content/renderer/render_frame_impl.cc
[modify] https://crrev.com/c398e285eea601718751f6b6cac5a126bebba724/content/renderer/render_frame_impl.h
[modify] https://crrev.com/c398e285eea601718751f6b6cac5a126bebba724/content/renderer/render_frame_impl_browsertest.cc

Status: Fixed (was: Assigned)
This looks fixed on Canary.

Sign in to add a comment