LayoutTests:
authorjusting <justing@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 7 Apr 2006 19:36:59 +0000 (19:36 +0000)
committerjusting <justing@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 7 Apr 2006 19:36:59 +0000 (19:36 +0000)
        Reviewed by adele
        <http://bugzilla.opendarwin.org/show_bug.cgi?id=8219>
        REGRESSION: Two extra newlines added when pasting a single styled line into a plaintext-only region

        Updated to relfect fix:
        * editing/pasteboard/8145-1-expected.checksum:
        * editing/pasteboard/8145-1-expected.png:
        * editing/pasteboard/8145-1-expected.txt:
        * editing/pasteboard/8145-1.html:

WebCore:

        Reviewed by adele

        <http://bugzilla.opendarwin.org/show_bug.cgi?id=8219>
        REGRESSION: Two extra newlines added when pasting a single styled line into a plaintext-only region

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplacementFragment::ReplacementFragment):
        Converting the fragment to plaintext introduced an extraneous newline because
        the range passed to plainText ended after the paragraph containing the fragment
        built from the markup that TextEdit put on the paste board.  TextIterator will
        emit a newline when it exits a paragraph.
        Two extra newlines were added because the '\n' in the plaintext string turns
        into an interchange newline, which isn't removed because of 8250, and the
        interchange newline looks like inline content that requires the insertion of
        a paragraph separator during paste.
        Fixed by creating a range using VisiblePositions at the start and the end of
        the node that holds the fragment during paste's test rendering.

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

LayoutTests/ChangeLog
LayoutTests/editing/pasteboard/8145-1-expected.checksum
LayoutTests/editing/pasteboard/8145-1-expected.png
LayoutTests/editing/pasteboard/8145-1-expected.txt
LayoutTests/editing/pasteboard/8145-1.html
WebCore/ChangeLog
WebCore/editing/ReplaceSelectionCommand.cpp

index bf40982477b4f9499b4425716b5be96810afe3d3..a649ec171ee1612c258dcb974b0858e1b692ab1a 100644 (file)
@@ -1,3 +1,15 @@
+2006-04-07  Justin Garcia  <justin.garcia@apple.com>
+
+        Reviewed by adele
+        <http://bugzilla.opendarwin.org/show_bug.cgi?id=8219>
+        REGRESSION: Two extra newlines added when pasting a single styled line into a plaintext-only region
+
+        Updated to relfect fix:
+        * editing/pasteboard/8145-1-expected.checksum:
+        * editing/pasteboard/8145-1-expected.png:
+        * editing/pasteboard/8145-1-expected.txt:
+        * editing/pasteboard/8145-1.html:
+
 2006-04-07  Justin Garcia  <justin.garcia@apple.com>
 
         Reviewed by harrison
index 0b0d1f9b9c2c8ade0a42defed00bffd1d3903a9b..7b9c069d6ae9667d9650319940c212db4ace5549 100644 (file)
@@ -1 +1 @@
-477f32221941a5668a307333be41f785
\ No newline at end of file
+1b24a9e9a749834e7f2c400155d4c91e
\ No newline at end of file
index 8a2db4eb4b89e6dc6bd281eaa106fa5f76db4a49..e3977ce111dac4189f2172724e41e658da4d5d8a 100644 (file)
Binary files a/LayoutTests/editing/pasteboard/8145-1-expected.png and b/LayoutTests/editing/pasteboard/8145-1-expected.png differ
index ac970ecbb5692285ab359b6d07bc9011f2a922bb..496c2ba93723846211136dda66b0448dfcabb79a 100644 (file)
@@ -1,7 +1,7 @@
 EDITING DELEGATE: shouldBeginEditingInDOMRange:range from 0 of DIV > BODY > HTML > #document to 0 of DIV > BODY > HTML > #document
 EDITING DELEGATE: webViewDidBeginEditing:WebViewDidBeginEditingNotification
 EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
-EDITING DELEGATE: shouldChangeSelectedDOMRange:range from 0 of DIV > BODY > HTML > #document to 0 of DIV > BODY > HTML > #document toDOMRange:range from 1 of DIV > DIV > BODY > HTML > #document to 1 of DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
+EDITING DELEGATE: shouldChangeSelectedDOMRange:range from 0 of DIV > BODY > HTML > #document to 0 of DIV > BODY > HTML > #document toDOMRange:range from 11 of #text > DIV > BODY > HTML > #document to 11 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,19 +9,10 @@ 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 {P} at (0,0) size 784x36
-        RenderText {TEXT} at (0,0) size 427x18
-          text run at (0,0) width 427: "This is a replica of the paste that caused the crash covered by 8145. "
-        RenderInline {B} at (0,0) size 775x36
-          RenderText {TEXT} at (427,0) size 775x36
-            text run at (427,0) width 216: "It currently demonstrates 8219. "
-            text run at (643,0) width 132: "Two extra newlines"
-            text run at (0,18) width 477: "are added when pasting a single styled line into a plaintext-only region."
-      RenderBlock {DIV} at (0,52) size 784x56 [border: (1px solid #000000)]
-        RenderBlock (anonymous) at (1,1) size 782x18
-          RenderText {TEXT} at (0,0) size 71x18
-            text run at (0,0) width 71: "foo bar baz"
-        RenderBlock {DIV} at (1,19) size 782x36
-          RenderBR {BR} at (0,0) size 0x18
-          RenderBR {BR} at (0,18) size 0x18
-caret: position 0 of child 1 {BR} of child 1 {DIV} of child 2 {DIV} of child 0 {BODY} of child 0 {HTML} of document
+      RenderBlock {P} at (0,0) size 784x18
+        RenderText {TEXT} at (0,0) size 423x18
+          text run at (0,0) width 423: "This is a replica of the paste that caused the crash covered by 8145."
+      RenderBlock {DIV} at (0,34) size 784x20 [border: (1px solid #000000)]
+        RenderText {TEXT} at (1,1) size 71x18
+          text run at (1,1) width 71: "foo bar baz"
+caret: position 11 of child 0 {TEXT} of child 2 {DIV} of child 0 {BODY} of child 0 {HTML} of document
index fb365d4e943d7924a06339328f91f13b4c07b4db..fa18e87de06bf7275ac049fcbd184d173c7fe9a9 100644 (file)
@@ -1,9 +1,9 @@
-<p>This is a replica of the paste that caused the crash covered by 8145.  <b>It currently demonstrates 8219.  Two extra newlines are added when pasting a single styled line into a plaintext-only region.</b></p>
-<div id="test1" style="border: 1px solid black;" contenteditable="plaintext-only"></div>
+<p>This is a replica of the paste that caused the crash covered by 8145.</p>
+<div id="test" style="border: 1px solid black;" contenteditable="plaintext-only"></div>
 
 <script>
 var s = window.getSelection();
-var p = document.getElementById("test1");
+var p = document.getElementById("test");
 p.innerHTML = "";
 s.setPosition(p, 0);
 var html = "<p style='margin: 0; font: 12px Helvetica'>foo <b>bar</b> baz</p>" + '\n';
index 2ed8fc289daee214ba9b84fb2b3d3098a81edc1e..fe962e2132f841d4f47307435fcd3053b4afb849 100644 (file)
@@ -1,3 +1,23 @@
+2006-04-07  Justin Garcia  <justin.garcia@apple.com>
+
+        Reviewed by adele
+        
+        <http://bugzilla.opendarwin.org/show_bug.cgi?id=8219>
+        REGRESSION: Two extra newlines added when pasting a single styled line into a plaintext-only region
+
+        * editing/ReplaceSelectionCommand.cpp:
+        (WebCore::ReplacementFragment::ReplacementFragment):
+        Converting the fragment to plaintext introduced an extraneous newline because
+        the range passed to plainText ended after the paragraph containing the fragment
+        built from the markup that TextEdit put on the paste board.  TextIterator will
+        emit a newline when it exits a paragraph.
+        Two extra newlines were added because the '\n' in the plaintext string turns
+        into an interchange newline, which isn't removed because of 8250, and the
+        interchange newline looks like inline content that requires the insertion of
+        a paragraph separator during paste.
+        Fixed by creating a range using VisiblePositions at the start and the end of 
+        the node that holds the fragment during paste's test rendering.
+
 2006-04-06  Justin Garcia  <justin.garcia@apple.com>
 
         Reviewed by harrison
index fc52f1cd9e8648003dc1eaf6d4af207548e3a19c..c79df875a9539d1908d041dd7082b34b46d60871 100644 (file)
@@ -123,16 +123,16 @@ ReplacementFragment::ReplacementFragment(Document *document, DocumentFragment *f
         return;
             
     RefPtr<Node> holder = insertFragmentForTestRendering();
-
-    RefPtr<Range> range = new Range(holder->document());
-    ExceptionCode ec = 0;
-    range->selectNodeContents(holder.get(), ec);
-    ASSERT(ec == 0);
+    
+    Selection selectionAroundFragment = Selection::selectionFromContentsOfNode(holder.get());
+    RefPtr<Range> range = selectionAroundFragment.toRange();
     String text = plainText(range.get());
     String newText = text.copy();
     // Give the root a chance to change the text.
     RefPtr<Event> evt = new BeforeTextInsertedEvent(newText);
+    ExceptionCode ec = 0;
     editableRoot->dispatchEvent(evt, ec, true);
+    ASSERT(ec == 0);
     if (text != newText || !editableRoot->isContentRichlyEditable()) {
         removeNode(holder);
         m_fragment = createFragmentFromText(document, newText.deprecatedString());