LayoutTests:
authorjusting <justing@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 31 Oct 2006 23:37:04 +0000 (23:37 +0000)
committerjusting <justing@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 31 Oct 2006 23:37:04 +0000 (23:37 +0000)
        Reviewed by harrison

        Updated these tests to mention the bug that they demonstrate:
        * editing/pasteboard/nested-blocks-with-text-area-expected.checksum:
        * editing/pasteboard/nested-blocks-with-text-area-expected.png:
        * editing/pasteboard/nested-blocks-with-text-area-expected.txt:
        * editing/pasteboard/nested-blocks-with-text-area.html:
        * editing/pasteboard/nested-blocks-with-text-field-expected.checksum:
        * editing/pasteboard/nested-blocks-with-text-field-expected.png:
        * editing/pasteboard/nested-blocks-with-text-field-expected.txt:
        * editing/pasteboard/nested-blocks-with-text-field.html:

WebCore:

        Reviewed by harrison

        <rdar://problem/4711063>
        Pasting 10K lines into Mail/Blot takes ~7sec, in TextEdit it takes ~1.5sec

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplacementFragment::ReplacementFragment): Don't do the test
        insertion and plain text string creation unless we need the string
        for a BeforeTextInserted event handler or for a plain text only region.
        (WebCore::ReplacementFragment::removeInterchangeNodes): Added, moved
        code here from ReplacementFragment's constructor.
        (WebCore::ReplaceSelectionCommand::completeHTMLReplacement): Added a
        FIXME.
        * editing/ReplaceSelectionCommand.h:

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

13 files changed:
LayoutTests/ChangeLog
LayoutTests/editing/pasteboard/nested-blocks-with-text-area-expected.checksum
LayoutTests/editing/pasteboard/nested-blocks-with-text-area-expected.png
LayoutTests/editing/pasteboard/nested-blocks-with-text-area-expected.txt
LayoutTests/editing/pasteboard/nested-blocks-with-text-area.html
LayoutTests/editing/pasteboard/nested-blocks-with-text-field-expected.checksum
LayoutTests/editing/pasteboard/nested-blocks-with-text-field-expected.png
LayoutTests/editing/pasteboard/nested-blocks-with-text-field-expected.txt
LayoutTests/editing/pasteboard/nested-blocks-with-text-field.html
LayoutTests/editing/selection/drag-to-contenteditable-iframe-expected.txt
WebCore/ChangeLog
WebCore/editing/ReplaceSelectionCommand.cpp
WebCore/editing/ReplaceSelectionCommand.h

index c6bc05ad9932f3b02c191f2bfb10a3af4003d055..436e32d16c1075f67a4dd7404a517b74f958efb9 100644 (file)
@@ -1,3 +1,17 @@
+2006-10-31  Justin Garcia  <justin.garcia@apple.com>
+
+        Reviewed by harrison
+
+        Updated these tests to mention the bug that they demonstrate:
+        * editing/pasteboard/nested-blocks-with-text-area-expected.checksum:
+        * editing/pasteboard/nested-blocks-with-text-area-expected.png:
+        * editing/pasteboard/nested-blocks-with-text-area-expected.txt:
+        * editing/pasteboard/nested-blocks-with-text-area.html:
+        * editing/pasteboard/nested-blocks-with-text-field-expected.checksum:
+        * editing/pasteboard/nested-blocks-with-text-field-expected.png:
+        * editing/pasteboard/nested-blocks-with-text-field-expected.txt:
+        * editing/pasteboard/nested-blocks-with-text-field.html:
+
 2006-10-31  Adele Peterson  <adele@apple.com>
 
         Reviewed by Adam.
index b6b26ca8b4be01d7313061e046c2ff9a51ae6b26..632ae79f33dd2f1008e5edb08d568349c97b1f27 100644 (file)
@@ -1 +1 @@
-fd30caa739fed6b0a841c8fc21115434
\ No newline at end of file
+42f40f2de8e30b88cf944866bc01c28d
\ No newline at end of file
index a277ead5c594070e5c562bf9df0b7608ff9c81f7..4f149063e398f488e5361818a9ee5380dd1ae79a 100644 (file)
Binary files a/LayoutTests/editing/pasteboard/nested-blocks-with-text-area-expected.png and b/LayoutTests/editing/pasteboard/nested-blocks-with-text-area-expected.png differ
index f84c95cd73b0fe16b25c6209d66f6f106e115036..153f53f55d5605c03dc53592c8ab853b6c74cb96 100644 (file)
@@ -1,7 +1,11 @@
-EDITING DELEGATE: shouldBeginEditingInDOMRange:range from 0 of BODY > HTML > #document to 2 of BODY > HTML > #document
+EDITING DELEGATE: shouldBeginEditingInDOMRange:range from 0 of BODY > HTML > #document to 5 of BODY > HTML > #document
 EDITING DELEGATE: webViewDidBeginEditing:WebViewDidBeginEditingNotification
 EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
-EDITING DELEGATE: shouldChangeSelectedDOMRange:range from 0 of BODY > HTML > #document to 0 of BODY > HTML > #document toDOMRange:range from 1 of #text > DIV > DIV > BODY > HTML > #document to 1 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
+EDITING DELEGATE: shouldChangeSelectedDOMRange:range from 0 of BODY > HTML > #document to 0 of BODY > HTML > #document toDOMRange:range from 1 of #text > BODY > HTML > #document to 2 of BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
+EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
+EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
+EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
+EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 1 of #text > DIV > BODY > HTML > #document to 1 of #text > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
 EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
 EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
 layer at (0,0) size 800x600
@@ -9,20 +13,29 @@ layer at (0,0) size 800x600
 layer at (0,0) size 800x600
   RenderBlock {HTML} at (0,0) size 800x600
     RenderBody {BODY} at (8,8) size 784x584
-      RenderBlock {DIV} at (0,0) size 784x36
+      RenderBlock (anonymous) at (0,0) size 784x18
+        RenderText {#text} at (0,0) size 526x18
+          text run at (0,0) width 526: "These demonstrate 11475: the '\\n's at the end of the fragment should be unrendered."
+        RenderBR {BR} at (526,14) size 0x0
+      RenderBlock {DIV} at (0,18) size 784x36
         RenderText {#text} at (29,0) size 725x36
           text run at (29,0) width 725: "This test checks that pasing in a combination of nested blocks where one starts with a text field doesn't crash or fail "
           text run at (359,18) width 65: "assertions."
-      RenderBlock {DIV} at (0,36) size 784x36
+      RenderBlock {DIV} at (0,54) size 784x54
         RenderBlock {DIV} at (0,0) size 784x36
-          RenderTextField {TEXTAREA} at (302,2) size 163x28 [bgcolor=#FFFFFF] [border: (1px solid #000000)]
-          RenderText {#text} at (467,18) size 4x18
-            text run at (467,18) width 4: " "
+          RenderTextField {TEXTAREA} at (304,2) size 163x28 [bgcolor=#FFFFFF] [border: (1px solid #000000)]
+          RenderText {#text} at (469,18) size 4x18
+            text run at (469,18) width 4: " "
           RenderInline {SPAN} at (0,0) size 8x18
-            RenderText {#text} at (471,18) size 8x18
-              text run at (471,18) width 8: "x"
-          RenderText {#text} at (479,18) size 4x18
-            text run at (479,18) width 4: " "
-layer at (311,47) size 161x26
+            RenderText {#text} at (473,18) size 8x18
+              text run at (473,18) width 8: "x"
+          RenderText {#text} at (0,0) size 0x0
+        RenderBlock (anonymous) at (0,36) size 784x18
+          RenderText {#text} at (390,0) size 4x18
+            text run at (390,0) width 4: " "
+      RenderBlock (anonymous) at (0,108) size 784x0
+layer at (313,65) size 161x26
   RenderBlock {DIV} at (1,1) size 161x26
-caret: position 1 of child 3 {#text} of child 0 {DIV} of child 1 {DIV} of child 1 {BODY} of child 0 {HTML} of document
+    RenderText {#text} at (3,0) size 3x13
+      text run at (3,0) width 3: " "
+caret: position 1 of child 2 {#text} of child 4 {DIV} of child 1 {BODY} of child 0 {HTML} of document
index ff8a0aaab21d8f33426f08f18c715003c1eaad38..4904473e38e74cb155b79707184a207239961b7b 100644 (file)
@@ -6,13 +6,15 @@ div { text-align: center; }
 </head>
 
 <body contentEditable="true">
-
+These demonstrate 11475: the '\n's at the end of the fragment should be unrendered.<br><br>
 
 <script>
 var s = window.getSelection();
 var e = document.body;
 
 s.setPosition(e, 0);
+document.execCommand("SelectAll");
+s.modify("move", "forward", "character");
 document.execCommand("InsertHTML", false, "<div>This test checks that pasing in a combination of nested blocks where one starts with a text field doesn't crash or fail assertions.</div>\n<div>\n<div>\n<textarea> </textarea> \n<span>x</span>\n</div>\n</div>");
 
 </script>
index 8bcf5a63ea783e231c7abb0142e43d008492242e..8f788a6ff23010bab70acc277f8c9e24922e3cc3 100644 (file)
@@ -1 +1 @@
-81191b6afbb0d57245c89090b4228287
\ No newline at end of file
+a6385ec9d39c114d126a7edecabefe1b
\ No newline at end of file
index dad4ff95aa313d2007b7587ae9a3093250212fe7..5bfe0230a42a7a1db357db203ef656e8de5c50ad 100644 (file)
Binary files a/LayoutTests/editing/pasteboard/nested-blocks-with-text-field-expected.png and b/LayoutTests/editing/pasteboard/nested-blocks-with-text-field-expected.png differ
index 998cac4c8c39455de6b0454be879180d617c11c5..1e5833b842aca618b260487c67c5761230f57034 100644 (file)
@@ -1,7 +1,11 @@
-EDITING DELEGATE: shouldBeginEditingInDOMRange:range from 0 of BODY > HTML > #document to 2 of BODY > HTML > #document
+EDITING DELEGATE: shouldBeginEditingInDOMRange:range from 0 of BODY > HTML > #document to 5 of BODY > HTML > #document
 EDITING DELEGATE: webViewDidBeginEditing:WebViewDidBeginEditingNotification
 EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
-EDITING DELEGATE: shouldChangeSelectedDOMRange:range from 0 of BODY > HTML > #document to 0 of BODY > HTML > #document toDOMRange:range from 1 of #text > DIV > DIV > BODY > HTML > #document to 1 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
+EDITING DELEGATE: shouldChangeSelectedDOMRange:range from 0 of BODY > HTML > #document to 0 of BODY > HTML > #document toDOMRange:range from 1 of #text > BODY > HTML > #document to 2 of BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
+EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
+EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
+EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
+EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 1 of #text > DIV > BODY > HTML > #document to 1 of #text > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
 EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
 EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
 layer at (0,0) size 800x600
@@ -9,20 +13,27 @@ layer at (0,0) size 800x600
 layer at (0,0) size 800x600
   RenderBlock {HTML} at (0,0) size 800x600
     RenderBody {BODY} at (8,8) size 784x584
-      RenderBlock {DIV} at (0,0) size 784x36
+      RenderBlock (anonymous) at (0,0) size 784x18
+        RenderText {#text} at (0,0) size 526x18
+          text run at (0,0) width 526: "These demonstrate 11475: the '\\n's at the end of the fragment should be unrendered."
+        RenderBR {BR} at (526,14) size 0x0
+      RenderBlock {DIV} at (0,18) size 784x36
         RenderText {#text} at (29,0) size 725x36
           text run at (29,0) width 725: "This test checks that pasing in a combination of nested blocks where one starts with a text field doesn't crash or fail "
           text run at (359,18) width 65: "assertions."
-      RenderBlock {DIV} at (0,36) size 784x23
+      RenderBlock {DIV} at (0,54) size 784x41
         RenderBlock {DIV} at (0,0) size 784x23
-          RenderTextField {INPUT} at (310,2) size 148x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)]
-          RenderText {#text} at (460,2) size 4x18
-            text run at (460,2) width 4: " "
+          RenderTextField {INPUT} at (312,2) size 148x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)]
+          RenderText {#text} at (462,2) size 4x18
+            text run at (462,2) width 4: " "
           RenderInline {SPAN} at (0,0) size 8x18
-            RenderText {#text} at (464,2) size 8x18
-              text run at (464,2) width 8: "x"
-          RenderText {#text} at (472,2) size 4x18
-            text run at (472,2) width 4: " "
-layer at (321,49) size 142x13
+            RenderText {#text} at (466,2) size 8x18
+              text run at (466,2) width 8: "x"
+          RenderText {#text} at (0,0) size 0x0
+        RenderBlock (anonymous) at (0,23) size 784x18
+          RenderText {#text} at (390,0) size 4x18
+            text run at (390,0) width 4: " "
+      RenderBlock (anonymous) at (0,95) size 784x0
+layer at (323,67) size 142x13
   RenderBlock {DIV} at (3,3) size 142x13
-caret: position 1 of child 3 {#text} of child 0 {DIV} of child 1 {DIV} of child 1 {BODY} of child 0 {HTML} of document
+caret: position 1 of child 2 {#text} of child 4 {DIV} of child 1 {BODY} of child 0 {HTML} of document
index a997ab2044548697928f51ea69de6d8635b68f6e..02c384a27bb9f4c012271473c55fcc463fb9fc64 100644 (file)
@@ -6,13 +6,15 @@ div { text-align: center; }
 </head>
 
 <body contentEditable="true">
-
+These demonstrate 11475: the '\n's at the end of the fragment should be unrendered.<br><br>
 
 <script>
 var s = window.getSelection();
 var e = document.body;
 
 s.setPosition(e, 0);
+document.execCommand("SelectAll");
+s.modify("move", "forward", "character");
 document.execCommand("InsertHTML", false, "<div>This test checks that pasing in a combination of nested blocks where one starts with a text field doesn't crash or fail assertions.</div>\n<div>\n<div>\n<input type='text'> \n<span>x</span>\n</div>\n</div>");
 
 </script>
index 6c18ed9236c58b3c4ac966c78feb8de12a12371f..13d1c80ca48323ff8d79a7f7fe755760c7241e03 100644 (file)
@@ -1,8 +1,3 @@
-EDITING DELEGATE: shouldInsertNode:#document-fragment replacingDOMRange:range from 2 of BODY > HTML > #document to 2 of BODY > HTML > #document givenAction:WebViewInsertActionDropped
-EDITING DELEGATE: shouldChangeSelectedDOMRange:range from 2 of BODY > HTML > #document to 2 of BODY > HTML > #document toDOMRange:range from 0 of #text > BODY > HTML > #document to 5 of #text > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
-EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
-EDITING DELEGATE: shouldBeginEditingInDOMRange:range from 0 of BODY > HTML > #document to 4 of BODY > HTML > #document
-EDITING DELEGATE: webViewDidBeginEditing:WebViewDidBeginEditingNotification
 EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
 EDITING DELEGATE: shouldInsertNode:#document-fragment replacingDOMRange:range from 0 of BODY > HTML > #document to 0 of BODY > HTML > #document givenAction:WebViewInsertActionDropped
 EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
@@ -21,8 +16,7 @@ layer at (0,0) size 800x600
           layer at (0,0) size 200x200
             RenderBlock {HTML} at (0,0) size 200x200
               RenderBody {BODY} at (8,8) size 184x184 [bgcolor=#FFFFE0]
-                RenderBlock (anonymous) at (0,0) size 184x103
-                  RenderImage {IMG} at (0,0) size 76x103
+                RenderImage {IMG} at (0,0) size 76x103
         RenderText {#text} at (208,194) size 4x18
           text run at (208,194) width 4: " "
         RenderImage {IMG} at (212,105) size 76x103
index 5d9886e21cd7e2104e34a3a4f3442f7a1d3f5836..d4964bb1be9e39aa291f748729fb9b9605d3e95f 100644 (file)
@@ -1,3 +1,20 @@
+2006-10-31  Justin Garcia  <justin.garcia@apple.com>
+
+        Reviewed by harrison
+        
+        <rdar://problem/4711063>
+        Pasting 10K lines into Mail/Blot takes ~7sec, in TextEdit it takes ~1.5sec
+
+        * editing/ReplaceSelectionCommand.cpp:
+        (WebCore::ReplacementFragment::ReplacementFragment): Don't do the test
+        insertion and plain text string creation unless we need the string
+        for a BeforeTextInserted event handler or for a plain text only region.
+        (WebCore::ReplacementFragment::removeInterchangeNodes): Added, moved
+        code here from ReplacementFragment's constructor.
+        (WebCore::ReplaceSelectionCommand::completeHTMLReplacement): Added a
+        FIXME.
+        * editing/ReplaceSelectionCommand.h:
+
 2006-10-31  Ada Chan  <adachan@apple.com>
 
         Reviewed by Adam
index 607da55b86edd62f492f6b9c61bded5bea1f173d..5c6799c4c255454c4321fe8d0c97e9c288ab7360 100644 (file)
@@ -33,6 +33,7 @@
 #include "Document.h"
 #include "DocumentFragment.h"
 #include "EditingText.h"
+#include "EventNames.h"
 #include "Element.h"
 #include "Frame.h"
 #include "HTMLElement.h"
@@ -47,6 +48,7 @@
 
 namespace WebCore {
 
+using namespace EventNames;
 using namespace HTMLNames;
 
 static bool isInterchangeNewlineNode(const Node *node)
@@ -74,14 +76,24 @@ ReplacementFragment::ReplacementFragment(Document* document, DocumentFragment* f
         return;
     if (!m_fragment)
         return;
-    Node* firstChild = m_fragment->firstChild();
-    if (!firstChild)
+    if (!m_fragment->firstChild())
         return;
     
     Element* editableRoot = selection.rootEditableElement();
     ASSERT(editableRoot);
     if (!editableRoot)
         return;
+    
+    Node* shadowParentNode = editableRoot->shadowParentNode();
+    
+    if (!editableRoot->getHTMLEventListener(khtmlBeforeTextInsertedEvent) &&
+        // FIXME: Remove these checks once textareas and textfields actually register an event handler.
+        !(shadowParentNode && shadowParentNode->renderer() && shadowParentNode->renderer()->isTextField() && static_cast<HTMLInputElement*>(shadowParentNode)->isNonWidgetTextField()) &&
+        !(shadowParentNode && shadowParentNode->renderer() && shadowParentNode->renderer()->isTextArea()) &&
+        editableRoot->isContentRichlyEditable()) {
+        removeInterchangeNodes(m_fragment->firstChild());
+        return;
+    }
 
     Node* styleNode = selection.base().node();
     RefPtr<Node> holder = insertFragmentForTestRendering(styleNode);
@@ -98,44 +110,12 @@ ReplacementFragment::ReplacementFragment(Document* document, DocumentFragment* f
         removeNode(holder);
 
         m_fragment = createFragmentFromText(selection.toRange().get(), evt->text());
-        firstChild = m_fragment->firstChild();
-        if (!firstChild)
+        if (!m_fragment->firstChild())
             return;
         holder = insertFragmentForTestRendering(styleNode);
     }
-
-    Node *node = firstChild;
-    Node *newlineAtStartNode = 0;
-    Node *newlineAtEndNode = 0;
-    while (node) {
-        Node *next = node->traverseNextNode();
-        if (isInterchangeNewlineNode(node)) {
-            if (next || node == firstChild) {
-                m_hasInterchangeNewlineAtStart = true;
-                newlineAtStartNode = node;
-            }
-            else {
-                m_hasInterchangeNewlineAtEnd = true;
-                newlineAtEndNode = node;
-            }
-        }
-        else if (isInterchangeConvertedSpaceSpan(node)) {
-            RefPtr<Node> n = 0;
-            while ((n = node->firstChild())) {
-                removeNode(n);
-                insertNodeBefore(n.get(), node);
-            }
-            removeNode(node);
-            if (n)
-                next = n->traverseNextNode();
-        }
-        node = next;
-    }
-
-    if (newlineAtStartNode)
-        removeNode(newlineAtStartNode);
-    if (newlineAtEndNode)
-        removeNode(newlineAtEndNode);
+    
+    removeInterchangeNodes(holder->firstChild());
     
     removeUnrenderedNodes(holder.get());
     restoreTestRenderingNodesToFragment(holder.get());
@@ -256,6 +236,42 @@ void ReplacementFragment::removeUnrenderedNodes(Node* holder)
         removeNode(unrendered[i]);
 }
 
+void ReplacementFragment::removeInterchangeNodes(Node* startNode)
+{
+    Node* node = startNode;
+    Node* newlineAtStartNode = 0;
+    Node* newlineAtEndNode = 0;
+    while (node) {
+        Node *next = node->traverseNextNode();
+        if (isInterchangeNewlineNode(node)) {
+            if (next || node == startNode) {
+                m_hasInterchangeNewlineAtStart = true;
+                newlineAtStartNode = node;
+            }
+            else {
+                m_hasInterchangeNewlineAtEnd = true;
+                newlineAtEndNode = node;
+            }
+        }
+        else if (isInterchangeConvertedSpaceSpan(node)) {
+            RefPtr<Node> n = 0;
+            while ((n = node->firstChild())) {
+                removeNode(n);
+                insertNodeBefore(n.get(), node);
+            }
+            removeNode(node);
+            if (n)
+                next = n->traverseNextNode();
+        }
+        node = next;
+    }
+
+    if (newlineAtStartNode)
+        removeNode(newlineAtStartNode);
+    if (newlineAtEndNode)
+        removeNode(newlineAtEndNode);
+}
+
 ReplaceSelectionCommand::ReplaceSelectionCommand(Document* document, PassRefPtr<DocumentFragment> fragment,
         bool selectReplacement, bool smartReplace, bool matchStyle, bool preventNesting,
         EditAction editAction) 
@@ -710,7 +726,7 @@ void ReplaceSelectionCommand::completeHTMLReplacement(const Position &lastPositi
         start = Position(firstLeaf, 0);
         end = Position(lastLeaf, maxDeepOffset(lastLeaf));
         
-        // FIXME: Should we treat all spaces in incoming content as having been rendered?
+        // FIXME (11475): Remove this and require that the creator of the fragment to use nbsps.
         rebalanceWhitespaceAt(start);
         rebalanceWhitespaceAt(end);
 
index b49ca07fa52762d578a532a514049605551ed801..a6b7089a0c0ca51ff09d8f213a7fcab58f9ad247 100644 (file)
@@ -54,6 +54,7 @@ private:
     PassRefPtr<Node> insertFragmentForTestRendering(Node* context);
     void removeUnrenderedNodes(Node*);
     void restoreTestRenderingNodesToFragment(Node*);
+    void removeInterchangeNodes(Node*);
     
     void removeNodePreservingChildren(Node*);
     void insertNodeBefore(Node* node, Node* refNode);