Chromium Code Reviews| Index: Source/core/editing/SpellCheckRequester.cpp |
| diff --git a/Source/core/editing/SpellCheckRequester.cpp b/Source/core/editing/SpellCheckRequester.cpp |
| index 40aec3b9cbc6d30844315b18042d5f24bbf65406..03b2198a050101a4950239e8cbb6b45b87039f62 100644 |
| --- a/Source/core/editing/SpellCheckRequester.cpp |
| +++ b/Source/core/editing/SpellCheckRequester.cpp |
| @@ -45,7 +45,7 @@ SpellCheckRequest::SpellCheckRequest( |
| const Vector<uint32_t>& documentMarkersInRange, |
| const Vector<unsigned>& documentMarkerOffsets, |
| int requestNumber) |
| - : m_requester(0) |
| + : m_requester(nullptr) |
| , m_checkingRange(checkingRange) |
| , m_paragraphRange(paragraphRange) |
| , m_rootEditableElement(m_checkingRange->startContainer()->rootEditableElement()) |
| @@ -58,15 +58,24 @@ SpellCheckRequest::~SpellCheckRequest() |
| { |
| } |
| +void SpellCheckRequest::trace(Visitor* visitor) |
| +{ |
| + visitor->trace(m_requester); |
| + visitor->trace(m_checkingRange); |
| + visitor->trace(m_paragraphRange); |
| + visitor->trace(m_rootEditableElement); |
| + TextCheckingRequest::trace(visitor); |
| +} |
| + |
| // static |
| -PassRefPtr<SpellCheckRequest> SpellCheckRequest::create(TextCheckingTypeMask textCheckingOptions, TextCheckingProcessType processType, PassRefPtrWillBeRawPtr<Range> checkingRange, PassRefPtrWillBeRawPtr<Range> paragraphRange, int requestNumber) |
| +PassRefPtrWillBeRawPtr<SpellCheckRequest> SpellCheckRequest::create(TextCheckingTypeMask textCheckingOptions, TextCheckingProcessType processType, PassRefPtrWillBeRawPtr<Range> checkingRange, PassRefPtrWillBeRawPtr<Range> paragraphRange, int requestNumber) |
| { |
| ASSERT(checkingRange); |
| ASSERT(paragraphRange); |
| String text = checkingRange->text(); |
| if (!text.length()) |
| - return PassRefPtr<SpellCheckRequest>(); |
| + return PassRefPtrWillBeRawPtr<SpellCheckRequest>(); |
|
haraken
2014/09/08 07:25:57
nullptr
sof
2014/09/08 21:17:45
Simplified.
|
| const DocumentMarkerVector& markers = checkingRange->ownerDocument().markers().markersInRange(checkingRange.get(), DocumentMarker::SpellCheckClientMarkers()); |
| Vector<uint32_t> hashes(markers.size()); |
| @@ -76,7 +85,7 @@ PassRefPtr<SpellCheckRequest> SpellCheckRequest::create(TextCheckingTypeMask tex |
| offsets[i] = markers[i]->startOffset(); |
| } |
| - return adoptRef(new SpellCheckRequest(checkingRange, paragraphRange, text, textCheckingOptions, processType, hashes, offsets, requestNumber)); |
| + return adoptRefWillBeNoop(new SpellCheckRequest(checkingRange, paragraphRange, text, textCheckingOptions, processType, hashes, offsets, requestNumber)); |
| } |
| const TextCheckingRequestData& SpellCheckRequest::data() const |
| @@ -89,7 +98,7 @@ void SpellCheckRequest::didSucceed(const Vector<TextCheckingResult>& results) |
| if (!m_requester) |
| return; |
| SpellCheckRequester* requester = m_requester; |
| - m_requester = 0; |
| + m_requester = nullptr; |
| requester->didCheckSucceed(m_requestData.sequence(), results); |
| } |
| @@ -98,7 +107,7 @@ void SpellCheckRequest::didCancel() |
| if (!m_requester) |
| return; |
| SpellCheckRequester* requester = m_requester; |
| - m_requester = 0; |
| + m_requester = nullptr; |
| requester->didCheckCancel(m_requestData.sequence()); |
| } |
| @@ -110,13 +119,15 @@ void SpellCheckRequest::setCheckerAndSequence(SpellCheckRequester* requester, in |
| m_requestData.m_sequence = sequence; |
| } |
| +#if !ENABLE(OILPAN) |
| void SpellCheckRequest::requesterDestroyed() |
| { |
| - m_requester = 0; |
| + m_requester = nullptr; |
| } |
| +#endif |
| SpellCheckRequester::SpellCheckRequester(LocalFrame& frame) |
| - : m_frame(frame) |
| + : m_frame(&frame) |
| , m_lastRequestSequence(0) |
| , m_lastProcessedSequence(0) |
| , m_timerToProcessQueuedRequest(this, &SpellCheckRequester::timerFiredToProcessQueuedRequest) |
| @@ -125,15 +136,17 @@ SpellCheckRequester::SpellCheckRequester(LocalFrame& frame) |
| SpellCheckRequester::~SpellCheckRequester() |
| { |
| +#if !ENABLE(OILPAN) |
| if (m_processingRequest) |
| m_processingRequest->requesterDestroyed(); |
| for (RequestQueue::iterator i = m_requestQueue.begin(); i != m_requestQueue.end(); ++i) |
| (*i)->requesterDestroyed(); |
| +#endif |
| } |
| TextCheckerClient& SpellCheckRequester::client() const |
| { |
| - return m_frame.spellChecker().textChecker(); |
| + return m_frame->spellChecker().textChecker(); |
| } |
| void SpellCheckRequester::timerFiredToProcessQueuedRequest(Timer<SpellCheckRequester>*) |
| @@ -147,7 +160,7 @@ void SpellCheckRequester::timerFiredToProcessQueuedRequest(Timer<SpellCheckReque |
| bool SpellCheckRequester::isAsynchronousEnabled() const |
| { |
| - return m_frame.settings() && m_frame.settings()->asynchronousSpellCheckingEnabled(); |
| + return m_frame->settings() && m_frame->settings()->asynchronousSpellCheckingEnabled(); |
| } |
| bool SpellCheckRequester::canCheckAsynchronously(Range* range) const |
| @@ -165,7 +178,7 @@ bool SpellCheckRequester::isCheckable(Range* range) const |
| return true; |
| } |
| -void SpellCheckRequester::requestCheckingFor(PassRefPtr<SpellCheckRequest> request) |
| +void SpellCheckRequester::requestCheckingFor(PassRefPtrWillBeRawPtr<SpellCheckRequest> request) |
| { |
| if (!request || !canCheckAsynchronously(request->paragraphRange().get())) |
| return; |
| @@ -191,19 +204,19 @@ void SpellCheckRequester::cancelCheck() |
| m_processingRequest->didCancel(); |
| } |
| -void SpellCheckRequester::invokeRequest(PassRefPtr<SpellCheckRequest> request) |
| +void SpellCheckRequester::invokeRequest(PassRefPtrWillBeRawPtr<SpellCheckRequest> request) |
| { |
| ASSERT(!m_processingRequest); |
| m_processingRequest = request; |
| client().requestCheckingOfString(m_processingRequest); |
| } |
| -void SpellCheckRequester::enqueueRequest(PassRefPtr<SpellCheckRequest> request) |
| +void SpellCheckRequester::enqueueRequest(PassRefPtrWillBeRawPtr<SpellCheckRequest> request) |
| { |
| ASSERT(request); |
| bool continuation = false; |
| if (!m_requestQueue.isEmpty()) { |
| - RefPtr<SpellCheckRequest> lastRequest = m_requestQueue.last(); |
| + RefPtrWillBeRawPtr<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. |
| continuation = request->rootEditableElement() == lastRequest->rootEditableElement() |
| @@ -233,7 +246,7 @@ void SpellCheckRequester::didCheck(int sequence, const Vector<TextCheckingResult |
| return; |
| } |
| - m_frame.spellChecker().markAndReplaceFor(m_processingRequest, results); |
| + m_frame->spellChecker().markAndReplaceFor(m_processingRequest, results); |
| if (m_lastProcessedSequence < sequence) |
| m_lastProcessedSequence = sequence; |
| @@ -252,7 +265,8 @@ void SpellCheckRequester::didCheckSucceed(int sequence, const Vector<TextCheckin |
| markers.remove(DocumentMarker::Spelling); |
| if (!requestData.maskContains(TextCheckingTypeGrammar)) |
| markers.remove(DocumentMarker::Grammar); |
| - m_frame.document()->markers().removeMarkers(m_processingRequest->checkingRange().get(), markers); |
| + if (m_frame->document()) |
|
haraken
2014/09/08 07:25:57
Why do we need to introduce this check in this CL?
sof
2014/09/08 21:17:45
Thanks for bringing this up. With the prompt dispo
|
| + m_frame->document()->markers().removeMarkers(m_processingRequest->checkingRange().get(), markers); |
| } |
| didCheck(sequence, results); |
| } |
| @@ -263,4 +277,11 @@ void SpellCheckRequester::didCheckCancel(int sequence) |
| didCheck(sequence, results); |
| } |
| +void SpellCheckRequester::trace(Visitor* visitor) |
| +{ |
| + visitor->trace(m_frame); |
| + visitor->trace(m_processingRequest); |
| + visitor->trace(m_requestQueue); |
| +} |
| + |
| } // namespace blink |