Chromium Code Reviews| Index: third_party/WebKit/Source/core/editing/spellcheck/SpellCheckRequester.cpp |
| diff --git a/third_party/WebKit/Source/core/editing/spellcheck/SpellCheckRequester.cpp b/third_party/WebKit/Source/core/editing/spellcheck/SpellCheckRequester.cpp |
| index acdea4597f8967f6609b5699ebd750859fa50932..6e83fac46b3174fcaba16251892c5c765f7bc24f 100644 |
| --- a/third_party/WebKit/Source/core/editing/spellcheck/SpellCheckRequester.cpp |
| +++ b/third_party/WebKit/Source/core/editing/spellcheck/SpellCheckRequester.cpp |
| @@ -68,24 +68,29 @@ DEFINE_TRACE(SpellCheckRequest) |
| } |
| // static |
| -PassRefPtrWillBeRawPtr<SpellCheckRequest> SpellCheckRequest::create(TextCheckingTypeMask textCheckingOptions, TextCheckingProcessType processType, PassRefPtrWillBeRawPtr<Range> checkingRange, PassRefPtrWillBeRawPtr<Range> paragraphRange, int requestNumber) |
| +PassRefPtrWillBeRawPtr<SpellCheckRequest> SpellCheckRequest::create(TextCheckingTypeMask textCheckingOptions, TextCheckingProcessType processType, const EphemeralRange& checkingRange, const EphemeralRange& paragraphRange, int requestNumber) |
| { |
| - ASSERT(checkingRange); |
| - ASSERT(paragraphRange); |
| - |
| - String text = checkingRange->text(); |
| - if (!text.length()) |
| + String text = plainText(checkingRange, TextIteratorEmitsObjectReplacementCharacter); |
| + if (text.isEmpty()) |
| return nullptr; |
| - const DocumentMarkerVector& markers = checkingRange->ownerDocument().markers().markersInRange(EphemeralRange(checkingRange.get()), DocumentMarker::SpellCheckClientMarkers()); |
| + RefPtrWillBeRawPtr<Range> checkingRangeObject = createRange(checkingRange); |
| + RefPtrWillBeRawPtr<Range> paragraphRangeObject = nullptr; |
| + // Share identical Range objects. |
| + if (checkingRange == paragraphRange) |
| + paragraphRangeObject = checkingRangeObject; |
| + else |
| + paragraphRangeObject = createRange(paragraphRange); |
| + |
| + const DocumentMarkerVector& markers = checkingRangeObject->ownerDocument().markers().markersInRange(checkingRange, DocumentMarker::SpellCheckClientMarkers()); |
| Vector<uint32_t> hashes(markers.size()); |
| Vector<unsigned> offsets(markers.size()); |
| - for (size_t i = 0; i < markers.size(); i++) { |
| + for (size_t i = 0; i < markers.size(); ++i) { |
| hashes[i] = markers[i]->hash(); |
| offsets[i] = markers[i]->startOffset(); |
| } |
| - return adoptRefWillBeNoop(new SpellCheckRequest(checkingRange, paragraphRange, text, textCheckingOptions, processType, hashes, offsets, requestNumber)); |
| + return adoptRefWillBeNoop(new SpellCheckRequest(checkingRangeObject, paragraphRangeObject, text, textCheckingOptions, processType, hashes, offsets, requestNumber)); |
| } |
| const TextCheckingRequestData& SpellCheckRequest::data() const |
| @@ -214,10 +219,12 @@ void SpellCheckRequester::invokeRequest(PassRefPtrWillBeRawPtr<SpellCheckRequest |
| void SpellCheckRequester::clearProcessingRequest() |
| { |
| // This assumes that m_processingRequest's Ranges aren't shared. |
| - if (m_processingRequest->checkingRange()) |
| - m_processingRequest->checkingRange()->dispose(); |
| - if (m_processingRequest->paragraphRange()) |
| - m_processingRequest->paragraphRange()->dispose(); |
| + RefPtrWillBeRawPtr<Range> checkingRange = m_processingRequest->checkingRange(); |
|
yosin_UTC9
2015/09/26 15:46:06
nit: Can we have |SpellCheckRequest::dispose()| or
sof
2015/09/26 16:18:29
Addressed.
|
| + RefPtrWillBeRawPtr<Range> paragraphRange = m_processingRequest->paragraphRange(); |
| + if (checkingRange) |
| + checkingRange->dispose(); |
| + if (paragraphRange && paragraphRange != checkingRange) |
| + paragraphRange->dispose(); |
| m_processingRequest.clear(); |
| } |