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); |