13c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch/* 23c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch * Copyright (C) 2010 Google Inc. All rights reserved. 33c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch * 43c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch * Redistribution and use in source and binary forms, with or without 53c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch * modification, are permitted provided that the following conditions 63c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch * are met: 73c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch * 1. Redistributions of source code must retain the above copyright 83c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch * notice, this list of conditions and the following disclaimer. 93c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch * 2. Redistributions in binary form must reproduce the above copyright 103c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch * notice, this list of conditions and the following disclaimer in the 113c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch * documentation and/or other materials provided with the distribution. 123c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch * 133c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY 143c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 153c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 163c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR 173c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 183c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 193c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 203c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 213c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 223c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 233c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 243c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch */ 253c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch 263c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch#ifndef SpellCheckRequester_h 273c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch#define SpellCheckRequester_h 283c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch 293c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch#include "core/dom/Element.h" 303c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch#include "core/dom/Range.h" 311e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "platform/Timer.h" 321e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "platform/text/TextChecking.h" 333c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch#include "wtf/Deque.h" 343c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch#include "wtf/Noncopyable.h" 353c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch#include "wtf/RefPtr.h" 363c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch#include "wtf/Vector.h" 373c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch#include "wtf/text/WTFString.h" 383c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch 39c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink { 403c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch 41d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)class LocalFrame; 42e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)class SpellCheckRequester; 433c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdochclass TextCheckerClient; 443c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch 4509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)class SpellCheckRequest FINAL : public TextCheckingRequest { 463c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdochpublic: 477242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci static PassRefPtrWillBeRawPtr<SpellCheckRequest> create(TextCheckingTypeMask, TextCheckingProcessType, PassRefPtrWillBeRawPtr<Range> checkingRange, PassRefPtrWillBeRawPtr<Range> paragraphRange, int requestNumber = 0); 483c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch virtual ~SpellCheckRequest(); 493c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch 50a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch PassRefPtrWillBeRawPtr<Range> checkingRange() const { return m_checkingRange; } 51a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch PassRefPtrWillBeRawPtr<Range> paragraphRange() const { return m_paragraphRange; } 52f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) PassRefPtrWillBeRawPtr<Element> rootEditableElement() const { return m_rootEditableElement; } 533c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch 54e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) void setCheckerAndSequence(SpellCheckRequester*, int sequence); 557242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#if !ENABLE(OILPAN) 563c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch void requesterDestroyed(); 577242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#endif 583c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch 593c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch virtual const TextCheckingRequestData& data() const OVERRIDE; 603c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch virtual void didSucceed(const Vector<TextCheckingResult>&) OVERRIDE; 613c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch virtual void didCancel() OVERRIDE; 623c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch 63e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) int requestNumber() const { return m_requestNumber; } 64e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) 657242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci virtual void trace(Visitor*) OVERRIDE; 667242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 673c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdochprivate: 68a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch SpellCheckRequest(PassRefPtrWillBeRawPtr<Range> checkingRange, PassRefPtrWillBeRawPtr<Range> paragraphRange, const String&, TextCheckingTypeMask, TextCheckingProcessType, const Vector<uint32_t>& documentMarkersInRange, const Vector<unsigned>& documentMarkerOffsets, int requestNumber); 693c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch 707242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci RawPtrWillBeMember<SpellCheckRequester> m_requester; 717242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci RefPtrWillBeMember<Range> m_checkingRange; 727242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci RefPtrWillBeMember<Range> m_paragraphRange; 737242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci RefPtrWillBeMember<Element> m_rootEditableElement; 743c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch TextCheckingRequestData m_requestData; 75e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) int m_requestNumber; 763c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch}; 773c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch 787242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucciclass SpellCheckRequester FINAL : public NoBaseWillBeGarbageCollectedFinalized<SpellCheckRequester> { 797242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci WTF_MAKE_NONCOPYABLE(SpellCheckRequester); WTF_MAKE_FAST_ALLOCATED_WILL_BE_REMOVED; 803c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdochpublic: 817242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci static PassOwnPtrWillBeRawPtr<SpellCheckRequester> create(LocalFrame& frame) 827242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci { 837242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return adoptPtrWillBeNoop(new SpellCheckRequester(frame)); 847242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci } 853c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch 86e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) ~SpellCheckRequester(); 877242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci void trace(Visitor*); 883c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch 893c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch bool isAsynchronousEnabled() const; 903c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch bool isCheckable(Range*) const; 913c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch 927242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci void requestCheckingFor(PassRefPtrWillBeRawPtr<SpellCheckRequest>); 933c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch void cancelCheck(); 943c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch 953c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch int lastRequestSequence() const 963c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch { 973c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch return m_lastRequestSequence; 983c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch } 993c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch 1003c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch int lastProcessedSequence() const 1013c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch { 1023c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch return m_lastProcessedSequence; 1033c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch } 1043c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch 1053c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdochprivate: 1067242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci friend class SpellCheckRequest; 1077242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 1087242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci explicit SpellCheckRequester(LocalFrame&); 1093c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch 1103c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch bool canCheckAsynchronously(Range*) const; 111e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) TextCheckerClient& client() const; 112e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) void timerFiredToProcessQueuedRequest(Timer<SpellCheckRequester>*); 1137242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci void invokeRequest(PassRefPtrWillBeRawPtr<SpellCheckRequest>); 1147242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci void enqueueRequest(PassRefPtrWillBeRawPtr<SpellCheckRequest>); 1153c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch void didCheckSucceed(int sequence, const Vector<TextCheckingResult>&); 1163c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch void didCheckCancel(int sequence); 1173c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch void didCheck(int sequence, const Vector<TextCheckingResult>&); 1183c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch 1197242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci RawPtrWillBeMember<LocalFrame> m_frame; 1207242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci LocalFrame& frame() const 1217242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci { 1227242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci ASSERT(m_frame); 1237242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return *m_frame; 1247242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci } 1257242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 1263c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch int m_lastRequestSequence; 1273c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch int m_lastProcessedSequence; 1283c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch 129e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) Timer<SpellCheckRequester> m_timerToProcessQueuedRequest; 1303c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch 1317242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci RefPtrWillBeMember<SpellCheckRequest> m_processingRequest; 1327242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 1337242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci typedef WillBeHeapDeque<RefPtrWillBeMember<SpellCheckRequest> > RequestQueue; 1343c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch RequestQueue m_requestQueue; 1353c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch}; 1363c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch 137c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} // namespace blink 1383c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch 1393c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch#endif // SpellCheckRequester_h 140