gecko/editor/libeditor/base/IMETextTxn.cpp
Wes Kocher 75fd9bfafa Backed out 6 changesets (bug 1028559, bug 1028565) for android mochitest bustage on a CLOSED TREE
Backed out changeset fdd74c065e5d (bug 1028565)
Backed out changeset 5e9777d38052 (bug 1028565)
Backed out changeset 3510bcdba3fc (bug 1028565)
Backed out changeset 62ad3254903e (bug 1028565)
Backed out changeset e7557f70acfe (bug 1028565)
Backed out changeset 5b1b527abe47 (bug 1028559)

--HG--
rename : editor/composer/nsIEditingSession.idl => editor/composer/public/nsIEditingSession.idl
rename : editor/composer/crashtests/351236-1.html => editor/composer/src/crashtests/351236-1.html
rename : editor/composer/crashtests/407062-1.html => editor/composer/src/crashtests/407062-1.html
rename : editor/composer/crashtests/419563-1.xhtml => editor/composer/src/crashtests/419563-1.xhtml
rename : editor/composer/crashtests/428844-1-inner.xhtml => editor/composer/src/crashtests/428844-1-inner.xhtml
rename : editor/composer/crashtests/428844-1.html => editor/composer/src/crashtests/428844-1.html
rename : editor/composer/crashtests/461049-1.html => editor/composer/src/crashtests/461049-1.html
rename : editor/composer/crashtests/crashtests.list => editor/composer/src/crashtests/crashtests.list
rename : editor/composer/crashtests/removing-editable-xslt-inner.xhtml => editor/composer/src/crashtests/removing-editable-xslt-inner.xhtml
rename : editor/composer/crashtests/removing-editable-xslt.html => editor/composer/src/crashtests/removing-editable-xslt.html
rename : editor/composer/nsComposeTxtSrvFilter.cpp => editor/composer/src/nsComposeTxtSrvFilter.cpp
rename : editor/composer/nsComposeTxtSrvFilter.h => editor/composer/src/nsComposeTxtSrvFilter.h
rename : editor/composer/nsComposerCommands.cpp => editor/composer/src/nsComposerCommands.cpp
rename : editor/composer/nsComposerCommands.h => editor/composer/src/nsComposerCommands.h
rename : editor/composer/nsComposerCommandsUpdater.cpp => editor/composer/src/nsComposerCommandsUpdater.cpp
rename : editor/composer/nsComposerCommandsUpdater.h => editor/composer/src/nsComposerCommandsUpdater.h
rename : editor/composer/nsComposerController.cpp => editor/composer/src/nsComposerController.cpp
rename : editor/composer/nsComposerController.h => editor/composer/src/nsComposerController.h
rename : editor/composer/nsComposerDocumentCommands.cpp => editor/composer/src/nsComposerDocumentCommands.cpp
rename : editor/composer/nsComposerRegistration.cpp => editor/composer/src/nsComposerRegistration.cpp
rename : editor/composer/nsEditingSession.cpp => editor/composer/src/nsEditingSession.cpp
rename : editor/composer/nsEditingSession.h => editor/composer/src/nsEditingSession.h
rename : editor/composer/nsEditorSpellCheck.cpp => editor/composer/src/nsEditorSpellCheck.cpp
rename : editor/composer/nsEditorSpellCheck.h => editor/composer/src/nsEditorSpellCheck.h
rename : editor/composer/res/EditorOverride.css => editor/composer/src/res/EditorOverride.css
rename : editor/composer/res/grabber.gif => editor/composer/src/res/grabber.gif
rename : editor/composer/res/table-add-column-after-active.gif => editor/composer/src/res/table-add-column-after-active.gif
rename : editor/composer/res/table-add-column-after-hover.gif => editor/composer/src/res/table-add-column-after-hover.gif
rename : editor/composer/res/table-add-column-after.gif => editor/composer/src/res/table-add-column-after.gif
rename : editor/composer/res/table-add-column-before-active.gif => editor/composer/src/res/table-add-column-before-active.gif
rename : editor/composer/res/table-add-column-before-hover.gif => editor/composer/src/res/table-add-column-before-hover.gif
rename : editor/composer/res/table-add-column-before.gif => editor/composer/src/res/table-add-column-before.gif
rename : editor/composer/res/table-add-row-after-active.gif => editor/composer/src/res/table-add-row-after-active.gif
rename : editor/composer/res/table-add-row-after-hover.gif => editor/composer/src/res/table-add-row-after-hover.gif
rename : editor/composer/res/table-add-row-after.gif => editor/composer/src/res/table-add-row-after.gif
rename : editor/composer/res/table-add-row-before-active.gif => editor/composer/src/res/table-add-row-before-active.gif
rename : editor/composer/res/table-add-row-before-hover.gif => editor/composer/src/res/table-add-row-before-hover.gif
rename : editor/composer/res/table-add-row-before.gif => editor/composer/src/res/table-add-row-before.gif
rename : editor/composer/res/table-remove-column-active.gif => editor/composer/src/res/table-remove-column-active.gif
rename : editor/composer/res/table-remove-column-hover.gif => editor/composer/src/res/table-remove-column-hover.gif
rename : editor/composer/res/table-remove-column.gif => editor/composer/src/res/table-remove-column.gif
rename : editor/composer/res/table-remove-row-active.gif => editor/composer/src/res/table-remove-row-active.gif
rename : editor/composer/res/table-remove-row-hover.gif => editor/composer/src/res/table-remove-row-hover.gif
rename : editor/composer/res/table-remove-row.gif => editor/composer/src/res/table-remove-row.gif
rename : editor/composer/res/text_caret.png => editor/composer/src/res/text_caret.png
rename : editor/composer/res/text_caret@1.5x.png => editor/composer/src/res/text_caret@1.5x.png
rename : editor/composer/res/text_caret@2.25x.png => editor/composer/src/res/text_caret@2.25x.png
rename : editor/composer/res/text_caret@2x.png => editor/composer/src/res/text_caret@2x.png
rename : editor/composer/res/text_caret_tilt_left.png => editor/composer/src/res/text_caret_tilt_left.png
rename : editor/composer/res/text_caret_tilt_left@1.5x.png => editor/composer/src/res/text_caret_tilt_left@1.5x.png
rename : editor/composer/res/text_caret_tilt_left@2.25x.png => editor/composer/src/res/text_caret_tilt_left@2.25x.png
rename : editor/composer/res/text_caret_tilt_left@2x.png => editor/composer/src/res/text_caret_tilt_left@2x.png
rename : editor/composer/res/text_caret_tilt_right.png => editor/composer/src/res/text_caret_tilt_right.png
rename : editor/composer/res/text_caret_tilt_right@1.5x.png => editor/composer/src/res/text_caret_tilt_right@1.5x.png
rename : editor/composer/res/text_caret_tilt_right@2.25x.png => editor/composer/src/res/text_caret_tilt_right@2.25x.png
rename : editor/composer/res/text_caret_tilt_right@2x.png => editor/composer/src/res/text_caret_tilt_right@2x.png
rename : editor/composer/res/text_selection_handle.png => editor/composer/src/res/text_selection_handle.png
rename : editor/composer/res/text_selection_handle@1.5.png => editor/composer/src/res/text_selection_handle@1.5.png
rename : editor/composer/res/text_selection_handle@2.png => editor/composer/src/res/text_selection_handle@2.png
rename : editor/nsIContentFilter.idl => editor/idl/nsIContentFilter.idl
rename : editor/nsIDocumentStateListener.idl => editor/idl/nsIDocumentStateListener.idl
rename : editor/nsIEditActionListener.idl => editor/idl/nsIEditActionListener.idl
rename : editor/nsIEditor.idl => editor/idl/nsIEditor.idl
rename : editor/nsIEditorIMESupport.idl => editor/idl/nsIEditorIMESupport.idl
rename : editor/nsIEditorMailSupport.idl => editor/idl/nsIEditorMailSupport.idl
rename : editor/nsIEditorObserver.idl => editor/idl/nsIEditorObserver.idl
rename : editor/nsIEditorSpellCheck.idl => editor/idl/nsIEditorSpellCheck.idl
rename : editor/nsIEditorStyleSheets.idl => editor/idl/nsIEditorStyleSheets.idl
rename : editor/nsIHTMLAbsPosEditor.idl => editor/idl/nsIHTMLAbsPosEditor.idl
rename : editor/nsIHTMLEditor.idl => editor/idl/nsIHTMLEditor.idl
rename : editor/nsIHTMLInlineTableEditor.idl => editor/idl/nsIHTMLInlineTableEditor.idl
rename : editor/nsIHTMLObjectResizeListener.idl => editor/idl/nsIHTMLObjectResizeListener.idl
rename : editor/nsIHTMLObjectResizer.idl => editor/idl/nsIHTMLObjectResizer.idl
rename : editor/nsIPlaintextEditor.idl => editor/idl/nsIPlaintextEditor.idl
rename : editor/nsITableEditor.idl => editor/idl/nsITableEditor.idl
rename : editor/nsIURIRefObject.idl => editor/idl/nsIURIRefObject.idl
rename : editor/nsPIEditorTransaction.idl => editor/idl/nsPIEditorTransaction.idl
rename : editor/libeditor/ChangeAttributeTxn.cpp => editor/libeditor/base/ChangeAttributeTxn.cpp
rename : editor/libeditor/ChangeAttributeTxn.h => editor/libeditor/base/ChangeAttributeTxn.h
rename : editor/libeditor/ChangeCSSInlineStyleTxn.cpp => editor/libeditor/base/ChangeCSSInlineStyleTxn.cpp
rename : editor/libeditor/ChangeCSSInlineStyleTxn.h => editor/libeditor/base/ChangeCSSInlineStyleTxn.h
rename : editor/libeditor/CreateElementTxn.cpp => editor/libeditor/base/CreateElementTxn.cpp
rename : editor/libeditor/CreateElementTxn.h => editor/libeditor/base/CreateElementTxn.h
rename : editor/libeditor/DeleteNodeTxn.cpp => editor/libeditor/base/DeleteNodeTxn.cpp
rename : editor/libeditor/DeleteNodeTxn.h => editor/libeditor/base/DeleteNodeTxn.h
rename : editor/libeditor/DeleteRangeTxn.cpp => editor/libeditor/base/DeleteRangeTxn.cpp
rename : editor/libeditor/DeleteRangeTxn.h => editor/libeditor/base/DeleteRangeTxn.h
rename : editor/libeditor/DeleteTextTxn.cpp => editor/libeditor/base/DeleteTextTxn.cpp
rename : editor/libeditor/DeleteTextTxn.h => editor/libeditor/base/DeleteTextTxn.h
rename : editor/libeditor/EditActionListener.h => editor/libeditor/base/EditActionListener.h
rename : editor/libeditor/EditAggregateTxn.cpp => editor/libeditor/base/EditAggregateTxn.cpp
rename : editor/libeditor/EditAggregateTxn.h => editor/libeditor/base/EditAggregateTxn.h
rename : editor/libeditor/EditTxn.cpp => editor/libeditor/base/EditTxn.cpp
rename : editor/libeditor/EditTxn.h => editor/libeditor/base/EditTxn.h
rename : editor/libeditor/IMETextTxn.cpp => editor/libeditor/base/IMETextTxn.cpp
rename : editor/libeditor/IMETextTxn.h => editor/libeditor/base/IMETextTxn.h
rename : editor/libeditor/InsertElementTxn.cpp => editor/libeditor/base/InsertElementTxn.cpp
rename : editor/libeditor/InsertElementTxn.h => editor/libeditor/base/InsertElementTxn.h
rename : editor/libeditor/InsertTextTxn.cpp => editor/libeditor/base/InsertTextTxn.cpp
rename : editor/libeditor/InsertTextTxn.h => editor/libeditor/base/InsertTextTxn.h
rename : editor/libeditor/JoinElementTxn.cpp => editor/libeditor/base/JoinElementTxn.cpp
rename : editor/libeditor/JoinElementTxn.h => editor/libeditor/base/JoinElementTxn.h
rename : editor/libeditor/PlaceholderTxn.cpp => editor/libeditor/base/PlaceholderTxn.cpp
rename : editor/libeditor/PlaceholderTxn.h => editor/libeditor/base/PlaceholderTxn.h
rename : editor/libeditor/SetDocTitleTxn.cpp => editor/libeditor/base/SetDocTitleTxn.cpp
rename : editor/libeditor/SetDocTitleTxn.h => editor/libeditor/base/SetDocTitleTxn.h
rename : editor/libeditor/SplitElementTxn.cpp => editor/libeditor/base/SplitElementTxn.cpp
rename : editor/libeditor/SplitElementTxn.h => editor/libeditor/base/SplitElementTxn.h
rename : editor/libeditor/crashtests/336104.html => editor/libeditor/base/crashtests/336104.html
rename : editor/libeditor/crashtests/382527-1.html => editor/libeditor/base/crashtests/382527-1.html
rename : editor/libeditor/crashtests/402172-1.html => editor/libeditor/base/crashtests/402172-1.html
rename : editor/libeditor/crashtests/407079-1.html => editor/libeditor/base/crashtests/407079-1.html
rename : editor/libeditor/crashtests/407256-1.html => editor/libeditor/base/crashtests/407256-1.html
rename : editor/libeditor/crashtests/430624-1.html => editor/libeditor/base/crashtests/430624-1.html
rename : editor/libeditor/crashtests/459613-iframe.html => editor/libeditor/base/crashtests/459613-iframe.html
rename : editor/libeditor/crashtests/459613.html => editor/libeditor/base/crashtests/459613.html
rename : editor/libeditor/crashtests/475132-1.xhtml => editor/libeditor/base/crashtests/475132-1.xhtml
rename : editor/libeditor/crashtests/633709.xhtml => editor/libeditor/base/crashtests/633709.xhtml
rename : editor/libeditor/crashtests/636074-1.html => editor/libeditor/base/crashtests/636074-1.html
rename : editor/libeditor/crashtests/713427-1.html => editor/libeditor/base/crashtests/713427-1.html
rename : editor/libeditor/crashtests/713427-2.xhtml => editor/libeditor/base/crashtests/713427-2.xhtml
rename : editor/libeditor/crashtests/762183.html => editor/libeditor/base/crashtests/762183.html
rename : editor/libeditor/crashtests/766360.html => editor/libeditor/base/crashtests/766360.html
rename : editor/libeditor/crashtests/766413.html => editor/libeditor/base/crashtests/766413.html
rename : editor/libeditor/crashtests/766845.xhtml => editor/libeditor/base/crashtests/766845.xhtml
rename : editor/libeditor/crashtests/768765.html => editor/libeditor/base/crashtests/768765.html
rename : editor/libeditor/crashtests/771749.html => editor/libeditor/base/crashtests/771749.html
rename : editor/libeditor/crashtests/772282.html => editor/libeditor/base/crashtests/772282.html
rename : editor/libeditor/crashtests/776323.html => editor/libeditor/base/crashtests/776323.html
rename : editor/libeditor/crashtests/crashtests.list => editor/libeditor/base/crashtests/crashtests.list
rename : editor/libeditor/nsEditProperty.h => editor/libeditor/base/nsEditProperty.h
rename : editor/libeditor/nsEditPropertyAtomList.h => editor/libeditor/base/nsEditPropertyAtomList.h
rename : editor/libeditor/nsEditRules.h => editor/libeditor/base/nsEditRules.h
rename : editor/libeditor/nsEditor.cpp => editor/libeditor/base/nsEditor.cpp
rename : editor/libeditor/nsEditor.h => editor/libeditor/base/nsEditor.h
rename : editor/libeditor/nsEditorCommands.cpp => editor/libeditor/base/nsEditorCommands.cpp
rename : editor/libeditor/nsEditorCommands.h => editor/libeditor/base/nsEditorCommands.h
rename : editor/libeditor/nsEditorController.cpp => editor/libeditor/base/nsEditorController.cpp
rename : editor/libeditor/nsEditorController.h => editor/libeditor/base/nsEditorController.h
rename : editor/libeditor/nsEditorEventListener.cpp => editor/libeditor/base/nsEditorEventListener.cpp
rename : editor/libeditor/nsEditorEventListener.h => editor/libeditor/base/nsEditorEventListener.h
rename : editor/libeditor/nsEditorUtils.cpp => editor/libeditor/base/nsEditorUtils.cpp
rename : editor/libeditor/nsEditorUtils.h => editor/libeditor/base/nsEditorUtils.h
rename : editor/libeditor/nsIAbsorbingTransaction.h => editor/libeditor/base/nsIAbsorbingTransaction.h
rename : editor/libeditor/nsSelectionState.cpp => editor/libeditor/base/nsSelectionState.cpp
rename : editor/libeditor/nsSelectionState.h => editor/libeditor/base/nsSelectionState.h
rename : editor/libeditor/nsStyleSheetTxns.cpp => editor/libeditor/base/nsStyleSheetTxns.cpp
rename : editor/libeditor/nsStyleSheetTxns.h => editor/libeditor/base/nsStyleSheetTxns.h
rename : editor/libeditor/tests/chrome.ini => editor/libeditor/base/tests/chrome.ini
rename : editor/libeditor/tests/file_bug586662.html => editor/libeditor/base/tests/file_bug586662.html
rename : editor/libeditor/tests/mochitest.ini => editor/libeditor/base/tests/mochitest.ini
rename : editor/libeditor/tests/moz.build => editor/libeditor/base/tests/moz.build
rename : editor/libeditor/tests/test_bug408231.html => editor/libeditor/base/tests/test_bug408231.html
rename : editor/libeditor/tests/test_bug46555.html => editor/libeditor/base/tests/test_bug46555.html
rename : editor/libeditor/tests/test_bug502673.html => editor/libeditor/base/tests/test_bug502673.html
rename : editor/libeditor/tests/test_bug514156.html => editor/libeditor/base/tests/test_bug514156.html
rename : editor/libeditor/tests/test_bug567213.html => editor/libeditor/base/tests/test_bug567213.html
rename : editor/libeditor/tests/test_bug586662.html => editor/libeditor/base/tests/test_bug586662.html
rename : editor/libeditor/tests/test_bug599983.html => editor/libeditor/base/tests/test_bug599983.html
rename : editor/libeditor/tests/test_bug599983.xul => editor/libeditor/base/tests/test_bug599983.xul
rename : editor/libeditor/tests/test_bug646194.xul => editor/libeditor/base/tests/test_bug646194.xul
rename : editor/libeditor/tests/test_bug742261.html => editor/libeditor/base/tests/test_bug742261.html
rename : editor/libeditor/tests/test_bug773262.html => editor/libeditor/base/tests/test_bug773262.html
rename : editor/libeditor/tests/test_bug795785.html => editor/libeditor/base/tests/test_bug795785.html
rename : editor/libeditor/tests/test_dragdrop.html => editor/libeditor/base/tests/test_dragdrop.html
rename : editor/libeditor/tests/test_selection_move_commands.xul => editor/libeditor/base/tests/test_selection_move_commands.xul
rename : editor/nsEditorCID.h => editor/public/nsEditorCID.h
rename : editor/txmgr/nsITransaction.idl => editor/txmgr/idl/nsITransaction.idl
rename : editor/txmgr/nsITransactionList.idl => editor/txmgr/idl/nsITransactionList.idl
rename : editor/txmgr/nsITransactionListener.idl => editor/txmgr/idl/nsITransactionListener.idl
rename : editor/txmgr/nsITransactionManager.idl => editor/txmgr/idl/nsITransactionManager.idl
rename : editor/txmgr/nsTransactionManagerCID.h => editor/txmgr/public/nsTransactionManagerCID.h
rename : editor/txmgr/nsTransactionItem.cpp => editor/txmgr/src/nsTransactionItem.cpp
rename : editor/txmgr/nsTransactionItem.h => editor/txmgr/src/nsTransactionItem.h
rename : editor/txmgr/nsTransactionList.cpp => editor/txmgr/src/nsTransactionList.cpp
rename : editor/txmgr/nsTransactionList.h => editor/txmgr/src/nsTransactionList.h
rename : editor/txmgr/nsTransactionManager.cpp => editor/txmgr/src/nsTransactionManager.cpp
rename : editor/txmgr/nsTransactionManager.h => editor/txmgr/src/nsTransactionManager.h
rename : editor/txmgr/nsTransactionManagerFactory.cpp => editor/txmgr/src/nsTransactionManagerFactory.cpp
rename : editor/txmgr/nsTransactionStack.cpp => editor/txmgr/src/nsTransactionStack.cpp
rename : editor/txmgr/nsTransactionStack.h => editor/txmgr/src/nsTransactionStack.h
rename : editor/txtsvc/nsIInlineSpellChecker.idl => editor/txtsvc/public/nsIInlineSpellChecker.idl
rename : editor/txtsvc/nsISpellChecker.h => editor/txtsvc/public/nsISpellChecker.h
rename : editor/txtsvc/nsITextService.h => editor/txtsvc/public/nsITextService.h
rename : editor/txtsvc/nsITextServicesDocument.h => editor/txtsvc/public/nsITextServicesDocument.h
rename : editor/txtsvc/nsITextServicesFilter.idl => editor/txtsvc/public/nsITextServicesFilter.idl
rename : editor/txtsvc/nsTextServicesCID.h => editor/txtsvc/public/nsTextServicesCID.h
rename : editor/txtsvc/nsFilteredContentIterator.cpp => editor/txtsvc/src/nsFilteredContentIterator.cpp
rename : editor/txtsvc/nsFilteredContentIterator.h => editor/txtsvc/src/nsFilteredContentIterator.h
rename : editor/txtsvc/nsTSAtomList.h => editor/txtsvc/src/nsTSAtomList.h
rename : editor/txtsvc/nsTextServicesDocument.cpp => editor/txtsvc/src/nsTextServicesDocument.cpp
rename : editor/txtsvc/nsTextServicesDocument.h => editor/txtsvc/src/nsTextServicesDocument.h
rename : editor/txtsvc/nsTextServicesFactory.cpp => editor/txtsvc/src/nsTextServicesFactory.cpp
rename : xpcom/string/nsAString.h => xpcom/string/public/nsAString.h
rename : xpcom/string/nsAlgorithm.h => xpcom/string/public/nsAlgorithm.h
rename : xpcom/string/nsCharTraits.h => xpcom/string/public/nsCharTraits.h
rename : xpcom/string/nsDependentString.h => xpcom/string/public/nsDependentString.h
rename : xpcom/string/nsDependentSubstring.h => xpcom/string/public/nsDependentSubstring.h
rename : xpcom/string/nsEmbedString.h => xpcom/string/public/nsEmbedString.h
rename : xpcom/string/nsLiteralString.h => xpcom/string/public/nsLiteralString.h
rename : xpcom/string/nsPrintfCString.h => xpcom/string/public/nsPrintfCString.h
rename : xpcom/string/nsPromiseFlatString.h => xpcom/string/public/nsPromiseFlatString.h
rename : xpcom/string/nsReadableUtils.h => xpcom/string/public/nsReadableUtils.h
rename : xpcom/string/nsString.h => xpcom/string/public/nsString.h
rename : xpcom/string/nsStringBuffer.h => xpcom/string/public/nsStringBuffer.h
rename : xpcom/string/nsStringFwd.h => xpcom/string/public/nsStringFwd.h
rename : xpcom/string/nsStringIterator.h => xpcom/string/public/nsStringIterator.h
rename : xpcom/string/nsSubstring.h => xpcom/string/public/nsSubstring.h
rename : xpcom/string/nsSubstringTuple.h => xpcom/string/public/nsSubstringTuple.h
rename : xpcom/string/nsTDependentString.h => xpcom/string/public/nsTDependentString.h
rename : xpcom/string/nsTDependentSubstring.h => xpcom/string/public/nsTDependentSubstring.h
rename : xpcom/string/nsTLiteralString.h => xpcom/string/public/nsTLiteralString.h
rename : xpcom/string/nsTPromiseFlatString.h => xpcom/string/public/nsTPromiseFlatString.h
rename : xpcom/string/nsTString.h => xpcom/string/public/nsTString.h
rename : xpcom/string/nsTSubstring.h => xpcom/string/public/nsTSubstring.h
rename : xpcom/string/nsTSubstringTuple.h => xpcom/string/public/nsTSubstringTuple.h
rename : xpcom/string/nsUTF8Utils.h => xpcom/string/public/nsUTF8Utils.h
rename : xpcom/string/nsXPCOMStrings.h => xpcom/string/public/nsXPCOMStrings.h
rename : xpcom/string/nsXPIDLString.h => xpcom/string/public/nsXPIDLString.h
rename : xpcom/string/string-template-def-char.h => xpcom/string/public/string-template-def-char.h
rename : xpcom/string/string-template-def-unichar.h => xpcom/string/public/string-template-def-unichar.h
rename : xpcom/string/string-template-undef.h => xpcom/string/public/string-template-undef.h
rename : xpcom/string/nsDependentString.cpp => xpcom/string/src/nsDependentString.cpp
rename : xpcom/string/nsDependentSubstring.cpp => xpcom/string/src/nsDependentSubstring.cpp
rename : xpcom/string/nsPromiseFlatString.cpp => xpcom/string/src/nsPromiseFlatString.cpp
rename : xpcom/string/nsReadableUtils.cpp => xpcom/string/src/nsReadableUtils.cpp
rename : xpcom/string/nsString.cpp => xpcom/string/src/nsString.cpp
rename : xpcom/string/nsStringComparator.cpp => xpcom/string/src/nsStringComparator.cpp
rename : xpcom/string/nsStringObsolete.cpp => xpcom/string/src/nsStringObsolete.cpp
rename : xpcom/string/nsSubstring.cpp => xpcom/string/src/nsSubstring.cpp
rename : xpcom/string/nsSubstringTuple.cpp => xpcom/string/src/nsSubstringTuple.cpp
rename : xpcom/string/nsTDependentString.cpp => xpcom/string/src/nsTDependentString.cpp
rename : xpcom/string/nsTDependentSubstring.cpp => xpcom/string/src/nsTDependentSubstring.cpp
rename : xpcom/string/nsTPromiseFlatString.cpp => xpcom/string/src/nsTPromiseFlatString.cpp
rename : xpcom/string/nsTString.cpp => xpcom/string/src/nsTString.cpp
rename : xpcom/string/nsTStringComparator.cpp => xpcom/string/src/nsTStringComparator.cpp
rename : xpcom/string/nsTStringObsolete.cpp => xpcom/string/src/nsTStringObsolete.cpp
rename : xpcom/string/nsTSubstring.cpp => xpcom/string/src/nsTSubstring.cpp
rename : xpcom/string/nsTSubstringTuple.cpp => xpcom/string/src/nsTSubstringTuple.cpp
rename : xpcom/string/nsUTF8UtilsSSE2.cpp => xpcom/string/src/nsUTF8UtilsSSE2.cpp
2014-06-24 18:32:55 -07:00

326 lines
12 KiB
C++

/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#include "IMETextTxn.h"
#include "mozilla/DebugOnly.h" // for DebugOnly
#include "mozilla/mozalloc.h" // for operator new
#include "mozilla/TextEvents.h" // for TextRangeStyle
#include "nsAString.h" // for nsAString_internal::Length, etc
#include "nsAutoPtr.h" // for nsRefPtr
#include "nsDebug.h" // for NS_ASSERTION, etc
#include "nsError.h" // for NS_SUCCEEDED, NS_FAILED, etc
#include "nsIDOMCharacterData.h" // for nsIDOMCharacterData
#include "nsIDOMRange.h" // for nsRange::SetEnd, etc
#include "nsIContent.h" // for nsIContent
#include "nsIEditor.h" // for nsIEditor
#include "nsIPresShell.h" // for SelectionType
#include "nsISelection.h" // for nsISelection
#include "nsISelectionController.h" // for nsISelectionController, etc
#include "nsISelectionPrivate.h" // for nsISelectionPrivate
#include "nsISupportsImpl.h" // for nsRange::AddRef, etc
#include "nsISupportsUtils.h" // for NS_ADDREF_THIS, NS_RELEASE
#include "nsITransaction.h" // for nsITransaction
#include "nsRange.h" // for nsRange
#include "nsString.h" // for nsString
using namespace mozilla;
// #define DEBUG_IMETXN
IMETextTxn::IMETextTxn()
: EditTxn()
{
}
NS_IMPL_CYCLE_COLLECTION_INHERITED(IMETextTxn, EditTxn,
mElement)
// mRangeList can't lead to cycles
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(IMETextTxn)
if (aIID.Equals(IMETextTxn::GetCID())) {
*aInstancePtr = (void*)(IMETextTxn*)this;
NS_ADDREF_THIS();
return NS_OK;
} else
NS_INTERFACE_MAP_END_INHERITING(EditTxn)
NS_IMETHODIMP IMETextTxn::Init(nsIDOMCharacterData *aElement,
uint32_t aOffset,
uint32_t aReplaceLength,
TextRangeArray *aTextRangeArray,
const nsAString &aStringToInsert,
nsIEditor *aEditor)
{
NS_ENSURE_ARG_POINTER(aElement);
mElement = aElement;
mOffset = aOffset;
mReplaceLength = aReplaceLength;
mStringToInsert = aStringToInsert;
mEditor = aEditor;
mRanges = aTextRangeArray;
mFixed = false;
return NS_OK;
}
NS_IMETHODIMP IMETextTxn::DoTransaction(void)
{
#ifdef DEBUG_IMETXN
printf("Do IME Text element = %p replace = %d len = %d\n", mElement.get(), mReplaceLength, mStringToInsert.Length());
#endif
nsCOMPtr<nsISelectionController> selCon;
mEditor->GetSelectionController(getter_AddRefs(selCon));
NS_ENSURE_TRUE(selCon, NS_ERROR_NOT_INITIALIZED);
// advance caret: This requires the presentation shell to get the selection.
nsresult result;
if (mReplaceLength == 0) {
result = mElement->InsertData(mOffset, mStringToInsert);
} else {
result = mElement->ReplaceData(mOffset, mReplaceLength, mStringToInsert);
}
if (NS_SUCCEEDED(result)) {
result = SetSelectionForRanges();
}
return result;
}
NS_IMETHODIMP IMETextTxn::UndoTransaction(void)
{
#ifdef DEBUG_IMETXN
printf("Undo IME Text element = %p\n", mElement.get());
#endif
nsCOMPtr<nsISelectionController> selCon;
mEditor->GetSelectionController(getter_AddRefs(selCon));
NS_ENSURE_TRUE(selCon, NS_ERROR_NOT_INITIALIZED);
nsresult result = mElement->DeleteData(mOffset, mStringToInsert.Length());
if (NS_SUCCEEDED(result))
{ // set the selection to the insertion point where the string was removed
nsCOMPtr<nsISelection> selection;
result = selCon->GetSelection(nsISelectionController::SELECTION_NORMAL, getter_AddRefs(selection));
if (NS_SUCCEEDED(result) && selection) {
result = selection->Collapse(mElement, mOffset);
NS_ASSERTION((NS_SUCCEEDED(result)), "selection could not be collapsed after undo of IME insert.");
}
}
return result;
}
NS_IMETHODIMP IMETextTxn::Merge(nsITransaction *aTransaction, bool *aDidMerge)
{
NS_ASSERTION(aDidMerge, "illegal vaule- null ptr- aDidMerge");
NS_ASSERTION(aTransaction, "illegal vaule- null ptr- aTransaction");
NS_ENSURE_TRUE(aDidMerge && aTransaction, NS_ERROR_NULL_POINTER);
#ifdef DEBUG_IMETXN
printf("Merge IME Text element = %p\n", mElement.get());
#endif
//
// check to make sure we aren't fixed, if we are then nothing get's absorbed
//
if (mFixed) {
*aDidMerge = false;
return NS_OK;
}
//
// if aTransaction is another IMETextTxn then absorb it
//
IMETextTxn* otherTxn = nullptr;
nsresult result = aTransaction->QueryInterface(IMETextTxn::GetCID(),(void**)&otherTxn);
if (otherTxn && NS_SUCCEEDED(result))
{
//
// we absorb the next IME transaction by adopting its insert string as our own
//
mStringToInsert = otherTxn->mStringToInsert;
mRanges = otherTxn->mRanges;
*aDidMerge = true;
#ifdef DEBUG_IMETXN
printf("IMETextTxn assimilated IMETextTxn:%p\n", aTransaction);
#endif
NS_RELEASE(otherTxn);
return NS_OK;
}
*aDidMerge = false;
return NS_OK;
}
NS_IMETHODIMP IMETextTxn::MarkFixed(void)
{
mFixed = true;
return NS_OK;
}
NS_IMETHODIMP IMETextTxn::GetTxnDescription(nsAString& aString)
{
aString.AssignLiteral("IMETextTxn: ");
aString += mStringToInsert;
return NS_OK;
}
/* ============ protected methods ================== */
static SelectionType
ToSelectionType(uint32_t aTextRangeType)
{
switch(aTextRangeType) {
case NS_TEXTRANGE_RAWINPUT:
return nsISelectionController::SELECTION_IME_RAWINPUT;
case NS_TEXTRANGE_SELECTEDRAWTEXT:
return nsISelectionController::SELECTION_IME_SELECTEDRAWTEXT;
case NS_TEXTRANGE_CONVERTEDTEXT:
return nsISelectionController::SELECTION_IME_CONVERTEDTEXT;
case NS_TEXTRANGE_SELECTEDCONVERTEDTEXT:
return nsISelectionController::SELECTION_IME_SELECTEDCONVERTEDTEXT;
default:
MOZ_CRASH("Selection type is invalid");
return nsISelectionController::SELECTION_NORMAL;
}
}
nsresult
IMETextTxn::SetSelectionForRanges()
{
nsCOMPtr<nsISelectionController> selCon;
mEditor->GetSelectionController(getter_AddRefs(selCon));
NS_ENSURE_TRUE(selCon, NS_ERROR_NOT_INITIALIZED);
nsCOMPtr<nsISelection> selection;
nsresult rv =
selCon->GetSelection(nsISelectionController::SELECTION_NORMAL,
getter_AddRefs(selection));
NS_ENSURE_SUCCESS(rv, rv);
nsCOMPtr<nsISelectionPrivate> selPriv(do_QueryInterface(selection));
rv = selPriv->StartBatchChanges();
NS_ENSURE_SUCCESS(rv, rv);
// First, remove all selections of IME composition.
static const SelectionType kIMESelections[] = {
nsISelectionController::SELECTION_IME_RAWINPUT,
nsISelectionController::SELECTION_IME_SELECTEDRAWTEXT,
nsISelectionController::SELECTION_IME_CONVERTEDTEXT,
nsISelectionController::SELECTION_IME_SELECTEDCONVERTEDTEXT
};
for (uint32_t i = 0; i < ArrayLength(kIMESelections); ++i) {
nsCOMPtr<nsISelection> selectionOfIME;
if (NS_FAILED(selCon->GetSelection(kIMESelections[i],
getter_AddRefs(selectionOfIME)))) {
continue;
}
DebugOnly<nsresult> rv = selectionOfIME->RemoveAllRanges();
NS_ASSERTION(NS_SUCCEEDED(rv),
"Failed to remove all ranges of IME selection");
}
// Set caret position and selection of IME composition with TextRangeArray.
bool setCaret = false;
uint32_t countOfRanges = mRanges ? mRanges->Length() : 0;
#ifdef DEBUG
// When this sets selection (caret) offset to out of the content of
// the editor, let's crash the process only on debug build. That makes such
// bugs detectable with automated tests.
uint32_t maxOffset = UINT32_MAX;
mElement->GetLength(&maxOffset);
#endif
// The mStringToInsert may be truncated if maxlength attribute value doesn't
// allow to input all text of this composition. So, we can get actual length
// of the inserted string from it.
uint32_t insertedLength = mStringToInsert.Length();
for (uint32_t i = 0; i < countOfRanges; ++i) {
const TextRange& textRange = mRanges->ElementAt(i);
// Caret needs special handling since its length may be 0 and if it's not
// specified explicitly, we need to handle it ourselves later.
if (textRange.mRangeType == NS_TEXTRANGE_CARETPOSITION) {
NS_ASSERTION(!setCaret, "The ranges already has caret position");
NS_ASSERTION(!textRange.Length(), "nsEditor doesn't support wide caret");
int32_t caretOffset = static_cast<int32_t>(
mOffset + std::min(textRange.mStartOffset, insertedLength));
MOZ_ASSERT(caretOffset >= 0 &&
static_cast<uint32_t>(caretOffset) <= maxOffset);
rv = selection->Collapse(mElement, caretOffset);
setCaret = setCaret || NS_SUCCEEDED(rv);
NS_ASSERTION(setCaret, "Failed to collapse normal selection");
continue;
}
// If the clause length is 0, it's should be a bug.
if (!textRange.Length()) {
NS_WARNING("Any clauses must not be empty");
continue;
}
nsRefPtr<nsRange> clauseRange;
int32_t startOffset = static_cast<int32_t>(
mOffset + std::min(textRange.mStartOffset, insertedLength));
MOZ_ASSERT(startOffset >= 0 &&
static_cast<uint32_t>(startOffset) <= maxOffset);
int32_t endOffset = static_cast<int32_t>(
mOffset + std::min(textRange.mEndOffset, insertedLength));
MOZ_ASSERT(endOffset >= startOffset &&
static_cast<uint32_t>(endOffset) <= maxOffset);
rv = nsRange::CreateRange(mElement, startOffset,
mElement, endOffset,
getter_AddRefs(clauseRange));
if (NS_FAILED(rv)) {
NS_WARNING("Failed to create a DOM range for a clause of composition");
break;
}
// Set the range of the clause to selection.
nsCOMPtr<nsISelection> selectionOfIME;
rv = selCon->GetSelection(ToSelectionType(textRange.mRangeType),
getter_AddRefs(selectionOfIME));
if (NS_FAILED(rv)) {
NS_WARNING("Failed to get IME selection");
break;
}
rv = selectionOfIME->AddRange(clauseRange);
if (NS_FAILED(rv)) {
NS_WARNING("Failed to add selection range for a clause of composition");
break;
}
// Set the style of the clause.
nsCOMPtr<nsISelectionPrivate> selectionOfIMEPriv =
do_QueryInterface(selectionOfIME);
if (!selectionOfIMEPriv) {
NS_WARNING("Failed to get nsISelectionPrivate interface from selection");
continue; // Since this is additional feature, we can continue this job.
}
rv = selectionOfIMEPriv->SetTextRangeStyle(clauseRange,
textRange.mRangeStyle);
if (NS_FAILED(rv)) {
NS_WARNING("Failed to set selection style");
break; // but this is unexpected...
}
}
// If the ranges doesn't include explicit caret position, let's set the
// caret to the end of composition string.
if (!setCaret) {
int32_t caretOffset = static_cast<int32_t>(mOffset + insertedLength);
MOZ_ASSERT(caretOffset >= 0 &&
static_cast<uint32_t>(caretOffset) <= maxOffset);
rv = selection->Collapse(mElement, caretOffset);
NS_ASSERTION(NS_SUCCEEDED(rv),
"Failed to set caret at the end of composition string");
}
rv = selPriv->EndBatchChanges();
NS_ASSERTION(NS_SUCCEEDED(rv), "Failed to end batch changes");
return rv;
}