WebKit Bugzilla
Attachment 373679 Details for
Bug 199600
: YouTube embedding iframes in WebView sometimes go blank when the video starts playing
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch
bug-199600-20190708165116.patch (text/plain), 3.70 KB, created by
Simon Fraser (smfr)
on 2019-07-08 16:51:17 PDT
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
Simon Fraser (smfr)
Created:
2019-07-08 16:51:17 PDT
Size:
3.70 KB
patch
obsolete
>Subversion Revision: 247030 >diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index bd449d0600998620c1ea9cf8be30083af77dddc8..37947152b6d662e0b22a6a8dbab40a6d94dbf600 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,26 @@ >+2019-07-08 Simon Fraser <simon.fraser@apple.com> >+ >+ YouTube embedding iframes in WebView sometimes go blank when the video starts playing >+ https://bugs.webkit.org/show_bug.cgi?id=199600 >+ rdar://problem/47806012 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ With some combinations of nested iframes that are being resized from empty, and toggling into >+ compositing mode, we'd fail to update compositing in the iframe's enclosing document, so never >+ host the iframes's layers. >+ >+ Fix by moving some widget-resize-related code into RenderLayerCompositor::widgetDidChangeSize(), >+ and adding code to schedule a compositing update. >+ >+ I was unable to come up with a layout test for this. >+ >+ * rendering/RenderLayerCompositor.cpp: >+ (WebCore::RenderLayerCompositor::widgetDidChangeSize): >+ * rendering/RenderLayerCompositor.h: >+ * rendering/RenderWidget.cpp: >+ (WebCore::RenderWidget::setWidgetGeometry): >+ > 2019-07-01 Chris Dumez <cdumez@apple.com> > > It should not be possible to trigger a load while in the middle of restoring a page in PageCache >diff --git a/Source/WebCore/rendering/RenderLayerCompositor.cpp b/Source/WebCore/rendering/RenderLayerCompositor.cpp >index 9060820ae90c3de9307c71a9af04c403a5f51a94..c3d473fb9c575833f64f9db2a919c6991174d47b 100644 >--- a/Source/WebCore/rendering/RenderLayerCompositor.cpp >+++ b/Source/WebCore/rendering/RenderLayerCompositor.cpp >@@ -1984,6 +1984,24 @@ void RenderLayerCompositor::frameViewDidChangeSize() > } > } > >+void RenderLayerCompositor::widgetDidChangeSize(RenderWidget& widget) >+{ >+ if (!widget.hasLayer()) >+ return; >+ >+ auto& layer = *widget.layer(); >+ >+ LOG_WITH_STREAM(Compositing, stream << "RenderLayerCompositor " << this << " widgetDidChangeSize (layer " << &layer << ")"); >+ >+ // Wiget size affects answer to requiresCompositingForFrame() so we need to trigger >+ // a compositing update. >+ layer.setNeedsPostLayoutCompositingUpdate(); >+ scheduleCompositingLayerUpdate(); >+ >+ if (layer.isComposited()) >+ layer.backing()->updateAfterWidgetResize(); >+} >+ > bool RenderLayerCompositor::hasCoordinatedScrolling() const > { > auto* scrollingCoordinator = this->scrollingCoordinator(); >diff --git a/Source/WebCore/rendering/RenderLayerCompositor.h b/Source/WebCore/rendering/RenderLayerCompositor.h >index 1135951870a4b8110bddb4db45508c27a33f7ead..069ee97c7157f2fec82116c54aaac281d2c2c3e3 100644 >--- a/Source/WebCore/rendering/RenderLayerCompositor.h >+++ b/Source/WebCore/rendering/RenderLayerCompositor.h >@@ -306,6 +306,8 @@ public: > void frameViewDidLayout(); > void rootLayerConfigurationChanged(); > >+ void widgetDidChangeSize(RenderWidget&); >+ > String layerTreeAsText(LayerTreeFlags); > > float deviceScaleFactor() const override; >diff --git a/Source/WebCore/rendering/RenderWidget.cpp b/Source/WebCore/rendering/RenderWidget.cpp >index dc244604f365241df803a12752a78f7cd4dc616a..155d2cb6ae40f2bea86770167ac73811d72cab13 100644 >--- a/Source/WebCore/rendering/RenderWidget.cpp >+++ b/Source/WebCore/rendering/RenderWidget.cpp >@@ -141,8 +141,8 @@ bool RenderWidget::setWidgetGeometry(const LayoutRect& frame) > if (!weakThis) > return true; > >- if (boundsChanged && isComposited()) >- layer()->backing()->updateAfterWidgetResize(); >+ if (boundsChanged) >+ view().compositor().widgetDidChangeSize(*this); > > return oldFrameRect.size() != newFrameRect.size(); > }
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Flags:
thorton
:
review+
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 199600
: 373679