Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(110)

Side by Side Diff: third_party/WebKit/Source/core/editing/spellcheck/SpellChecker.cpp

Issue 2558643003: [InputEvent] Move 'beforeinput' logic into |CompositeEditCommand::willApplyEditing()| (3/3) (Closed)
Patch Set: xiaocheng's review 3: Rebase and remove updateStyleAndLayoutIgnorePendingStylesheets() Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2006, 2007, 2008, 2011 Apple Inc. All rights reserved. 2 * Copyright (C) 2006, 2007, 2008, 2011 Apple Inc. All rights reserved.
3 * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies) 3 * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies)
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions 6 * modification, are permitted provided that the following conditions
7 * are met: 7 * are met:
8 * 1. Redistributions of source code must retain the above copyright 8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright 10 * 2. Redistributions in binary form must reproduce the above copyright
(...skipping 811 matching lines...) Expand 10 before | Expand all | Expand 10 after
822 EphemeralRange(Position(caretRange.startPosition().computeContainerNode(), 822 EphemeralRange(Position(caretRange.startPosition().computeContainerNode(),
823 markers[0]->startOffset()), 823 markers[0]->startOffset()),
824 Position(caretRange.endPosition().computeContainerNode(), 824 Position(caretRange.endPosition().computeContainerNode(),
825 markers[0]->endOffset())); 825 markers[0]->endOffset()));
826 if (markerRange.isNull()) 826 if (markerRange.isNull())
827 return; 827 return;
828 828
829 frame().selection().setSelection( 829 frame().selection().setSelection(
830 SelectionInDOMTree::Builder().setBaseAndExtent(markerRange).build()); 830 SelectionInDOMTree::Builder().setBaseAndExtent(markerRange).build());
831 831
832 Document& currentDocument = *frame().document();
833
834 // Dispatch 'beforeinput'.
835 Element* const target = frame().editor().findEventTargetFromSelection();
836 RangeVector* const ranges =
837 new RangeVector(1, frame().selection().firstRange());
838 DataTransfer* const dataTransfer = DataTransfer::create(
839 DataTransfer::DataTransferType::InsertReplacementText,
840 DataTransferAccessPolicy::DataTransferReadable,
841 DataObject::createFromString(text));
842
843 const bool cancel =
844 dispatchBeforeInputDataTransfer(
845 target, InputEvent::InputType::InsertReplacementText, dataTransfer,
846 ranges) != DispatchEventResult::NotCanceled;
847
848 // 'beforeinput' event handler may destroy target frame.
849 if (currentDocument != frame().document())
850 return;
851
852 // TODO(xiaochengh): The use of updateStyleAndLayoutIgnorePendingStylesheets 832 // TODO(xiaochengh): The use of updateStyleAndLayoutIgnorePendingStylesheets
853 // needs to be audited. See http://crbug.com/590369 for more details. 833 // needs to be audited. See http://crbug.com/590369 for more details.
854 frame().document()->updateStyleAndLayoutIgnorePendingStylesheets(); 834 frame().document()->updateStyleAndLayoutIgnorePendingStylesheets();
855
856 if (cancel)
857 return;
858 frame().editor().replaceSelectionForSpellChecker(text); 835 frame().editor().replaceSelectionForSpellChecker(text);
859 } 836 }
860 837
861 static bool shouldCheckOldSelection(const Position& oldSelectionStart) { 838 static bool shouldCheckOldSelection(const Position& oldSelectionStart) {
862 if (!oldSelectionStart.isConnected()) 839 if (!oldSelectionStart.isConnected())
863 return false; 840 return false;
864 if (isPositionInTextField(oldSelectionStart)) 841 if (isPositionInTextField(oldSelectionStart))
865 return false; 842 return false;
866 if (isPositionInTextArea(oldSelectionStart)) 843 if (isPositionInTextArea(oldSelectionStart))
867 return true; 844 return true;
(...skipping 298 matching lines...) Expand 10 before | Expand all | Expand 10 after
1166 startOfNextParagraph(createVisiblePosition(paragraphEnd)); 1143 startOfNextParagraph(createVisiblePosition(paragraphEnd));
1167 paragraphStart = newParagraphStart.toParentAnchoredPosition(); 1144 paragraphStart = newParagraphStart.toParentAnchoredPosition();
1168 paragraphEnd = endOfParagraph(newParagraphStart).toParentAnchoredPosition(); 1145 paragraphEnd = endOfParagraph(newParagraphStart).toParentAnchoredPosition();
1169 firstIteration = false; 1146 firstIteration = false;
1170 totalLengthProcessed += currentLength; 1147 totalLengthProcessed += currentLength;
1171 } 1148 }
1172 return std::make_pair(firstFoundItem, firstFoundOffset); 1149 return std::make_pair(firstFoundItem, firstFoundOffset);
1173 } 1150 }
1174 1151
1175 } // namespace blink 1152 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698