Skip to content
  • mitz@apple.com's avatar
    WebCore: · 8476cbd0
    mitz@apple.com authored
            Reviewed by Antti Koivisto.
    
            - fix http://bugs.webkit.org/show_bug.cgi?id=15811
              WebKit plug-ins can re-enter WebKit under attach()
              <rdar://problem/5577978>
    
            Defer plug-in loading until after attach and recalcStyle using the
            post-attach callback mechanism. Netscape plug-ins are still loaded only
            after layout.
    
            * dom/ContainerNode.cpp:
            Made NodeCallbackQueue elements retain the Node because callbacks might
            delete nodes that are in the callback queue.
            (WebCore::ContainerNode::suspendPostAttachCallbacks): Added. Needed to
            prevent post-attach callbacks from being dispatched under recalcStyle().
            (WebCore::ContainerNode::resumePostAttachCallbacks): Ditto.
            (WebCore::ContainerNode::dispatchPostAttachCallbacks): Factored out from
            attach().
            (WebCore::ContainerNode::attach):
            * dom/ContainerNode.h:
            * dom/Document.cpp:
            (WebCore::Document::recalcStyle): Added calls to
            suspendPostAttachCallbacks() and resumePostAttachCallbacks().
            * html/HTMLEmbedElement.cpp:
            (WebCore::HTMLEmbedElement::HTMLEmbedElement):
            (WebCore::HTMLEmbedElement::attach): Changed to queue the widget update
            for post-attach.
            (WebCore::HTMLEmbedElement::updateWidget): Added. Called by the
            post-attach callback.
            * html/HTMLEmbedElement.h: Added an m_needWidgetUpdate member needed to
            prevent a double update if another plug-in's post-attach updateWidget()
            triggers a layout which updates the widget before this plug-in's
            post-attach callback is invoked.
            (WebCore::HTMLEmbedElement::setNeedWidgetUpdate): Added a setter for
            m_needWidgetUpdate.
            * html/HTMLObjectElement.cpp:
            (WebCore::HTMLObjectElement::attach): Changed to queue the widget update
            for post-attach.
            (WebCore::HTMLObjectElement::updateWidget): Added. Called by the
            post-attach callback.
            * html/HTMLObjectElement.h:
            (WebCore::HTMLObjectElement::setNeedWidgetUpdate): Added a setter for
            m_needWidgetUpdate.
            * html/HTMLPlugInElement.cpp:
            (WebCore::HTMLPlugInElement::updateWidgetCallback): Added.
            * html/HTMLPlugInElement.h:
            (WebCore::HTMLPlugInElement::updateWidget):
            * rendering/RenderPartObject.cpp:
            (WebCore::RenderPartObject::updateWidget): Added calls to
            setNeedWidgetUpdate(false) so that if this method is called from
            FrameView::layout() during post-attach dispatch of another plug-in,
            it will not be called again when this plug-in's post-attach callback
            is dispatched.
            * rendering/RenderPartObject.h:
            (WebCore::RenderPartObject::updateWidget) Renamed argument to match
            the method definition.
    
    WebKit/mac:
    
            Reviewed by Antti Koivisto.
    
            - http://bugs.webkit.org/show_bug.cgi?id=15811
              WebKit plug-ins can re-enter WebKit under attach()
              <rdar://problem/5577978>
    
            * Plugins/WebNullPluginView.mm:
            (-[WebNullPluginView viewDidMoveToWindow]): Removed workaround for the
            above bug that added as part of fixing
            <http://bugs.webkit.org/show_bug.cgi?id=15804>.
    
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@27982 268f45cc-cd09-0410-ab3c-d52691b4dbfc
    8476cbd0