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 bf40982..a649ec1 100644 (file)
@@ -1,5 +1,17 @@
 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
         
         <http://bugzilla.opendarwin.org/show_bug.cgi?id=8145>
index 0b0d1f9..7b9c069 100644 (file)
@@ -1 +1 @@
-477f32221941a5668a307333be41f785
\ No newline at end of file
+1b24a9e9a749834e7f2c400155d4c91e
\ No newline at end of file
index 8a2db4e..e3977ce 100644 (file)
Binary files a/LayoutTests/editing/pasteboard/8145-1-expected.png and b/LayoutTests/editing/pasteboard/8145-1-expected.png differ
index ac970ec..496c2ba 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 fb365d4..fa18e87 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 2ed8fc2..fe962e2 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 fc52f1c..c79df87 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());