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

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

Issue 2142903003: Audit the use of updateStyleAndLayoutIgnorePendingStylesheets in DocumentMarkerController. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Now with cool scope thingy. Created 4 years, 4 months 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 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
151 } 151 }
152 } 152 }
153 153
154 void SpellChecker::ignoreSpelling() 154 void SpellChecker::ignoreSpelling()
155 { 155 {
156 removeMarkers(frame().selection().selection(), DocumentMarker::Spelling); 156 removeMarkers(frame().selection().selection(), DocumentMarker::Spelling);
157 } 157 }
158 158
159 void SpellChecker::advanceToNextMisspelling(bool startBeforeSelection) 159 void SpellChecker::advanceToNextMisspelling(bool startBeforeSelection)
160 { 160 {
161 DocumentLifecycle::DisallowTransitionScope(frame().document()->lifecycle());
162
161 // The basic approach is to search in two phases - from the selection end to the end of the doc, and 163 // The basic approach is to search in two phases - from the selection end to the end of the doc, and
162 // then we wrap and search from the doc start to (approximately) where we st arted. 164 // then we wrap and search from the doc start to (approximately) where we st arted.
163 165
164 // Start at the end of the selection, search to edge of document. Starting a t the selection end makes 166 // Start at the end of the selection, search to edge of document. Starting a t the selection end makes
165 // repeated "check spelling" commands work. 167 // repeated "check spelling" commands work.
166 VisibleSelection selection(frame().selection().selection()); 168 VisibleSelection selection(frame().selection().selection());
167 Position spellingSearchStart, spellingSearchEnd; 169 Position spellingSearchStart, spellingSearchEnd;
168 Range::selectNodeContents(frame().document(), spellingSearchStart, spellingS earchEnd); 170 Range::selectNodeContents(frame().document(), spellingSearchStart, spellingS earchEnd);
169 171
170 bool startedWithSelection = false; 172 bool startedWithSelection = false;
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
297 // panel, and store a marker so we draw the green squiggle later. 299 // panel, and store a marker so we draw the green squiggle later.
298 300
299 DCHECK_GT(badGrammarPhrase.length(), 0u); 301 DCHECK_GT(badGrammarPhrase.length(), 0u);
300 DCHECK_NE(grammarDetail.location, -1); 302 DCHECK_NE(grammarDetail.location, -1);
301 DCHECK_GT(grammarDetail.length, 0); 303 DCHECK_GT(grammarDetail.length, 0);
302 304
303 // FIXME 4859190: This gets confused with doubled punctuation at the end of a paragraph 305 // FIXME 4859190: This gets confused with doubled punctuation at the end of a paragraph
304 const EphemeralRange badGrammarRange = calculateCharacterSubrange(Epheme ralRange(grammarSearchStart, grammarSearchEnd), grammarPhraseOffset + grammarDet ail.location, grammarDetail.length); 306 const EphemeralRange badGrammarRange = calculateCharacterSubrange(Epheme ralRange(grammarSearchStart, grammarSearchEnd), grammarPhraseOffset + grammarDet ail.location, grammarDetail.length);
305 frame().selection().setSelection(VisibleSelection(badGrammarRange)); 307 frame().selection().setSelection(VisibleSelection(badGrammarRange));
306 frame().selection().revealSelection(); 308 frame().selection().revealSelection();
307
308 frame().document()->markers().addMarker(badGrammarRange.startPosition(), badGrammarRange.endPosition(), DocumentMarker::Grammar, grammarDetail.userDescr iption); 309 frame().document()->markers().addMarker(badGrammarRange.startPosition(), badGrammarRange.endPosition(), DocumentMarker::Grammar, grammarDetail.userDescr iption);
309 } else if (!misspelledWord.isEmpty()) { 310 } else if (!misspelledWord.isEmpty()) {
310 // We found a misspelling, but not any earlier bad grammar. Select the m isspelling, update the spelling panel, and store 311 // We found a misspelling, but not any earlier bad grammar. Select the m isspelling, update the spelling panel, and store
311 // a marker so we draw the red squiggle later. 312 // a marker so we draw the red squiggle later.
312 313
313 const EphemeralRange misspellingRange = calculateCharacterSubrange(Ephem eralRange(spellingSearchStart, spellingSearchEnd), misspellingOffset, misspelled Word.length()); 314 const EphemeralRange misspellingRange = calculateCharacterSubrange(Ephem eralRange(spellingSearchStart, spellingSearchEnd), misspellingOffset, misspelled Word.length());
314 frame().selection().setSelection(VisibleSelection(misspellingRange)); 315 frame().selection().setSelection(VisibleSelection(misspellingRange));
315 frame().selection().revealSelection(); 316 frame().selection().revealSelection();
316
317 spellCheckerClient().updateSpellingUIWithMisspelledWord(misspelledWord); 317 spellCheckerClient().updateSpellingUIWithMisspelledWord(misspelledWord);
318 frame().document()->markers().addMarker(misspellingRange.startPosition() , misspellingRange.endPosition(), DocumentMarker::Spelling); 318 frame().document()->markers().addMarker(misspellingRange.startPosition() , misspellingRange.endPosition(), DocumentMarker::Spelling);
319 } 319 }
320 } 320 }
321 321
322 void SpellChecker::showSpellingGuessPanel() 322 void SpellChecker::showSpellingGuessPanel()
323 { 323 {
324 if (spellCheckerClient().spellingUIIsShowing()) { 324 if (spellCheckerClient().spellingUIIsShowing()) {
325 spellCheckerClient().showSpellingUI(false); 325 spellCheckerClient().showSpellingUI(false);
326 return; 326 return;
(...skipping 313 matching lines...) Expand 10 before | Expand all | Expand 10 after
640 frame().document()->markers().addMarker(badGrammarRange. startPosition(), badGrammarRange.endPosition(), DocumentMarker::Grammar, detail- >userDescription, result->hash); 640 frame().document()->markers().addMarker(badGrammarRange. startPosition(), badGrammarRange.endPosition(), DocumentMarker::Grammar, detail- >userDescription, result->hash);
641 } 641 }
642 } 642 }
643 } else if (result->decoration == TextDecorationTypeInvisibleSpellche ck && resultLocation >= paragraph.checkingStart() && resultLocation + resultLeng th <= spellingRangeEndOffset) { 643 } else if (result->decoration == TextDecorationTypeInvisibleSpellche ck && resultLocation >= paragraph.checkingStart() && resultLocation + resultLeng th <= spellingRangeEndOffset) {
644 DCHECK_GT(resultLength, 0); 644 DCHECK_GT(resultLength, 0);
645 DCHECK_GE(resultLocation, 0); 645 DCHECK_GE(resultLocation, 0);
646 const EphemeralRange invisibleSpellcheckRange = calculateCharact erSubrange(paragraph.paragraphRange(), resultLocation, resultLength); 646 const EphemeralRange invisibleSpellcheckRange = calculateCharact erSubrange(paragraph.paragraphRange(), resultLocation, resultLength);
647 frame().document()->markers().addMarker(invisibleSpellcheckRange .startPosition(), invisibleSpellcheckRange.endPosition(), DocumentMarker::Invisi bleSpellcheck, result->replacement, result->hash); 647 frame().document()->markers().addMarker(invisibleSpellcheckRange .startPosition(), invisibleSpellcheckRange.endPosition(), DocumentMarker::Invisi bleSpellcheck, result->replacement, result->hash);
648 } 648 }
649 } 649 }
650
651 } 650 }
652 651
653 if (selectionChanged) { 652 if (selectionChanged) {
654 TextCheckingParagraph extendedParagraph(paragraph); 653 TextCheckingParagraph extendedParagraph(paragraph);
655 // Restore the caret position if we have made any replacements 654 // Restore the caret position if we have made any replacements
656 extendedParagraph.expandRangeToNextEnd(); 655 extendedParagraph.expandRangeToNextEnd();
657 if (restoreSelectionAfterChange && selectionOffset >= 0 && selectionOffs et <= extendedParagraph.rangeLength()) { 656 if (restoreSelectionAfterChange && selectionOffset >= 0 && selectionOffs et <= extendedParagraph.rangeLength()) {
658 EphemeralRange selectionRange = extendedParagraph.subrange(0, select ionOffset); 657 EphemeralRange selectionRange = extendedParagraph.subrange(0, select ionOffset);
659 frame().selection().moveTo(selectionRange.endPosition(), TextAffinit y::Downstream); 658 frame().selection().moveTo(selectionRange.endPosition(), TextAffinit y::Downstream);
660 if (adjustSelectionForParagraphBoundaries) 659 if (adjustSelectionForParagraphBoundaries)
(...skipping 318 matching lines...) Expand 10 before | Expand all | Expand 10 after
979 visitor->trace(m_frame); 978 visitor->trace(m_frame);
980 visitor->trace(m_spellCheckRequester); 979 visitor->trace(m_spellCheckRequester);
981 } 980 }
982 981
983 void SpellChecker::prepareForLeakDetection() 982 void SpellChecker::prepareForLeakDetection()
984 { 983 {
985 m_spellCheckRequester->prepareForLeakDetection(); 984 m_spellCheckRequester->prepareForLeakDetection();
986 } 985 }
987 986
988 } // namespace blink 987 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698