Plugin in iframe may not display
https://bugs.webkit.org/show_bug.cgi?id=109879

Patch by John Bauman <jbauman@chromium.org> on 2013-02-27
Reviewed by Simon Fraser.

Source/WebCore:

Changing the cliprect on a layer containing an iframe may change the
cliprect of plugins inside the iframe, so recursively tell all plugins
in iframes that their cliprect has changed after doing layout on the
outer frame.

Test: plugins/plugin-clip-subframe.html

* platform/ScrollView.cpp:
(WebCore::ScrollView::clipRectChanged):
* platform/ScrollView.h:
* platform/Widget.h:
(WebCore::Widget::clipRectChanged):
* plugins/PluginView.cpp:
(WebCore::PluginView::clipRectChanged):
* plugins/PluginView.h:
* rendering/RenderWidget.cpp:
(WebCore::RenderWidget::setWidgetGeometry):

Source/WebKit/chromium:

Use clipRectChanged to update the geometry.

* src/WebPluginContainerImpl.cpp:
(WebKit::WebPluginContainerImpl::clipRectChanged):
* src/WebPluginContainerImpl.h:

Source/WebKit/mac:

Ensure NetscapePluginWidget informs the plugin view of the cliprect change directly.

* Plugins/WebBaseNetscapePluginView.h:
* WebCoreSupport/WebFrameLoaderClient.mm:
(NetscapePluginWidget::clipRectChanged):

Source/WebKit2:

Update geometry when cliprect changes.

* WebProcess/Plugins/PluginView.cpp:
(WebKit::PluginView::clipRectChanged):
* WebProcess/Plugins/PluginView.h:

Tools:

LogNPPSetWindow will be used with other ports as well.

* DumpRenderTree/DumpRenderTree.gypi:
* DumpRenderTree/TestNetscapePlugIn/CMakeLists.txt:

LayoutTests:

Use log-npp-set-window to ensure plugin clip changes correctly.

* platform/mac-wk2/plugins/plugin-clip-subframe-expected.txt: Added.
* platform/mac/plugins/plugin-clip-subframe-expected.txt: Added.
* plugins/plugin-clip-subframe-expected.txt: Added.
* plugins/plugin-clip-subframe.html: Added.
* plugins/resources/plugin-clip-subframe-iframe.html: Added.

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@144236 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/Source/WebCore/platform/ScrollView.cpp b/Source/WebCore/platform/ScrollView.cpp
index 27038d3..3c97a85 100644
--- a/Source/WebCore/platform/ScrollView.cpp
+++ b/Source/WebCore/platform/ScrollView.cpp
@@ -887,6 +887,13 @@
         (*current)->frameRectsChanged();
 }
 
+void ScrollView::clipRectChanged()
+{
+    HashSet<RefPtr<Widget> >::const_iterator end = m_children.end();
+    for (HashSet<RefPtr<Widget> >::const_iterator current = m_children.begin(); current != end; ++current)
+        (*current)->clipRectChanged();
+}
+
 #if USE(ACCELERATED_COMPOSITING)
 static void positionScrollbarLayer(GraphicsLayer* graphicsLayer, Scrollbar* scrollbar)
 {