Chromium Code Reviews| Index: Source/core/editing/SpellChecker.cpp |
| diff --git a/Source/core/editing/SpellChecker.cpp b/Source/core/editing/SpellChecker.cpp |
| index 97c1fd81bc82e9ec410b67c50c2872dbc4045c64..f79109ebb0b8cc6d6e60a5691e88caa6da0415ef 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,23 @@ void SpellChecker::invokeRequest(PassRefPtr<SpellCheckRequest> request) |
| void SpellChecker::enqueueRequest(PassRefPtr<SpellCheckRequest> request) |
| { |
| ASSERT(request); |
| + bool continuation = false; |
| + if (m_requestQueue.size() > 0) { |
| + RefPtr<SpellCheckRequest> lastRequest = m_requestQueue.last(); |
| + // It's a continuation if the number of the last request got incremented in the new one and |
| + // both apply to the same editable. |
|
please use gerrit instead
2013/08/14 17:30:28
Ah, I see what this is doing now. Enqueueing a req
|
| + 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) { |
|
please use gerrit instead
2013/08/14 17:30:28
Nit: Maybe add a comment here:
// Spellcheck requ
pstanek
2013/08/14 17:36:26
Done.
|
| + 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); |