[webkit-changes] [WebKit/WebKit] 6f0db1: [UnifiedPDF] Fix layer hierarchy for plugins that ...

Simon Fraser noreply at github.com
Sun Oct 8 18:20:34 PDT 2023


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 6f0db138bd4a80615be9a5f0801c862f1ec227f4
      https://github.com/WebKit/WebKit/commit/6f0db138bd4a80615be9a5f0801c862f1ec227f4
  Author: Simon Fraser <simon.fraser at apple.com>
  Date:   2023-10-08 (Sun, 08 Oct 2023)

  Changed paths:
    A LayoutTests/compositing/plugins/pdf/pdf-in-embed-expected.txt
    A LayoutTests/compositing/plugins/pdf/pdf-in-embed-rounded-border-expected.html
    A LayoutTests/compositing/plugins/pdf/pdf-in-embed-rounded-border.html
    A LayoutTests/compositing/plugins/pdf/pdf-in-embed.html
    M LayoutTests/platform/mac-wk2/TestExpectations
    M LayoutTests/platform/mac/TestExpectations
    M LayoutTests/platform/wk2/TestExpectations
    M Source/WebCore/plugins/PluginViewBase.h
    M Source/WebCore/rendering/RenderEmbeddedObject.cpp
    M Source/WebCore/rendering/RenderEmbeddedObject.h
    M Source/WebCore/rendering/RenderLayer.cpp
    M Source/WebCore/rendering/RenderLayerBacking.cpp
    M Source/WebCore/rendering/RenderLayerCompositor.cpp
    M Source/WebCore/rendering/RenderLayerCompositor.h
    M Source/WebCore/rendering/RenderWidget.cpp
    M Source/WebCore/rendering/RenderWidget.h
    M Source/WebKit/WebProcess/Plugins/PDF/UnifiedPDF/UnifiedPDFPlugin.mm
    M Source/WebKit/WebProcess/Plugins/PluginView.cpp
    M Source/WebKit/WebProcess/Plugins/PluginView.h

  Log Message:
  -----------
  [UnifiedPDF] Fix layer hierarchy for plugins that are hosted via GraphicsLayers
https://bugs.webkit.org/show_bug.cgi?id=262856
rdar://problem/116635683

Reviewed by Richard Robinson.

269029 at main added the ability for a plugin to expose a GraphicsLayer, which gets parented
in the RenderEmbeddedObject's primary layer. However, this didn't work correctly in some
configurations, for example when the plugin has rounded borders.

Fix by sharing code with iframe layer hosting; both plugins and iframes are RenderWidgets
with composited contents, so their layer configurations are the same.

To do this, merge RenderWidget::requiresAcceleratedCompositing() and
RenderEmbeddedObject::requiresAcceleratedCompositing() which had the same role, and refactor
some RenderLayerCompositor code to be shared between plugins and iframes.

We now ensure that layer hookup occurs at the right time by having UnifiedPDFPlugin::installPDFDocument()
call layerHostingStrategyDidChange(), which triggers the invalidateStyleAndLayerComposition() call
in PluginView.

Add compositing/plugins/pdf for tests, and enable them on mac-wk2 on Sonoma and later only.

* LayoutTests/compositing/plugins/pdf/pdf-in-embed-expected.txt: Added.
* LayoutTests/compositing/plugins/pdf/pdf-in-embed-rounded-border-expected.html: Added.
* LayoutTests/compositing/plugins/pdf/pdf-in-embed-rounded-border.html: Added.
* LayoutTests/compositing/plugins/pdf/pdf-in-embed.html: Added.
* LayoutTests/platform/mac-wk2/TestExpectations:
* LayoutTests/platform/mac/TestExpectations:
* LayoutTests/platform/wk2/TestExpectations:
* Source/WebCore/plugins/PluginViewBase.h:
(WebCore::PluginViewBase::layerHostingStrategyDidChange):
* Source/WebCore/rendering/RenderEmbeddedObject.cpp:
(WebCore::RenderEmbeddedObject::requiresLayer const):
(WebCore::RenderEmbeddedObject::requiresAcceleratedCompositing const):
(WebCore::RenderEmbeddedObject::allowsAcceleratedCompositing const): Deleted.
* Source/WebCore/rendering/RenderEmbeddedObject.h:
* Source/WebCore/rendering/RenderLayer.cpp:
(WebCore::RenderLayer::updateLayerPosition):
* Source/WebCore/rendering/RenderLayerBacking.cpp:
(WebCore::RenderLayerBacking::layerWillBeDestroyed):
(WebCore::RenderLayerBacking::updateConfiguration):
(WebCore::RenderLayerBacking::layerForContents const):
(WebCore::isCompositedPlugin):
* Source/WebCore/rendering/RenderLayerCompositor.cpp:
(WebCore::RenderLayerCompositor::updateBackingAndHierarchy):
(WebCore::RenderLayerCompositor::attachWidgetContentLayers):
(WebCore::RenderLayerCompositor::hasCompositedWidgetContents):
(WebCore::RenderLayerCompositor::isCompositedPlugin):
(WebCore::RenderLayerCompositor::requiresCompositingForPlugin const):
(WebCore::RenderLayerCompositor::parentFrameContentLayers): Deleted.
(WebCore::RenderLayerCompositor::isCompositedSubframeRenderer): Deleted.
* Source/WebCore/rendering/RenderLayerCompositor.h:
* Source/WebCore/rendering/RenderWidget.cpp:
(WebCore::RenderWidget::requiresAcceleratedCompositing const):
* Source/WebCore/rendering/RenderWidget.h:
* Source/WebKit/WebProcess/Plugins/PDF/UnifiedPDF/UnifiedPDFPlugin.mm:
(WebKit::UnifiedPDFPlugin::installPDFDocument):
* Source/WebKit/WebProcess/Plugins/PluginView.cpp:
(WebKit::PluginView::manualLoadDidFinishLoading):
(WebKit::PluginView::layerHostingStrategyDidChange):
* Source/WebKit/WebProcess/Plugins/PluginView.h:

Canonical link: https://commits.webkit.org/269063@main




More information about the webkit-changes mailing list