Title: [154542] trunk/Source/WebCore
Revision
154542
Author
[email protected]
Date
2013-08-24 04:21:22 -0700 (Sat, 24 Aug 2013)

Log Message

Let Document keep its RenderView during render tree detach.
<https://webkit.org/b/120233>

Reviewed by Antti Koivisto.

Instead of having "Document::renderer() == NULL" signify that the render tree is being
torn down, give Document an explicit flag for this instead.

This way, we can keep Document's RenderView in place during tree detach.

* dom/Document.cpp:
(WebCore::Document::Document):
(WebCore::Document::detach):
* dom/Document.h:
(WebCore::Document::renderTreeBeingDestroyed):
* rendering/RenderObject.h:
(WebCore::RenderObject::documentBeingDestroyed):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (154541 => 154542)


--- trunk/Source/WebCore/ChangeLog	2013-08-24 11:09:26 UTC (rev 154541)
+++ trunk/Source/WebCore/ChangeLog	2013-08-24 11:21:22 UTC (rev 154542)
@@ -1,3 +1,23 @@
+2013-08-24  Andreas Kling  <[email protected]>
+
+        Let Document keep its RenderView during render tree detach.
+        <https://webkit.org/b/120233>
+
+        Reviewed by Antti Koivisto.
+
+        Instead of having "Document::renderer() == NULL" signify that the render tree is being
+        torn down, give Document an explicit flag for this instead.
+
+        This way, we can keep Document's RenderView in place during tree detach.
+
+        * dom/Document.cpp:
+        (WebCore::Document::Document):
+        (WebCore::Document::detach):
+        * dom/Document.h:
+        (WebCore::Document::renderTreeBeingDestroyed):
+        * rendering/RenderObject.h:
+        (WebCore::RenderObject::documentBeingDestroyed):
+
 2013-08-24  Antti Koivisto  <[email protected]>
 
         Tighten before/after pseudo element accessors

Modified: trunk/Source/WebCore/dom/Document.cpp (154541 => 154542)


--- trunk/Source/WebCore/dom/Document.cpp	2013-08-24 11:09:26 UTC (rev 154541)
+++ trunk/Source/WebCore/dom/Document.cpp	2013-08-24 11:21:22 UTC (rev 154542)
@@ -165,6 +165,7 @@
 #include <wtf/CurrentTime.h>
 #include <wtf/MainThread.h>
 #include <wtf/PassRefPtr.h>
+#include <wtf/TemporaryChange.h>
 #include <wtf/text/StringBuffer.h>
 
 #if USE(ACCELERATED_COMPOSITING)
@@ -480,6 +481,7 @@
 #endif
     , m_didAssociateFormControlsTimer(this, &Document::didAssociateFormControlsTimerFired)
     , m_hasInjectedPlugInsScript(false)
+    , m_renderTreeBeingDestroyed(false)
 {
     if (m_frame)
         provideContextFeaturesToDocumentFrom(this, m_frame->page());
@@ -2010,8 +2012,6 @@
     clearScriptedAnimationController();
 #endif
 
-    RenderObject* render = renderer();
-
     documentWillBecomeInactive();
 
 #if ENABLE(SHARED_WORKERS)
@@ -2025,9 +2025,6 @@
 
     }
 
-    // indicate destruction mode,  i.e. attached() but renderer == 0
-    setRenderer(0);
-    
 #if ENABLE(FULLSCREEN_API)
     if (m_fullScreenRenderer)
         setFullScreenRenderer(0);
@@ -2037,6 +2034,8 @@
     m_focusedElement = 0;
     m_activeElement = 0;
 
+    TemporaryChange<bool> change(m_renderTreeBeingDestroyed, true);
+
     for (Element* child = ElementTraversal::firstWithin(this); child; child = ElementTraversal::nextSibling(child))
         Style::detachRenderTree(child);
 
@@ -2045,8 +2044,9 @@
 
     unscheduleStyleRecalc();
 
-    if (render)
-        render->destroy();
+    if (renderer())
+        renderer()->destroy();
+    setRenderer(0);
 
 #if ENABLE(TOUCH_EVENTS)
     if (m_touchEventTargets && m_touchEventTargets->size() && parentDocument())

Modified: trunk/Source/WebCore/dom/Document.h (154541 => 154542)


--- trunk/Source/WebCore/dom/Document.h	2013-08-24 11:09:26 UTC (rev 154541)
+++ trunk/Source/WebCore/dom/Document.h	2013-08-24 11:21:22 UTC (rev 154542)
@@ -547,6 +547,8 @@
         Node::setRenderer(renderer);
     }
 
+    bool renderTreeBeingDestroyed() const { return m_renderTreeBeingDestroyed; }
+
     AXObjectCache* existingAXObjectCache() const;
     AXObjectCache* axObjectCache() const;
     void clearAXObjectCache();
@@ -1558,6 +1560,7 @@
     HashSet<RefPtr<Element> > m_associatedFormControls;
 
     bool m_hasInjectedPlugInsScript;
+    bool m_renderTreeBeingDestroyed;
 };
 
 inline void Document::notifyRemovePendingSheetIfNeeded()

Modified: trunk/Source/WebCore/rendering/RenderObject.h (154541 => 154542)


--- trunk/Source/WebCore/rendering/RenderObject.h	2013-08-24 11:09:26 UTC (rev 154541)
+++ trunk/Source/WebCore/rendering/RenderObject.h	2013-08-24 11:21:22 UTC (rev 154542)
@@ -1177,7 +1177,7 @@
 
 inline bool RenderObject::documentBeingDestroyed() const
 {
-    return !document()->renderer();
+    return document()->renderTreeBeingDestroyed();
 }
 
 inline bool RenderObject::isBeforeContent() const
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to