Title: [134350] trunk/Source/WebCore
Revision
134350
Author
[email protected]
Date
2012-11-12 20:44:20 -0800 (Mon, 12 Nov 2012)

Log Message

Make Frames and HTMLFrameOwnerElement less friendly
https://bugs.webkit.org/show_bug.cgi?id=102003

Patch by Elliott Sprehn <[email protected]> on 2012-11-12
Reviewed by Ojan Vafai.

Frame used to assign HTMLFrameOwnerElement's m_contentFrame directly
this patch makes it go through a method to allow future hooks when frames
are associated with owners.

No new tests, this is just a refactor.

* html/HTMLFrameOwnerElement.cpp:
(WebCore::HTMLFrameOwnerElement::setContentFrame):
* html/HTMLFrameOwnerElement.h:
(HTMLFrameOwnerElement):
(WebCore::HTMLFrameOwnerElement::clearContentFrame):
* page/Frame.cpp:
(WebCore::Frame::Frame): Use new methods.

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (134349 => 134350)


--- trunk/Source/WebCore/ChangeLog	2012-11-13 04:40:53 UTC (rev 134349)
+++ trunk/Source/WebCore/ChangeLog	2012-11-13 04:44:20 UTC (rev 134350)
@@ -1,3 +1,24 @@
+2012-11-12  Elliott Sprehn  <[email protected]>
+
+        Make Frames and HTMLFrameOwnerElement less friendly
+        https://bugs.webkit.org/show_bug.cgi?id=102003
+
+        Reviewed by Ojan Vafai.
+
+        Frame used to assign HTMLFrameOwnerElement's m_contentFrame directly
+        this patch makes it go through a method to allow future hooks when frames
+        are associated with owners.
+
+        No new tests, this is just a refactor.
+
+        * html/HTMLFrameOwnerElement.cpp:
+        (WebCore::HTMLFrameOwnerElement::setContentFrame):
+        * html/HTMLFrameOwnerElement.h:
+        (HTMLFrameOwnerElement):
+        (WebCore::HTMLFrameOwnerElement::clearContentFrame):
+        * page/Frame.cpp:
+        (WebCore::Frame::Frame): Use new methods.
+
 2012-11-12  Beth Dakin  <[email protected]>
 
         Zoomed-in scrolling is very slow when deviceScaleFactor > 1

Modified: trunk/Source/WebCore/html/HTMLFrameOwnerElement.cpp (134349 => 134350)


--- trunk/Source/WebCore/html/HTMLFrameOwnerElement.cpp	2012-11-13 04:40:53 UTC (rev 134349)
+++ trunk/Source/WebCore/html/HTMLFrameOwnerElement.cpp	2012-11-13 04:44:20 UTC (rev 134350)
@@ -49,6 +49,16 @@
     return toRenderPart(renderer());
 }
 
+void HTMLFrameOwnerElement::setContentFrame(Frame* frame)
+{
+    // Make sure we will not end up with two frames referencing the same owner element.
+    ASSERT(!m_contentFrame || m_contentFrame->ownerElement() != this);
+    ASSERT(frame);
+    // Disconnected frames should not be allowed to load.
+    ASSERT(inDocument());
+    m_contentFrame = frame;
+}
+
 void HTMLFrameOwnerElement::disconnectContentFrame()
 {
     ASSERT(hasCustomCallbacks());

Modified: trunk/Source/WebCore/html/HTMLFrameOwnerElement.h (134349 => 134350)


--- trunk/Source/WebCore/html/HTMLFrameOwnerElement.h	2012-11-13 04:40:53 UTC (rev 134349)
+++ trunk/Source/WebCore/html/HTMLFrameOwnerElement.h	2012-11-13 04:44:20 UTC (rev 134350)
@@ -42,6 +42,11 @@
     DOMWindow* contentWindow() const;
     Document* contentDocument() const;
 
+    void setContentFrame(Frame*);
+    void clearContentFrame() { m_contentFrame = 0; }
+
+    void disconnectContentFrame();
+
     // Most subclasses use RenderPart (either RenderEmbeddedObject or RenderIFrame)
     // except for HTMLObjectElement and HTMLEmbedElement which may return any
     // RenderObject when using fallback content.
@@ -54,15 +59,12 @@
     virtual ScrollbarMode scrollingMode() const { return ScrollbarAuto; }
 
     SandboxFlags sandboxFlags() const { return m_sandboxFlags; }
-    void disconnectContentFrame();
 
 protected:
     HTMLFrameOwnerElement(const QualifiedName& tagName, Document*);
     void setSandboxFlags(SandboxFlags);
 
 private:
-    friend class Frame;
-
     virtual bool isKeyboardFocusable(KeyboardEvent*) const;
     virtual bool isFrameOwnerElement() const OVERRIDE { return true; }
 

Modified: trunk/Source/WebCore/page/Frame.cpp (134349 => 134350)


--- trunk/Source/WebCore/page/Frame.cpp	2012-11-13 04:40:53 UTC (rev 134349)
+++ trunk/Source/WebCore/page/Frame.cpp	2012-11-13 04:44:20 UTC (rev 134350)
@@ -184,11 +184,7 @@
 #endif
     } else {
         page->incrementSubframeCount();
-
-        // Make sure we will not end up with two frames referencing the same owner element.
-        Frame*& contentFrameSlot = ownerElement->m_contentFrame;
-        ASSERT(!contentFrameSlot || contentFrameSlot->ownerElement() != ownerElement);
-        contentFrameSlot = this;
+        ownerElement->setContentFrame(this);
     }
 
 #ifndef NDEBUG
@@ -697,7 +693,7 @@
     if (m_ownerElement) {
         if (Document* doc = document())
             doc->clearAXObjectCache();
-        m_ownerElement->m_contentFrame = 0;
+        m_ownerElement->clearContentFrame();
         if (m_page)
             m_page->decrementSubframeCount();
     }
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to