2010-12-23 Ryosuke Niwa <rniwa@webkit.org>
Reviewed by Darin Adler.
Selection becomes stale when CharacterData is manipulated directly
https://bugs.webkit.org/show_bug.cgi?id=51389
The bug was caused by SelectionController's not adjusting selection when CharacterData's
m_data is modified by its API.
Fixed the bug by adding textWillBeReplaced to SelectionController and calling it in
CharacterData::textWillBeReplaced. Added newLength to setDataAndUpdate, which is passed to
textWillBeReplaced because inserting, replacing, or removing data may require moving
the offset of the selection end points (done by shouldRemovePositionAfterAdoptingTextReplacement).
Also fixed the condition for determining whether or not a node intersects the selection
in respondToNodeModification, which is extracted from nodeWillBeRemoved. The old condition
failed to recognize certain cases when selection started and ended with non-zero offsets.
Tests: editing/selection/character-data-mutation-crash.html
editing/selection/character-data-mutation.html
* dom/CharacterData.cpp:
(WebCore::CharacterData::setData): Passes newLegnth to setDataAndUpdate.
(WebCore::CharacterData::appendData): Ditto.
(WebCore::CharacterData::insertData): Ditto.
(WebCore::CharacterData::deleteData): Ditto.
(WebCore::CharacterData::replaceData): Ditto.
(WebCore::CharacterData::setDataAndUpdate): Added newLegnth to the argument list,
and renamed lengthOfReplacedData to oldLength; calls textWillBeReplaced.
* dom/CharacterData.h:
* editing/SelectionController.cpp:
(WebCore::removingNodeRemovesPosition): Removed indentations from blank lines.
(WebCore::SelectionController::nodeWillBeRemoved): Calls nodeWillBeRemoved.
(WebCore::SelectionController::respondToNodeModification): Extracted from nodeWillBeRemoved;
fixed the logic to figure out whether a node is inside the range or not.
(WebCore::shouldRemovePositionAfterAdoptingTextReplacement): Added.
(WebCore::SelectionController::textWillBeReplaced): Added.
* editing/SelectionController.h:
2010-12-23 Ryosuke Niwa <rniwa@webkit.org>
Reviewed by Darin Adler.
Selection becomes stale when CharacterData is manipulated directly
https://bugs.webkit.org/show_bug.cgi?id=51389
Added tests to ensure WebKit adjusts or clears selection when the start container
or the end container of the selection's first range is modified by CharacterData's API.
Many editing tests had to be rebaselined due to different editing delegate dumps
caused by WebKit's properly adjusting selection's offsets as editing commands modify the DOM.
* editing/deleting/delete-by-word-001-expected.txt:
* editing/deleting/delete-by-word-002-expected.txt:
* editing/deleting/delete-ligature-001-expected.txt:
* editing/deleting/delete-ligature-002-expected.txt:
* editing/deleting/delete-ligature-003-expected.txt:
* editing/deleting/skip-virama-001-expected.txt:
* editing/execCommand/createLink-expected.txt:
* editing/execCommand/hilitecolor-expected.txt:
* editing/execCommand/unlink-expected.txt:
* editing/inserting/insert-thai-characters-001-expected.txt:
* editing/pasteboard/copy-in-password-field-expected.txt:
* editing/pasteboard/paste-into-anchor-text-expected.txt:
* editing/selection/character-data-mutation-crash-expected.txt: Added.
* editing/selection/character-data-mutation-crash.html: Added.
* editing/selection/character-data-mutation-expected.txt: Added.
* editing/selection/character-data-mutation.html: Added.
* editing/style/remove-underline-from-stylesheet-expected.txt:
* editing/style/typing-style-003-expected.txt:
* editing/undo/redo-style-expected.txt:
* platform/mac/editing/deleting/collapse-whitespace-3587601-fix-expected.txt:
* platform/mac/editing/deleting/delete-3608430-fix-expected.txt:
* platform/mac/editing/deleting/delete-3608445-fix-expected.txt:
* platform/mac/editing/deleting/delete-3608462-fix-expected.txt:
* platform/mac/editing/deleting/delete-after-span-ws-001-expected.txt:
* platform/mac/editing/deleting/delete-after-span-ws-002-expected.txt:
* platform/mac/editing/deleting/delete-after-span-ws-003-expected.txt:
* platform/mac/editing/deleting/delete-and-undo-expected.txt:
* platform/mac/editing/deleting/delete-block-merge-contents-010-expected.txt:
* platform/mac/editing/deleting/delete-block-table-expected.txt:
* platform/mac/editing/deleting/delete-br-007-expected.txt:
* platform/mac/editing/deleting/delete-character-001-expected.txt:
* platform/mac/editing/deleting/delete-contiguous-ws-001-expected.txt:
* platform/mac/editing/deleting/delete-hr-expected.txt:
* platform/mac/editing/deleting/delete-leading-ws-001-expected.txt:
* platform/mac/editing/deleting/delete-line-end-ws-001-expected.txt:
* platform/mac/editing/deleting/delete-line-end-ws-002-expected.txt:
* platform/mac/editing/deleting/delete-listitem-001-expected.txt:
* platform/mac/editing/deleting/delete-selection-001-expected.txt:
* platform/mac/editing/deleting/delete-tab-001-expected.txt:
* platform/mac/editing/deleting/delete-tab-002-expected.txt:
* platform/mac/editing/deleting/delete-tab-003-expected.txt:
* platform/mac/editing/deleting/delete-tab-004-expected.txt:
* platform/mac/editing/deleting/delete-trailing-ws-001-expected.txt:
* platform/mac/editing/deleting/delete-trailing-ws-002-expected.txt:
* platform/mac/editing/deleting/delete-ws-fixup-001-expected.txt:
* platform/mac/editing/deleting/delete-ws-fixup-002-expected.txt:
* platform/mac/editing/deleting/forward-delete-expected.txt:
* platform/mac/editing/deleting/non-smart-delete-expected.txt:
* platform/mac/editing/deleting/smart-delete-001-expected.txt:
* platform/mac/editing/deleting/smart-delete-002-expected.txt:
* platform/mac/editing/deleting/smart-delete-003-expected.txt:
* platform/mac/editing/deleting/smart-delete-004-expected.txt:
* platform/mac/editing/execCommand/insertHorizontalRule-expected.txt:
* platform/mac/editing/input/firstrectforcharacterrange-styled-expected.txt:
* platform/mac/editing/input/text-input-controller-expected.txt:
* platform/mac/editing/inserting/4278698-expected.txt:
* platform/mac/editing/inserting/editing-empty-divs-expected.txt:
* platform/mac/editing/inserting/insert-3654864-fix-expected.txt:
* platform/mac/editing/inserting/insert-after-delete-001-expected.txt:
* platform/mac/editing/inserting/insert-br-003-expected.txt:
* platform/mac/editing/inserting/insert-br-006-expected.txt:
* platform/mac/editing/inserting/insert-br-007-expected.txt:
* platform/mac/editing/inserting/insert-br-008-expected.txt:
* platform/mac/editing/inserting/insert-br-009-expected.txt:
* platform/mac/editing/inserting/insert-br-at-tabspan-002-expected.txt:
* platform/mac/editing/inserting/insert-br-at-tabspan-003-expected.txt:
* platform/mac/editing/inserting/insert-div-003-expected.txt:
* platform/mac/editing/inserting/insert-div-006-expected.txt:
* platform/mac/editing/inserting/insert-div-008-expected.txt:
* platform/mac/editing/inserting/insert-div-024-expected.txt:
* platform/mac/editing/inserting/insert-space-in-empty-doc-expected.txt:
* platform/mac/editing/inserting/insert-tab-003-expected.txt:
* platform/mac/editing/inserting/insert-text-at-tabspan-001-expected.txt:
* platform/mac/editing/inserting/insert-text-at-tabspan-002-expected.txt:
* platform/mac/editing/inserting/insert-text-with-newlines-expected.txt:
* platform/mac/editing/inserting/typing-001-expected.txt:
* platform/mac/editing/inserting/typing-002-expected.txt:
* platform/mac/editing/inserting/typing-003-expected.txt:
* platform/mac/editing/inserting/typing-around-br-001-expected.txt:
* platform/mac/editing/inserting/typing-around-image-001-expected.txt:
* platform/mac/editing/pasteboard/4076267-2-expected.txt:
* platform/mac/editing/pasteboard/4076267-3-expected.txt:
* platform/mac/editing/pasteboard/bad-placeholder-expected.txt:
* platform/mac/editing/pasteboard/cut-text-001-expected.txt:
* platform/mac/editing/pasteboard/emacs-ctrl-a-k-y-expected.txt:
* platform/mac/editing/pasteboard/emacs-ctrl-k-y-001-expected.txt:
* platform/mac/editing/pasteboard/interchange-newline-1-expected.txt:
* platform/mac/editing/pasteboard/merge-end-1-expected.txt:
* platform/mac/editing/pasteboard/merge-end-2-expected.txt:
* platform/mac/editing/pasteboard/merge-end-4-expected.txt:
* platform/mac/editing/pasteboard/merge-end-list-expected.txt:
* platform/mac/editing/pasteboard/merge-end-table-expected.txt:
* platform/mac/editing/pasteboard/paste-match-style-001-expected.txt:
* platform/mac/editing/pasteboard/paste-text-001-expected.txt:
* platform/mac/editing/pasteboard/paste-text-019-expected.txt:
* platform/mac/editing/pasteboard/paste-text-at-tabspan-001-expected.txt:
* platform/mac/editing/pasteboard/paste-text-at-tabspan-002-expected.txt:
* platform/mac/editing/pasteboard/paste-text-at-tabspan-003-expected.txt:
* platform/mac/editing/pasteboard/paste-xml-expected.txt:
* platform/mac/editing/pasteboard/pasting-object-expected.txt:
* platform/mac/editing/pasteboard/smart-paste-002-expected.txt:
* platform/mac/editing/pasteboard/smart-paste-006-expected.txt:
* platform/mac/editing/pasteboard/smart-paste-007-expected.txt:
* platform/mac/editing/pasteboard/subframe-dragndrop-1-expected.txt:
* platform/mac/editing/spelling/spelling-expected.txt:
* platform/mac/editing/style/style-3681552-fix-001-expected.txt:
* platform/mac/editing/style/style-3681552-fix-002-expected.txt:
* platform/mac/editing/style/style-boundary-002-expected.txt:
* platform/mac/editing/style/style-boundary-005-expected.txt:
* platform/mac/editing/style/typing-style-001-expected.txt:
* platform/mac/editing/style/typing-style-002-expected.txt:
* platform/mac/editing/style/unbold-in-bold-expected.txt:
* platform/mac/editing/undo/4063751-expected.txt:
* platform/mac/editing/undo/redo-typing-001-expected.txt:
* platform/mac/editing/undo/undo-combined-delete-boundary-expected.txt:
* platform/mac/editing/undo/undo-combined-delete-expected.txt:
* platform/mac/editing/undo/undo-delete-boundary-expected.txt:
* platform/mac/editing/undo/undo-delete-expected.txt:
* platform/mac/editing/undo/undo-forward-delete-boundary-expected.txt:
* platform/mac/editing/undo/undo-forward-delete-expected.txt:
* platform/mac/editing/undo/undo-misspellings-expected.txt:
* platform/mac/editing/undo/undo-typing-001-expected.txt:
* platform/mac/editing/unsupported-content/list-type-after-expected.txt:
* platform/mac/editing/unsupported-content/list-type-before-expected.txt:
* platform/mac/editing/unsupported-content/table-type-after-expected.txt:
* platform/mac/editing/unsupported-content/table-type-before-expected.txt:
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@74593 268f45cc-cd09-0410-ab3c-d52691b4dbfc
132 files changed