Setting innerText to an empty string on editable div loses focus
https://bugs.webkit.org/show_bug.cgi?id=62092
Patch by Una Sabovic <una.sabovic@palm.com> on 2011-09-28
Reviewed by Ryosuke Niwa.
Source/WebCore:
When selection start or end node is being deleted do not clear the selection.
Instead update the start/end position to an equivalent parent-anchored positions.
When text is inserted/deleted update selection per range modification spec:
http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-Mutation
Tests: editing/selection/document-mutation.html
editing/selection/editable-div-clear-on-keydown.html
* editing/FrameSelection.cpp:
(WebCore::FrameSelection::respondToNodeModification):
(WebCore::updatePositionAfterAdoptingTextReplacement):
(WebCore::FrameSelection::textWillBeReplaced):
* editing/htmlediting.cpp:
(WebCore::updatePositionForNodeRemoval):
LayoutTests:
Added test to make sure that caret is still present in a focused editable div after its text is deleted.
Updated editing tests to not expect that deleting selection start or end node will clear the selection.
Added test to exercise range modification examples from
http://www.w3.org/TR/DOM-Level-2-Traversal-Range/ranges.html#Level-2-Range-Mutation
* editing/deleting/5546763-expected.txt:
* editing/deleting/delete-4038408-fix-expected.txt:
* editing/deleting/delete-all-text-in-text-field-assertion-expected.txt:
* editing/deleting/delete-br-011-expected.txt:
* editing/deleting/delete-by-word-001-expected.txt:
* editing/deleting/delete-by-word-002-expected.txt:
* editing/deleting/delete-cell-contents-expected.txt:
* editing/deleting/delete-ligature-002-expected.txt:
* editing/deleting/delete-ligature-003-expected.txt:
* editing/deleting/delete-select-all-002-expected.txt:
* editing/deleting/delete-select-all-003-expected.txt:
* editing/deleting/delete-to-end-of-paragraph-expected.txt:
* editing/deleting/merge-paragraph-into-blockquote-expected.txt:
* editing/deleting/paragraph-in-preserveNewline-expected.txt:
* editing/deleting/pruning-after-merge-1-expected.txt:
* editing/deleting/skip-virama-001-expected.txt:
* editing/deleting/whitespace-pre-1-expected.txt:
* editing/execCommand/4920488-expected.txt:
* editing/execCommand/crash-indenting-list-item-expected.txt:
* editing/execCommand/createLink-expected.txt:
* editing/execCommand/format-block-expected.txt:
* editing/execCommand/format-block-multiple-paragraphs-in-pre-expected.txt:
* editing/execCommand/format-block-with-braces-expected.txt:
* editing/execCommand/hilitecolor-expected.txt:
* editing/execCommand/indent-nested-lists-1-expected.txt:
* editing/execCommand/indent-nested-lists-2-expected.txt:
* editing/execCommand/indent-nested-lists-3-expected.txt:
* editing/execCommand/indent-nested-lists-4-expected.txt:
* editing/execCommand/indent-nested-lists-5-expected.txt:
* editing/execCommand/indent-nested-lists-6-expected.txt:
* editing/execCommand/indent-nested-lists-7-expected.txt:
* editing/execCommand/indent-paragraphs-expected.txt:
* editing/execCommand/indent-with-style-expected.txt:
* editing/execCommand/insertHTML-expected.txt:
* editing/execCommand/outdent-nested-lists-1-expected.txt:
* editing/execCommand/outdent-nested-lists-2-expected.txt:
* editing/execCommand/outdent-nested-lists-3-expected.txt:
* editing/execCommand/outdent-nested-lists-4-expected.txt:
* editing/execCommand/queryCommandState-01-expected.txt:
* editing/execCommand/remove-formatting-2-expected.txt:
* editing/execCommand/remove-formatting-expected.txt:
* editing/execCommand/remove-list-1-expected.txt:
* editing/execCommand/remove-list-items-expected.txt:
* editing/execCommand/switch-list-type-expected.txt:
* editing/execCommand/unlink-expected.txt:
* editing/inserting/insert-3786362-fix-expected.txt:
* editing/inserting/insert-div-021-expected.txt:
* editing/inserting/insert-paragraph-at-end-of-line-expected.txt:
* editing/inserting/insert-thai-characters-001-expected.txt:
* editing/pasteboard/4242293-1-expected.txt:
* editing/pasteboard/5065605-expected.txt:
* editing/pasteboard/block-wrappers-necessary-expected.txt:
* editing/pasteboard/copy-in-password-field-expected.txt:
* editing/pasteboard/copy-text-with-backgroundcolor-expected.txt:
* editing/pasteboard/insert-div-text-into-text-expected.txt:
* editing/pasteboard/interchange-newline-1-expected.txt:
* editing/pasteboard/interchange-newline-3-expected.txt:
* editing/pasteboard/interchange-newline-4-expected.txt:
* editing/pasteboard/merge-end-2-expected.txt:
* editing/pasteboard/merge-end-3-expected.txt:
* editing/pasteboard/merge-end-4-expected.txt:
* editing/pasteboard/merge-end-5-expected.txt:
* editing/pasteboard/merge-end-list-2-expected.txt:
* editing/pasteboard/merge-end-list-expected.txt:
* editing/pasteboard/merge-end-table-2-expected.txt:
* editing/pasteboard/merge-end-table-expected.txt:
* editing/pasteboard/nested-blocks-with-text-area-expected.txt:
* editing/pasteboard/nested-blocks-with-text-field-expected.txt:
* editing/pasteboard/paste-into-anchor-text-expected.txt:
* editing/pasteboard/paste-list-001-expected.txt:
* editing/pasteboard/paste-table-001-expected.txt:
* editing/pasteboard/paste-table-002-expected.txt:
* editing/pasteboard/paste-text-001-expected.txt:
* editing/pasteboard/paste-text-002-expected.txt:
* editing/pasteboard/paste-text-003-expected.txt:
* editing/pasteboard/paste-text-011-expected.txt:
* editing/pasteboard/paste-text-017-expected.txt:
* editing/pasteboard/paste-text-018-expected.txt:
* editing/pasteboard/paste-text-at-tabspan-001-expected.txt:
* editing/pasteboard/paste-text-at-tabspan-002-expected.txt:
* editing/pasteboard/paste-text-with-style-expected.txt:
* editing/pasteboard/prevent-block-nesting-01-expected.txt:
* editing/pasteboard/select-element-1-expected.txt:
* editing/pasteboard/smart-paste-003-expected.txt:
* editing/pasteboard/smart-paste-004-expected.txt:
* editing/pasteboard/smart-paste-005-expected.txt:
* editing/pasteboard/smart-paste-006-expected.txt:
* editing/selection/5497643-expected.txt:
* editing/selection/5497643.html:
* editing/selection/character-data-mutation-expected.txt:
* editing/selection/character-data-mutation.html:
* editing/selection/document-mutation-expected.txt: Added.
* editing/selection/document-mutation.html: Added.
* editing/selection/editable-div-clear-on-keydown-expected.txt: Added.
* editing/selection/editable-div-clear-on-keydown.html: Added.
* editing/selection/regional-indicators.html:
* editing/style/remove-underline-from-stylesheet-expected.txt:
* editing/style/typing-style-003-expected.txt:
* editing/undo/redo-style-expected.txt:
* editing/undo/replace-text-in-node-preserving-markers-crash-expected.txt:
* editing/undo/undo-indent-expected.txt:
* platform/mac/editing/pasteboard/paste-and-match-style-selector-event.html:
* platform/qt/editing/deleting/collapse-whitespace-3587601-fix-expected.txt:
* platform/qt/editing/deleting/delete-3608445-fix-expected.txt:
* platform/qt/editing/deleting/delete-3608462-fix-expected.txt:
* platform/qt/editing/deleting/delete-3775172-fix-expected.txt:
* platform/qt/editing/deleting/delete-3800834-fix-expected.txt:
* platform/qt/editing/deleting/delete-3857753-fix-expected.txt:
* platform/qt/editing/deleting/delete-3865854-fix-expected.txt:
* platform/qt/editing/deleting/delete-3928305-fix-expected.txt:
* platform/qt/editing/deleting/delete-3959464-fix-expected.txt:
* platform/qt/editing/deleting/delete-after-span-ws-002-expected.txt:
* platform/qt/editing/deleting/delete-after-span-ws-003-expected.txt:
* platform/qt/editing/deleting/delete-and-undo-expected.txt:
* platform/qt/editing/deleting/delete-at-paragraph-boundaries-001-expected.txt:
* platform/qt/editing/deleting/delete-at-paragraph-boundaries-002-expected.txt:
* platform/qt/editing/deleting/delete-at-paragraph-boundaries-003-expected.txt:
* platform/qt/editing/deleting/delete-at-paragraph-boundaries-004-expected.txt:
* platform/qt/editing/deleting/delete-at-paragraph-boundaries-005-expected.txt:
* platform/qt/editing/deleting/delete-at-paragraph-boundaries-006-expected.txt:
* platform/qt/editing/deleting/delete-at-paragraph-boundaries-007-expected.txt:
* platform/qt/editing/deleting/delete-at-paragraph-boundaries-009-expected.txt:
* platform/qt/editing/deleting/delete-at-paragraph-boundaries-010-expected.txt:
* platform/qt/editing/deleting/delete-at-paragraph-boundaries-011-expected.txt:
* platform/qt/editing/deleting/delete-block-contents-001-expected.txt:
* platform/qt/editing/deleting/delete-block-contents-002-expected.txt:
* platform/qt/editing/deleting/delete-block-contents-003-expected.txt:
* platform/qt/editing/deleting/delete-block-merge-contents-001-expected.txt:
* platform/qt/editing/deleting/delete-block-merge-contents-002-expected.txt:
* platform/qt/editing/deleting/delete-block-merge-contents-003-expected.txt:
* platform/qt/editing/deleting/delete-block-merge-contents-004-expected.txt:
* platform/qt/editing/deleting/delete-block-merge-contents-005-expected.txt:
* platform/qt/editing/deleting/delete-block-merge-contents-006-expected.txt:
* platform/qt/editing/deleting/delete-block-merge-contents-007-expected.txt:
* platform/qt/editing/deleting/delete-block-merge-contents-008-expected.txt:
* platform/qt/editing/deleting/delete-block-merge-contents-009-expected.txt:
* platform/qt/editing/deleting/delete-block-merge-contents-010-expected.txt:
* platform/qt/editing/deleting/delete-block-merge-contents-012-expected.txt:
* platform/qt/editing/deleting/delete-block-merge-contents-013-expected.txt:
* platform/qt/editing/deleting/delete-block-merge-contents-014-expected.txt:
* platform/qt/editing/deleting/delete-block-merge-contents-015-expected.txt:
* platform/qt/editing/deleting/delete-block-merge-contents-016-expected.txt:
* platform/qt/editing/deleting/delete-block-merge-contents-017-expected.txt:
* platform/qt/editing/deleting/delete-block-merge-contents-018-expected.txt:
* platform/qt/editing/deleting/delete-block-merge-contents-019-expected.txt:
* platform/qt/editing/deleting/delete-block-merge-contents-020-expected.txt:
* platform/qt/editing/deleting/delete-block-merge-contents-021-expected.txt:
* platform/qt/editing/deleting/delete-block-merge-contents-022-expected.txt:
* platform/qt/editing/deleting/delete-block-merge-contents-023-expected.txt:
* platform/qt/editing/deleting/delete-block-merge-contents-024-expected.txt:
* platform/qt/editing/deleting/delete-br-008-expected.txt:
* platform/qt/editing/deleting/delete-br-010-expected.txt:
* platform/qt/editing/deleting/delete-contiguous-ws-001-expected.txt:
* platform/qt/editing/deleting/delete-first-list-item-expected.txt:
* platform/qt/editing/deleting/delete-image-001-expected.txt:
* platform/qt/editing/deleting/delete-image-002-expected.txt:
* platform/qt/editing/deleting/delete-image-003-expected.txt:
* platform/qt/editing/deleting/delete-image-004-expected.txt:
* platform/qt/editing/deleting/delete-leading-ws-001-expected.txt:
* platform/qt/editing/deleting/delete-line-001-expected.txt:
* platform/qt/editing/deleting/delete-line-002-expected.txt:
* platform/qt/editing/deleting/delete-line-003-expected.txt:
* platform/qt/editing/deleting/delete-line-004-expected.txt:
* platform/qt/editing/deleting/delete-line-005-expected.txt:
* platform/qt/editing/deleting/delete-line-006-expected.txt:
* platform/qt/editing/deleting/delete-line-007-expected.txt:
* platform/qt/editing/deleting/delete-line-008-expected.txt:
* platform/qt/editing/deleting/delete-line-009-expected.txt:
* platform/qt/editing/deleting/delete-line-010-expected.txt:
* platform/qt/editing/deleting/delete-line-012-expected.txt:
* platform/qt/editing/deleting/delete-line-013-expected.txt:
* platform/qt/editing/deleting/delete-line-014-expected.txt:
* platform/qt/editing/deleting/delete-line-015-expected.txt:
* platform/qt/editing/deleting/delete-line-016-expected.txt:
* platform/qt/editing/deleting/delete-line-017-expected.txt:
* platform/qt/editing/deleting/delete-line-end-ws-002-expected.txt:
* platform/qt/editing/deleting/delete-listitem-001-expected.txt:
* platform/qt/editing/deleting/delete-listitem-002-expected.txt:
* platform/qt/editing/deleting/delete-selection-001-expected.txt:
* platform/qt/editing/deleting/delete-trailing-ws-001-expected.txt:
* platform/qt/editing/deleting/delete-trailing-ws-002-expected.txt:
* platform/qt/editing/deleting/delete-ws-fixup-002-expected.txt:
* platform/qt/editing/deleting/forward-delete-expected.txt:
* platform/qt/editing/deleting/list-item-1-expected.txt:
* platform/qt/editing/deleting/merge-different-styles-expected.txt:
* platform/qt/editing/deleting/merge-endOfParagraph-expected.txt:
* platform/qt/editing/deleting/merge-no-br-expected.txt:
* platform/qt/editing/deleting/non-smart-delete-expected.txt:
* platform/qt/editing/deleting/pruning-after-merge-2-expected.txt:
* platform/qt/editing/deleting/smart-delete-001-expected.txt:
* platform/qt/editing/deleting/smart-delete-003-expected.txt:
* platform/qt/editing/deleting/smart-delete-004-expected.txt:
* platform/qt/editing/deleting/table-cells-expected.txt:
* platform/qt/editing/execCommand/4641880-1-expected.txt:
* platform/qt/editing/execCommand/4641880-2-expected.txt:
* platform/qt/editing/execCommand/create-list-with-hr-expected.txt:
* platform/qt/editing/execCommand/find-after-replace-expected.txt:
* platform/qt/editing/execCommand/format-block-with-trailing-br-expected.txt:
* platform/qt/editing/execCommand/indent-list-item-expected.txt:
* platform/qt/editing/execCommand/indent-selection-expected.txt:
* platform/qt/editing/execCommand/insert-list-and-stitch-expected.txt:
* platform/qt/editing/execCommand/insertHorizontalRule-expected.txt:
* platform/qt/editing/execCommand/nsresponder-indent-expected.txt:
* platform/qt/editing/execCommand/nsresponder-outdent-expected.txt:
* platform/qt/editing/execCommand/paste-1-expected.txt:
* platform/qt/editing/execCommand/paste-2-expected.txt:
* platform/qt/editing/execCommand/remove-list-from-range-selection-expected.txt:
* platform/qt/editing/execCommand/remove-list-item-1-expected.txt:
* platform/qt/editing/input/emacs-ctrl-o-expected.txt:
* platform/qt/editing/inserting/4278698-expected.txt:
* platform/qt/editing/inserting/editing-empty-divs-expected.txt:
* platform/qt/editing/inserting/insert-3654864-fix-expected.txt:
* platform/qt/editing/inserting/insert-3775316-fix-expected.txt:
* platform/qt/editing/inserting/insert-3851164-fix-expected.txt:
* platform/qt/editing/inserting/insert-after-delete-001-expected.txt:
* platform/qt/editing/inserting/insert-at-end-01-expected.txt:
* platform/qt/editing/inserting/insert-at-end-02-expected.txt:
* platform/qt/editing/inserting/insert-br-001-expected.txt:
* platform/qt/editing/inserting/insert-br-003-expected.txt:
* platform/qt/editing/inserting/insert-br-005-expected.txt:
* platform/qt/editing/inserting/insert-br-006-expected.txt:
* platform/qt/editing/inserting/insert-br-007-expected.txt:
* platform/qt/editing/inserting/insert-br-008-expected.txt:
* platform/qt/editing/inserting/insert-br-at-tabspan-003-expected.txt:
* platform/qt/editing/inserting/insert-div-001-expected.txt:
* platform/qt/editing/inserting/insert-div-002-expected.txt:
* platform/qt/editing/inserting/insert-div-003-expected.txt:
* platform/qt/editing/inserting/insert-div-005-expected.txt:
* platform/qt/editing/inserting/insert-div-006-expected.txt:
* platform/qt/editing/inserting/insert-div-007-expected.txt:
* platform/qt/editing/inserting/insert-div-008-expected.txt:
* platform/qt/editing/inserting/insert-div-009-expected.txt:
* platform/qt/editing/inserting/insert-div-010-expected.txt:
* platform/qt/editing/inserting/insert-div-020-expected.txt:
* platform/qt/editing/inserting/insert-div-023-expected.txt:
* platform/qt/editing/inserting/insert-div-024-expected.txt:
* platform/qt/editing/inserting/insert-div-025-expected.txt:
* platform/qt/editing/inserting/insert-div-026-expected.txt:
* platform/qt/editing/inserting/insert-space-in-empty-doc-expected.txt:
* platform/qt/editing/inserting/insert-text-at-tabspan-001-expected.txt:
* platform/qt/editing/inserting/multiple-lines-selected-expected.txt:
* platform/qt/editing/inserting/paragraph-separator-03-expected.txt:
* platform/qt/editing/inserting/paragraph-separator-in-table-2-expected.txt:
* platform/qt/editing/inserting/redo-expected.txt:
* platform/qt/editing/inserting/return-key-with-selection-001-expected.txt:
* platform/qt/editing/inserting/return-key-with-selection-002-expected.txt:
* platform/qt/editing/inserting/return-key-with-selection-003-expected.txt:
* platform/qt/editing/inserting/typing-001-expected.txt:
* platform/qt/editing/inserting/typing-002-expected.txt:
* platform/qt/editing/inserting/typing-003-expected.txt:
* platform/qt/editing/inserting/typing-around-br-001-expected.txt:
* platform/qt/editing/inserting/typing-around-image-001-expected.txt:
* platform/qt/editing/pasteboard/3976872-expected.txt:
* platform/qt/editing/pasteboard/4076267-2-expected.txt:
* platform/qt/editing/pasteboard/4076267-3-expected.txt:
* platform/qt/editing/pasteboard/4076267-expected.txt:
* platform/qt/editing/pasteboard/8145-3-expected.txt:
* platform/qt/editing/pasteboard/bad-placeholder-expected.txt:
* platform/qt/editing/pasteboard/cut-text-001-expected.txt:
* platform/qt/editing/pasteboard/displaced-generic-placeholder-expected.txt:
* platform/qt/editing/pasteboard/displaced-placeholder-expected.txt:
* platform/qt/editing/pasteboard/merge-after-delete-1-expected.txt:
* platform/qt/editing/pasteboard/merge-after-delete-2-expected.txt:
* platform/qt/editing/pasteboard/merge-after-delete-expected.txt:
* platform/qt/editing/pasteboard/merge-end-blockquote-expected.txt:
* platform/qt/editing/pasteboard/merge-end-borders-expected.txt:
* platform/qt/editing/pasteboard/paste-4035648-fix-expected.txt:
* platform/qt/editing/pasteboard/paste-line-endings-001-expected.txt:
* platform/qt/editing/pasteboard/paste-line-endings-006-expected.txt:
* platform/qt/editing/pasteboard/paste-match-style-001-expected.txt:
* platform/qt/editing/pasteboard/paste-match-style-002-expected.txt:
* platform/qt/editing/pasteboard/paste-table-003-expected.txt:
* platform/qt/editing/pasteboard/paste-table-cells-expected.txt:
* platform/qt/editing/pasteboard/paste-text-004-expected.txt:
* platform/qt/editing/pasteboard/paste-text-005-expected.txt:
* platform/qt/editing/pasteboard/paste-text-006-expected.txt:
* platform/qt/editing/pasteboard/paste-text-007-expected.txt:
* platform/qt/editing/pasteboard/paste-text-008-expected.txt:
* platform/qt/editing/pasteboard/paste-text-016-expected.txt:
* platform/qt/editing/pasteboard/paste-text-019-expected.txt:
* platform/qt/editing/pasteboard/paste-text-at-tabspan-003-expected.txt:
* platform/qt/editing/pasteboard/pasting-object-expected.txt:
* platform/qt/editing/pasteboard/smart-paste-007-expected.txt:
* platform/qt/editing/pasteboard/smart-paste-008-expected.txt:
* platform/qt/editing/pasteboard/undoable-fragment-removes-expected.txt:
* platform/qt/editing/selection/move-between-blocks-no-001-expected.txt:
* platform/qt/editing/selection/node-removal-1-expected.txt:
* platform/qt/editing/selection/node-removal-2-expected.txt:
* platform/qt/editing/selection/replace-selection-1-expected.txt:
* platform/qt/editing/selection/select-all-iframe-expected.txt:
* platform/qt/editing/style/create-block-for-style-001-expected.txt:
* platform/qt/editing/style/create-block-for-style-002-expected.txt:
* platform/qt/editing/style/create-block-for-style-003-expected.txt:
* platform/qt/editing/style/create-block-for-style-004-expected.txt:
* platform/qt/editing/style/create-block-for-style-007-expected.txt:
* platform/qt/editing/style/create-block-for-style-009-expected.txt:
* platform/qt/editing/style/create-block-for-style-010-expected.txt:
* platform/qt/editing/style/create-block-for-style-011-expected.txt:
* platform/qt/editing/style/create-block-for-style-012-expected.txt:
* platform/qt/editing/style/create-block-for-style-013-expected.txt:
* platform/qt/editing/style/designmode-expected.txt:
* platform/qt/editing/style/relative-font-size-change-001-expected.txt:
* platform/qt/editing/style/relative-font-size-change-002-expected.txt:
* platform/qt/editing/style/smoosh-styles-001-expected.txt:
* platform/qt/editing/style/smoosh-styles-003-expected.txt:
* platform/qt/editing/style/style-3998892-fix-expected.txt:
* platform/qt/editing/style/style-boundary-001-expected.txt:
* platform/qt/editing/style/style-boundary-004-expected.txt:
* platform/qt/editing/style/unbold-in-bold-expected.txt:
* platform/qt/editing/undo/4063751-expected.txt:
* platform/qt/editing/undo/redo-typing-001-expected.txt:
* platform/qt/editing/undo/undo-combined-delete-boundary-expected.txt:
* platform/qt/editing/undo/undo-combined-delete-expected.txt:
* platform/qt/editing/undo/undo-delete-boundary-expected.txt:
* platform/qt/editing/undo/undo-delete-expected.txt:
* platform/qt/editing/undo/undo-forward-delete-boundary-expected.txt:
* platform/qt/editing/undo/undo-forward-delete-expected.txt:
* platform/qt/editing/undo/undo-misspellings-expected.txt:
* platform/qt/editing/undo/undo-typing-001-expected.txt:
* platform/qt/editing/unsupported-content/list-delete-001-expected.txt:
* platform/qt/editing/unsupported-content/list-delete-003-expected.txt:
* platform/qt/editing/unsupported-content/list-type-after-expected.txt:
* platform/qt/editing/unsupported-content/list-type-before-expected.txt:
* platform/qt/editing/unsupported-content/table-delete-001-expected.txt:
* platform/qt/editing/unsupported-content/table-delete-002-expected.txt:
* platform/qt/editing/unsupported-content/table-delete-003-expected.txt:
* platform/qt/editing/unsupported-content/table-type-after-expected.txt:
* platform/qt/editing/unsupported-content/table-type-before-expected.txt:
* platform/qt/fast/dynamic/move-node-with-selection-expected.txt:
* platform/qt/svg/custom/use-clipped-hit-expected.txt:
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@96257
268f45cc-cd09-0410-ab3c-
d52691b4dbfc