Refactor windowClipRectForLayer to remove the explicit RenderLayer dependency
authorjchaffraix@webkit.org <jchaffraix@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 7 May 2012 23:33:50 +0000 (23:33 +0000)
committerjchaffraix@webkit.org <jchaffraix@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 7 May 2012 23:33:50 +0000 (23:33 +0000)
https://bugs.webkit.org/show_bug.cgi?id=84090

Reviewed by David Hyatt.

Source/WebCore:

No observable change in behavior.

The function name was ambiguous as it was not a general purpose function but was
working directly on HTMLFrameOwnerElement. The rename makes this more obvious as
well as removes the explicit dependency on RenderLayer.

One of the slight change of this refactoring is that we now always null-check the
HTMLFrameOwnerElement's renderer as part windowClipRectForFrameOwner as I don't see
any evidence for the other code paths not to hit that. Also we may recur more on our
frame tree if we have no layer as we now call windowClipRect() in this case.

* page/FrameView.h:
(FrameView):
* plugins/PluginView.cpp:
(WebCore::PluginView::windowClipRect):
* WebCore.exp.in:
* WebCore.order:
* page/FrameView.cpp:
(WebCore::FrameView::windowClipRect):
Updated after windowClipRectForLayer name and signature change.

(WebCore::FrameView::windowClipRectForFrameOwner):
This function now takes the HTMLFrameOwnerElement directly.

* plugins/PluginView.cpp:
(WebCore::PluginView::PluginView):
(WebCore::PluginView::create):
* plugins/PluginView.h:
(PluginView):
Updated |m_element| to be an HTMLPlugInElement as this was what was
passed by every caller. This makes the conversion to HTMLFrameOwnerElement
possible.

Source/WebKit/chromium:

* src/WebPluginContainerImpl.cpp:
Updated after windowClipRectForLayer name and signature change.

Source/WebKit/win:

* WebCoreSupport/EmbeddedWidget.cpp:
(EmbeddedWidget::windowClipRect):
Updated after windowClipRectForLayer name and signature change.

* WebCoreSupport/EmbeddedWidget.h:
(EmbeddedWidget):
(EmbeddedWidget::EmbeddedWidget):
Updated the internal DOM pointer to be an HTMLPlugInElement
as it was what was passed in anyway. Also fixed some style
issues detected by our tools.

Source/WebKit2:

* WebProcess/Plugins/PluginView.cpp:
(WebKit::PluginView::clipRectInWindowCoordinates):
Updated after windowClipRectForLayer name and signature change.

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@116371 268f45cc-cd09-0410-ab3c-d52691b4dbfc

14 files changed:
Source/WebCore/ChangeLog
Source/WebCore/WebCore.exp.in
Source/WebCore/WebCore.order
Source/WebCore/page/FrameView.cpp
Source/WebCore/page/FrameView.h
Source/WebCore/plugins/PluginView.cpp
Source/WebCore/plugins/PluginView.h
Source/WebKit/chromium/ChangeLog
Source/WebKit/chromium/src/WebPluginContainerImpl.cpp
Source/WebKit/win/ChangeLog
Source/WebKit/win/WebCoreSupport/EmbeddedWidget.cpp
Source/WebKit/win/WebCoreSupport/EmbeddedWidget.h
Source/WebKit2/ChangeLog
Source/WebKit2/WebProcess/Plugins/PluginView.cpp

index 2489d4f06f27a37154d92f095e050edd4f6fe3b6..7880a1de3d03286cbfdc918a34ec77dfb3b20dfd 100644 (file)
@@ -1,3 +1,43 @@
+2012-05-07  Julien Chaffraix  <jchaffraix@webkit.org>
+
+        Refactor windowClipRectForLayer to remove the explicit RenderLayer dependency
+        https://bugs.webkit.org/show_bug.cgi?id=84090
+
+        Reviewed by David Hyatt.
+
+        No observable change in behavior.
+
+        The function name was ambiguous as it was not a general purpose function but was
+        working directly on HTMLFrameOwnerElement. The rename makes this more obvious as
+        well as removes the explicit dependency on RenderLayer.
+
+        One of the slight change of this refactoring is that we now always null-check the
+        HTMLFrameOwnerElement's renderer as part windowClipRectForFrameOwner as I don't see
+        any evidence for the other code paths not to hit that. Also we may recur more on our
+        frame tree if we have no layer as we now call windowClipRect() in this case.
+
+        * page/FrameView.h:
+        (FrameView):
+        * plugins/PluginView.cpp:
+        (WebCore::PluginView::windowClipRect):
+        * WebCore.exp.in:
+        * WebCore.order:
+        * page/FrameView.cpp:
+        (WebCore::FrameView::windowClipRect):
+        Updated after windowClipRectForLayer name and signature change.
+
+        (WebCore::FrameView::windowClipRectForFrameOwner):
+        This function now takes the HTMLFrameOwnerElement directly.
+
+        * plugins/PluginView.cpp:
+        (WebCore::PluginView::PluginView):
+        (WebCore::PluginView::create):
+        * plugins/PluginView.h:
+        (PluginView):
+        Updated |m_element| to be an HTMLPlugInElement as this was what was
+        passed by every caller. This makes the conversion to HTMLFrameOwnerElement
+        possible.
+
 2012-05-07  Enrica Casucci  <enrica@apple.com>
 
         REGRESSION (r101575): Chinese input is broken when composing mail in iCloud using Safari.
index c9680fc4a62f3c18248856d86073ad82a7608ce8..b294d0b68c8c21495c648b2b7a9e9d2ad5c97daf 100644 (file)
@@ -1530,7 +1530,7 @@ __ZNK7WebCore9FrameView13isTransparentEv
 __ZNK7WebCore9FrameView13paintBehaviorEv
 __ZNK7WebCore9FrameView19baseBackgroundColorEv
 __ZNK7WebCore9FrameView20isSoftwareRenderableEv
-__ZNK7WebCore9FrameView22windowClipRectForLayerEPKNS_11RenderLayerEb
+__ZNK7WebCore9FrameView27windowClipRectForFrameOwnerEPKNS_21HTMLFrameOwnerElementEb
 __ZNK7WebCore9FrameView23documentBackgroundColorEv
 __ZNK7WebCore9FrameView28isEnclosedInCompositingLayerEv
 __ZNK7WebCore9PageCache10frameCountEv
index 5111927736b52db7a13564d79553cb48837134e2..b27659ac9264368fbe32a1ef41a4d8f4760f13c6 100644 (file)
@@ -25034,7 +25034,7 @@ __ZN7WebCore9DOMWindow4stopEv
 __ZN7WebCore16HTMLInputElement16setIndeterminateEb
 __ZNK7WebCore9FrameView23convertToContainingViewERKNS_7IntRectE
 __ZNK7WebCore9FrameView19convertFromRendererEPKNS_12RenderObjectERKNS_7IntRectE
-__ZNK7WebCore9FrameView22windowClipRectForLayerEPKNS_11RenderLayerEb
+__ZNK7WebCore9FrameView27windowClipRectForFrameOwnerEPKNS_21HTMLFrameOwnerElementEb
 __ZN7WebCore16HTMLMediaElement14setDisplayModeENS0_11DisplayModeE
 __ZN7WebCore16HTMLMediaElement18updateDisplayStateEv
 __ZN7WebCore17HTMLAppletElement19defaultEventHandlerEPNS_5EventE
index da62a24bae258db3d59ee403a3241d206b67d23f..57aa9253e79c99649eecdbc30227b77c41e95ee9 100644 (file)
@@ -2558,30 +2558,31 @@ IntRect FrameView::windowClipRect(bool clipToContents) const
     if (!m_frame || !m_frame->ownerElement())
         return clipRect;
 
-    // Take our owner element and get the clip rect from the enclosing layer.
-    Element* elt = m_frame->ownerElement();
-    // The renderer can sometimes be null when style="display:none" interacts
-    // with external content and plugins.
-    RenderLayer* layer = elt->renderer() ? elt->renderer()->enclosingLayer() : 0;
-    if (!layer)
-        return clipRect;
-    FrameView* parentView = elt->document()->view();
-    clipRect.intersect(parentView->windowClipRectForLayer(layer, true));
+    // Take our owner element and get its clip rect.
+    HTMLFrameOwnerElement* ownerElement = m_frame->ownerElement();
+    FrameView* parentView = ownerElement->document()->view();
+    clipRect.intersect(parentView->windowClipRectForFrameOwner(ownerElement, true));
     return clipRect;
 }
 
-IntRect FrameView::windowClipRectForLayer(const RenderLayer* layer, bool clipToLayerContents) const
+IntRect FrameView::windowClipRectForFrameOwner(const HTMLFrameOwnerElement* ownerElement, bool clipToLayerContents) const
 {
+    // The renderer can sometimes be null when style="display:none" interacts
+    // with external content and plugins.
+    if (!ownerElement->renderer())
+        return windowClipRect();
+
     // If we have no layer, just return our window clip rect.
-    if (!layer)
+    const RenderLayer* enclosingLayer = ownerElement->renderer()->enclosingLayer();
+    if (!enclosingLayer)
         return windowClipRect();
 
     // Apply the clip from the layer.
     IntRect clipRect;
     if (clipToLayerContents)
-        clipRect = pixelSnappedIntRect(layer->childrenClipRect());
+        clipRect = pixelSnappedIntRect(enclosingLayer->childrenClipRect());
     else
-        clipRect = pixelSnappedIntRect(layer->selfClipRect());
+        clipRect = pixelSnappedIntRect(enclosingLayer->selfClipRect());
     clipRect = contentsToWindow(clipRect); 
     return intersection(clipRect, windowClipRect());
 }
index 61fac5484dbca51eb12b5159fabbc7fe215983bc..58a365de3efd5392e5d05e49a8514c3d2e926403 100644 (file)
@@ -168,7 +168,7 @@ public:
     void adjustViewSize();
     
     virtual IntRect windowClipRect(bool clipToContents = true) const;
-    IntRect windowClipRectForLayer(const RenderLayer*, bool clipToLayerContents) const;
+    IntRect windowClipRectForFrameOwner(const HTMLFrameOwnerElement*, bool clipToLayerContents) const;
 
     virtual IntRect windowResizerRect() const;
 
index 9a5ffa8fc6afa224a0158c9ca4921c848463e1c9..d37573e67c68a5bc21e67d4392c2d92ad9ecffac 100644 (file)
@@ -126,9 +126,8 @@ IntRect PluginView::windowClipRect() const
     IntRect clipRect(m_windowRect);
     
     // Take our element and get the clip rect from the enclosing layer and frame view.
-    RenderLayer* layer = m_element->renderer()->enclosingLayer();
     FrameView* parentView = m_element->document()->view();
-    clipRect.intersect(parentView->windowClipRectForLayer(layer, true));
+    clipRect.intersect(parentView->windowClipRectForFrameOwner(m_element, true));
 
     return clipRect;
 }
@@ -812,7 +811,7 @@ void PluginView::setParameters(const Vector<String>& paramNames, const Vector<St
     m_paramCount = paramCount;
 }
 
-PluginView::PluginView(Frame* parentFrame, const IntSize& size, PluginPackage* plugin, Element* element, const KURL& url, const Vector<String>& paramNames, const Vector<String>& paramValues, const String& mimeType, bool loadManually)
+PluginView::PluginView(Frame* parentFrame, const IntSize& size, PluginPackage* plugin, HTMLPlugInElement* element, const KURL& url, const Vector<String>& paramNames, const Vector<String>& paramValues, const String& mimeType, bool loadManually)
     : m_parentFrame(parentFrame)
     , m_plugin(plugin)
     , m_element(element)
@@ -965,7 +964,7 @@ bool PluginView::isCallingPlugin()
     return s_callingPlugin > 0;
 }
 
-PassRefPtr<PluginView> PluginView::create(Frame* parentFrame, const IntSize& size, Element* element, const KURL& url, const Vector<String>& paramNames, const Vector<String>& paramValues, const String& mimeType, bool loadManually)
+PassRefPtr<PluginView> PluginView::create(Frame* parentFrame, const IntSize& size, HTMLPlugInElement* element, const KURL& url, const Vector<String>& paramNames, const Vector<String>& paramValues, const String& mimeType, bool loadManually)
 {
     // if we fail to find a plugin for this MIME type, findPlugin will search for
     // a plugin by the file extension and update the MIME type, so pass a mutable String
index 1128522d021f81a8bf5fde1dd761c360d48c1f52..e011e687e66e5d7580062af8d56e73748f1ecf47 100644 (file)
@@ -84,9 +84,9 @@ namespace JSC {
 #endif
 
 namespace WebCore {
-    class Element;
     class Frame;
     class Image;
+    class HTMLPlugInElement;
     class KeyboardEvent;
     class MouseEvent;
     class KURL;
@@ -141,7 +141,7 @@ namespace WebCore {
                      , public PluginManualLoader
                      , private MediaCanStartListener {
     public:
-        static PassRefPtr<PluginView> create(Frame* parentFrame, const IntSize&, Element*, const KURL&, const Vector<String>& paramNames, const Vector<String>& paramValues, const String& mimeType, bool loadManually);
+        static PassRefPtr<PluginView> create(Frame* parentFrame, const IntSize&, HTMLPlugInElement*, const KURL&, const Vector<String>& paramNames, const Vector<String>& paramValues, const String& mimeType, bool loadManually);
         virtual ~PluginView();
 
         PluginPackage* plugin() const { return m_plugin.get(); }
@@ -265,7 +265,7 @@ namespace WebCore {
 #endif
 
     private:
-        PluginView(Frame* parentFrame, const IntSize&, PluginPackage*, Element*, const KURL&, const Vector<String>& paramNames, const Vector<String>& paramValues, const String& mimeType, bool loadManually);
+        PluginView(Frame* parentFrame, const IntSize&, PluginPackage*, HTMLPlugInElement*, const KURL&, const Vector<String>& paramNames, const Vector<String>& paramValues, const String& mimeType, bool loadManually);
 
         void setParameters(const Vector<String>& paramNames, const Vector<String>& paramValues);
         bool startOrAddToUnstartedList();
@@ -299,7 +299,7 @@ namespace WebCore {
 
         RefPtr<Frame> m_parentFrame;
         RefPtr<PluginPackage> m_plugin;
-        Element* m_element;
+        HTMLPlugInElement* m_element;
         bool m_isStarted;
         KURL m_url;
         PluginStatus m_status;
index 2c0c0fa78021d8684c3bdb34284989c140cd3287..2ee82f204b603cb7a3b6725d2356be05b706c1c4 100644 (file)
@@ -1,3 +1,13 @@
+2012-05-07  Julien Chaffraix  <jchaffraix@webkit.org>
+
+        Refactor windowClipRectForLayer to remove the explicit RenderLayer dependency
+        https://bugs.webkit.org/show_bug.cgi?id=84090
+
+        Reviewed by David Hyatt.
+
+        * src/WebPluginContainerImpl.cpp:
+        Updated after windowClipRectForLayer name and signature change.
+
 2012-05-07  Dana Jansens  <danakj@chromium.org>
 
         [chromium] Ensure synchronization in threaded unit tests by checking the sourceFrameNumber() to count commits
index a4a585b96bbc1cf1d3c685f4b88dc18ca92160c1..eeee890ec6580a7689334a10107de7545124b9d8 100644 (file)
@@ -714,9 +714,8 @@ WebCore::IntRect WebPluginContainerImpl::windowClipRect() const
     if (m_element->renderer()->document()->renderer()) {
         // Take our element and get the clip rect from the enclosing layer and
         // frame view.
-        RenderLayer* layer = m_element->renderer()->enclosingLayer();
         clipRect.intersect(
-            m_element->document()->view()->windowClipRectForLayer(layer, true));
+            m_element->document()->view()->windowClipRectForFrameOwner(m_element, true));
     }
 
     return clipRect;
index 56dea8721497c7daf3cd14f69415a01d4eb42ce2..d330d23d7f3ac24bd8d5a6eb8b5d05e19cf1c9d6 100644 (file)
@@ -1,3 +1,21 @@
+2012-05-07  Julien Chaffraix  <jchaffraix@webkit.org>
+
+        Refactor windowClipRectForLayer to remove the explicit RenderLayer dependency
+        https://bugs.webkit.org/show_bug.cgi?id=84090
+
+        Reviewed by David Hyatt.
+
+        * WebCoreSupport/EmbeddedWidget.cpp:
+        (EmbeddedWidget::windowClipRect):
+        Updated after windowClipRectForLayer name and signature change.
+
+        * WebCoreSupport/EmbeddedWidget.h:
+        (EmbeddedWidget):
+        (EmbeddedWidget::EmbeddedWidget):
+        Updated the internal DOM pointer to be an HTMLPlugInElement
+        as it was what was passed in anyway. Also fixed some style
+        issues detected by our tools.
+
 2012-05-05  Dean Jackson  <dino@apple.com>
 
         Add new Setting/Preference to disable requestAnimationFrame
index fb2b564feda618796447d044d9a658b3c0a46d3d..00442291c623530465cd08cbb9003956b702a644 100644 (file)
@@ -27,8 +27,8 @@
 #include "EmbeddedWidget.h"
 
 #include <WebCore/Document.h>
-#include <WebCore/Element.h>
 #include <WebCore/FrameView.h>
+#include <WebCore/HTMLPlugInElement.h>
 #include <WebCore/RenderObject.h>
 
 #include "MemoryStream.h"
@@ -37,7 +37,7 @@
 
 using namespace WebCore;
 
-PassRefPtr<EmbeddedWidget> EmbeddedWidget::create(IWebEmbeddedView* view, Element* element, HWND parentWindow, const IntSize& size)
+PassRefPtr<EmbeddedWidget> EmbeddedWidget::create(IWebEmbeddedView* view, HTMLPlugInElement* element, HWND parentWindow, const IntSize& size)
 {
     RefPtr<EmbeddedWidget> widget = adoptRef(new EmbeddedWidget(view, element));
 
@@ -167,9 +167,8 @@ IntRect EmbeddedWidget::windowClipRect() const
     IntRect clipRect(m_windowRect);
     
     // Take our element and get the clip rect from the enclosing layer and frame view.
-    RenderLayer* layer = m_element->renderer()->enclosingLayer();
     FrameView* parentView = m_element->document()->view();
-    clipRect.intersect(parentView->windowClipRectForLayer(layer, true));
+    clipRect.intersect(parentView->windowClipRectForFrameOwner(m_element, true));
 
     return clipRect;
 }
index abfe76ed4bf4642621d0540a2c504bd63d9d13fb..a5276bf57486fac0a10ed0a22ed5fb08cabefd85 100644 (file)
 #include <WebCore/PluginView.h>
 
 namespace WebCore {
-    class Element;
-    class IntSize;
+class HTMLPlugInElement;
+class IntSize;
 }
 
 interface IWebEmbeddedView;
 
 class EmbeddedWidget : public WebCore::Widget, public WebCore::PluginManualLoader {
 public:
-    static PassRefPtr<EmbeddedWidget> create(IWebEmbeddedView*, WebCore::Element* element, HWND parentWindow, const WebCore::IntSize&);
+    static PassRefPtr<EmbeddedWidget> create(IWebEmbeddedView*, WebCore::HTMLPlugInElement*, HWND parentWindow, const WebCore::IntSize&);
     ~EmbeddedWidget();
 
 private:
-    EmbeddedWidget(IWebEmbeddedView* view, WebCore::Element* element)
+    EmbeddedWidget(IWebEmbeddedView* view, WebCore::HTMLPlugInElement* element)
         : m_view(view)
         , m_element(element)
         , m_window(0)
@@ -73,7 +73,7 @@ private:
     virtual void detachFromWindow();
 
     COMPtr<IWebEmbeddedView> m_view;
-    WebCore::Element* m_element;
+    WebCore::HTMLPlugInElement* m_element;
     HWND m_window;
 
     bool m_isVisible;
index 8400d567f0268e92647adfbf1821e89e7bd670a3..b264705fd40f47b855cd29f13a4eb03166dfd119 100644 (file)
@@ -1,3 +1,14 @@
+2012-05-07  Julien Chaffraix  <jchaffraix@webkit.org>
+
+        Refactor windowClipRectForLayer to remove the explicit RenderLayer dependency
+        https://bugs.webkit.org/show_bug.cgi?id=84090
+
+        Reviewed by David Hyatt.
+
+        * WebProcess/Plugins/PluginView.cpp:
+        (WebKit::PluginView::clipRectInWindowCoordinates):
+        Updated after windowClipRectForLayer name and signature change.
+
 2012-05-07  Andy Estes  <aestes@apple.com>
 
         ENABLE_IFRAME_SEAMLESS should be part of FEATURE_DEFINES.
index 6799f11b3fc9133e0544521db0d2f90a4a5bd4c5..37164f1b776a8887c637adb99baf412082035e6b 100644 (file)
@@ -54,7 +54,6 @@
 #include <WebCore/ProtectionSpace.h>
 #include <WebCore/ProxyServer.h>
 #include <WebCore/RenderEmbeddedObject.h>
-#include <WebCore/RenderLayer.h>
 #include <WebCore/ResourceLoadScheduler.h>
 #include <WebCore/ScriptValue.h>
 #include <WebCore/ScrollView.h>
@@ -752,9 +751,8 @@ IntRect PluginView::clipRectInWindowCoordinates() const
 
     Frame* frame = this->frame();
 
-    // Get the window clip rect for the enclosing layer (in window coordinates).
-    RenderLayer* layer = m_pluginElement->renderer()->enclosingLayer();
-    IntRect windowClipRect = frame->view()->windowClipRectForLayer(layer, true);
+    // Get the window clip rect for the plugin element (in window coordinates).
+    IntRect windowClipRect = frame->view()->windowClipRectForFrameOwner(m_pluginElement.get(), true);
 
     // Intersect the two rects to get the view clip rect in window coordinates.
     frameRectInWindowCoordinates.intersect(windowClipRect);