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

Unified Diff: Source/core/editing/SpellChecker.cpp

Issue 21130005: Trigger spell check/remove markers if spell checker gets enabled/disabled. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Improvement & test for chunked spell checking. Created 7 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 side-by-side diff with in-line comments
Download patch
Index: Source/core/editing/SpellChecker.cpp
diff --git a/Source/core/editing/SpellChecker.cpp b/Source/core/editing/SpellChecker.cpp
index 97c1fd81bc82e9ec410b67c50c2872dbc4045c64..67838e20f9291951df5b633be4b3b47fceee57c8 100644
--- a/Source/core/editing/SpellChecker.cpp
+++ b/Source/core/editing/SpellChecker.cpp
@@ -46,12 +46,14 @@ SpellCheckRequest::SpellCheckRequest(
TextCheckingTypeMask mask,
TextCheckingProcessType processType,
const Vector<uint32_t>& documentMarkersInRange,
- const Vector<unsigned>& documentMarkerOffsets)
+ const Vector<unsigned>& documentMarkerOffsets,
+ int requestNumber)
: m_checker(0)
, m_checkingRange(checkingRange)
, m_paragraphRange(paragraphRange)
, m_rootEditableElement(m_checkingRange->startContainer()->rootEditableElement())
, m_requestData(unrequestedTextCheckingSequence, text, mask, processType, documentMarkersInRange, documentMarkerOffsets)
+ , m_requestNumber(requestNumber)
{
}
@@ -60,7 +62,7 @@ SpellCheckRequest::~SpellCheckRequest()
}
// static
-PassRefPtr<SpellCheckRequest> SpellCheckRequest::create(TextCheckingTypeMask textCheckingOptions, TextCheckingProcessType processType, PassRefPtr<Range> checkingRange, PassRefPtr<Range> paragraphRange)
+PassRefPtr<SpellCheckRequest> SpellCheckRequest::create(TextCheckingTypeMask textCheckingOptions, TextCheckingProcessType processType, PassRefPtr<Range> checkingRange, PassRefPtr<Range> paragraphRange, int requestNubmer)
{
ASSERT(checkingRange);
ASSERT(paragraphRange);
@@ -77,7 +79,7 @@ PassRefPtr<SpellCheckRequest> SpellCheckRequest::create(TextCheckingTypeMask tex
offsets[i] = markers[i]->startOffset();
}
- return adoptRef(new SpellCheckRequest(checkingRange, paragraphRange, text, textCheckingOptions, processType, hashes, offsets));
+ return adoptRef(new SpellCheckRequest(checkingRange, paragraphRange, text, textCheckingOptions, processType, hashes, offsets, requestNubmer));
}
const TextCheckingRequestData& SpellCheckRequest::data() const
@@ -207,13 +209,21 @@ void SpellChecker::invokeRequest(PassRefPtr<SpellCheckRequest> request)
void SpellChecker::enqueueRequest(PassRefPtr<SpellCheckRequest> request)
{
ASSERT(request);
+ bool continuation = false;
please use gerrit instead 2013/08/13 21:54:21 This code appears to have a bug: it enqueues all o
+ if (m_requestQueue.size() > 0) {
+ RefPtr<SpellCheckRequest> lastRequest = m_requestQueue.last();
+ continuation = request->rootEditableElement() == lastRequest->rootEditableElement()
+ && request->requestNumber() == lastRequest->requestNumber() + 1;
+ }
- for (RequestQueue::iterator it = m_requestQueue.begin(); it != m_requestQueue.end(); ++it) {
- if (request->rootEditableElement() != (*it)->rootEditableElement())
- continue;
+ if (!continuation) {
+ for (RequestQueue::iterator it = m_requestQueue.begin(); it != m_requestQueue.end(); ++it) {
+ if (request->rootEditableElement() != (*it)->rootEditableElement())
+ continue;
- *it = request;
- return;
+ *it = request;
+ return;
+ }
}
m_requestQueue.append(request);

Powered by Google App Engine
This is Rietveld 408576698