Title: [99262] trunk/Source/WebCore
Revision
99262
Author
[email protected]
Date
2011-11-03 21:52:03 -0700 (Thu, 03 Nov 2011)

Log Message

REGRESSION (r99076): Pasting into password fields is broken
https://bugs.webkit.org/show_bug.cgi?id=71483

Reviewed by Darin Adler.

The bug was caused by plainText serializing secured (instead of original) text.
Fixed the bug by adding new TextIterator behavior that serializes the original text
and using it in ReplacementFragment::ReplacementFragment.

* editing/ReplaceSelectionCommand.cpp:
(WebCore::ReplacementFragment::ReplacementFragment):
* editing/TextIterator.cpp:
(WebCore::TextIterator::TextIterator):
(WebCore::TextIterator::emitText):
* editing/TextIterator.h:

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (99261 => 99262)


--- trunk/Source/WebCore/ChangeLog	2011-11-04 04:18:05 UTC (rev 99261)
+++ trunk/Source/WebCore/ChangeLog	2011-11-04 04:52:03 UTC (rev 99262)
@@ -1,3 +1,21 @@
+2011-11-03  Ryosuke Niwa  <[email protected]>
+
+        REGRESSION (r99076): Pasting into password fields is broken
+        https://bugs.webkit.org/show_bug.cgi?id=71483
+
+        Reviewed by Darin Adler.
+
+        The bug was caused by plainText serializing secured (instead of original) text.
+        Fixed the bug by adding new TextIterator behavior that serializes the original text
+        and using it in ReplacementFragment::ReplacementFragment.
+
+        * editing/ReplaceSelectionCommand.cpp:
+        (WebCore::ReplacementFragment::ReplacementFragment):
+        * editing/TextIterator.cpp:
+        (WebCore::TextIterator::TextIterator):
+        (WebCore::TextIterator::emitText):
+        * editing/TextIterator.h:
+
 2011-11-03  Eric Carlson  <[email protected]>
 
         Add TrackEvent

Modified: trunk/Source/WebCore/editing/ReplaceSelectionCommand.cpp (99261 => 99262)


--- trunk/Source/WebCore/editing/ReplaceSelectionCommand.cpp	2011-11-04 04:18:05 UTC (rev 99261)
+++ trunk/Source/WebCore/editing/ReplaceSelectionCommand.cpp	2011-11-04 04:52:03 UTC (rev 99262)
@@ -163,7 +163,7 @@
     }
     
     RefPtr<Range> range = VisibleSelection::selectionFromContentsOfNode(holder.get()).toNormalizedRange();
-    String text = plainText(range.get());
+    String text = plainText(range.get(), TextIteratorEmitsOriginalText);
 
     removeInterchangeNodes(holder.get());
     removeUnrenderedNodes(holder.get());

Modified: trunk/Source/WebCore/editing/TextIterator.cpp (99261 => 99262)


--- trunk/Source/WebCore/editing/TextIterator.cpp	2011-11-04 04:18:05 UTC (rev 99261)
+++ trunk/Source/WebCore/editing/TextIterator.cpp	2011-11-04 04:52:03 UTC (rev 99262)
@@ -257,6 +257,7 @@
     , m_emitsCharactersBetweenAllVisiblePositions(false)
     , m_entersTextControls(false)
     , m_emitsTextWithoutTranscoding(false)
+    , m_emitsOriginalText(false)
     , m_handledFirstLetter(false)
     , m_ignoresStyleVisibility(false)
     , m_emitsObjectReplacementCharacters(false)
@@ -277,6 +278,7 @@
     , m_emitsCharactersBetweenAllVisiblePositions(behavior & TextIteratorEmitsCharactersBetweenAllVisiblePositions)
     , m_entersTextControls(behavior & TextIteratorEntersTextControls)
     , m_emitsTextWithoutTranscoding(behavior & TextIteratorEmitsTextsWithoutTranscoding)
+    , m_emitsOriginalText(behavior & TextIteratorEmitsOriginalText)
     , m_handledFirstLetter(false)
     , m_ignoresStyleVisibility(behavior & TextIteratorIgnoresStyleVisibility)
     , m_emitsObjectReplacementCharacters(behavior & TextIteratorEmitsObjectReplacementCharacters)
@@ -991,7 +993,7 @@
 void TextIterator::emitText(Node* textNode, RenderObject* renderObject, int textStartOffset, int textEndOffset)
 {
     RenderText* renderer = toRenderText(renderObject);
-    m_text = m_emitsTextWithoutTranscoding ? renderer->textWithoutTranscoding() : renderer->text();
+    m_text = m_emitsOriginalText ? renderer->originalText() : (m_emitsTextWithoutTranscoding ? renderer->textWithoutTranscoding() : renderer->text());
     ASSERT(m_text.characters());
     ASSERT(0 <= textStartOffset && textStartOffset < static_cast<int>(m_text.length()));
     ASSERT(0 <= textEndOffset && textEndOffset <= static_cast<int>(m_text.length()));

Modified: trunk/Source/WebCore/editing/TextIterator.h (99261 => 99262)


--- trunk/Source/WebCore/editing/TextIterator.h	2011-11-04 04:18:05 UTC (rev 99261)
+++ trunk/Source/WebCore/editing/TextIterator.h	2011-11-04 04:52:03 UTC (rev 99262)
@@ -42,7 +42,8 @@
     TextIteratorEntersTextControls = 1 << 1,
     TextIteratorEmitsTextsWithoutTranscoding = 1 << 2,
     TextIteratorIgnoresStyleVisibility = 1 << 3,
-    TextIteratorEmitsObjectReplacementCharacters = 1 << 4
+    TextIteratorEmitsObjectReplacementCharacters = 1 << 4,
+    TextIteratorEmitsOriginalText = 1 << 5
 };
     
 // FIXME: Can't really answer this question correctly without knowing the white-space mode.
@@ -176,6 +177,8 @@
 
     // Used when we want texts for copying, pasting, and transposing.
     bool m_emitsTextWithoutTranscoding;
+    // Used in pasting inside password field.
+    bool m_emitsOriginalText;
     // Used when deciding text fragment created by :first-letter should be looked into.
     bool m_handledFirstLetter;
     // Used when the visibility of the style should not affect text gathering.
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to