15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*
25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2012 Google Inc. All rights reserved.
35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without
55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modification, are permitted provided that the following conditions
65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * are met:
75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *  * Redistributions of source code must retain the above copyright
85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *    notice, this list of conditions and the following disclaimer.
95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *  * Redistributions in binary form must reproduce the above copyright
105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *    notice, this list of conditions and the following disclaimer in the
115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *    documentation and/or other materials provided with the distribution.
125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "config.h"
275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
2853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "modules/speech/SpeechRecognition.h"
295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
30197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "bindings/core/v8/ExceptionState.h"
3153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/Document.h"
3253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/ExceptionCode.h"
3353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/page/Page.h"
3453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "modules/speech/SpeechRecognitionController.h"
3553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "modules/speech/SpeechRecognitionError.h"
3653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "modules/speech/SpeechRecognitionEvent.h"
375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
38c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink {
395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
405d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)SpeechRecognition* SpeechRecognition::create(ExecutionContext* context)
415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
425d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)    SpeechRecognition* speechRecognition = adoptRefCountedGarbageCollectedWillBeNoop(new SpeechRecognition(context));
435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    speechRecognition->suspendIfNeeded();
445d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)    return speechRecognition;
455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
4751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)void SpeechRecognition::start(ExceptionState& exceptionState)
485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    ASSERT(m_controller);
505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (m_started) {
51a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)        exceptionState.throwDOMException(InvalidStateError, "recognition has already started.");
525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        return;
535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
55926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    m_finalResults.clear();
565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    m_controller->start(this, m_grammars.get(), m_lang, m_continuous, m_interimResults, m_maxAlternatives);
575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    m_started = true;
585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void SpeechRecognition::stopFunction()
615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    ASSERT(m_controller);
63926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    if (m_started && !m_stopping) {
64926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        m_stopping = true;
65926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        m_controller->stop(this);
66926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    }
675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void SpeechRecognition::abort()
705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    ASSERT(m_controller);
72926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    if (m_started && !m_stopping) {
73926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        m_stopping = true;
74926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        m_controller->abort(this);
75926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    }
765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void SpeechRecognition::didStartAudio()
795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
801e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)    dispatchEvent(Event::create(EventTypeNames::audiostart));
815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void SpeechRecognition::didStartSound()
845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
851e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)    dispatchEvent(Event::create(EventTypeNames::soundstart));
865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void SpeechRecognition::didStartSpeech()
895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
901e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)    dispatchEvent(Event::create(EventTypeNames::speechstart));
915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void SpeechRecognition::didEndSpeech()
945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
951e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)    dispatchEvent(Event::create(EventTypeNames::speechend));
965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void SpeechRecognition::didEndSound()
995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1001e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)    dispatchEvent(Event::create(EventTypeNames::soundend));
1015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void SpeechRecognition::didEndAudio()
1045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1051e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)    dispatchEvent(Event::create(EventTypeNames::audioend));
1065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1085d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)void SpeechRecognition::didReceiveResults(const HeapVector<Member<SpeechRecognitionResult> >& newFinalResults, const HeapVector<Member<SpeechRecognitionResult> >& currentInterimResults)
1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
110926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    unsigned long resultIndex = m_finalResults.size();
111926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
112926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    for (size_t i = 0; i < newFinalResults.size(); ++i)
113926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        m_finalResults.append(newFinalResults[i]);
114926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
1155d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)    HeapVector<Member<SpeechRecognitionResult> > results = m_finalResults;
116926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    for (size_t i = 0; i < currentInterimResults.size(); ++i)
117926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)        results.append(currentInterimResults[i]);
118926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)
119926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    dispatchEvent(SpeechRecognitionEvent::createResult(resultIndex, results));
1205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1225d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)void SpeechRecognition::didReceiveNoMatch(SpeechRecognitionResult* result)
1235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    dispatchEvent(SpeechRecognitionEvent::createNoMatch(result));
1255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
127a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdochvoid SpeechRecognition::didReceiveError(PassRefPtrWillBeRawPtr<SpeechRecognitionError> error)
1285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    dispatchEvent(error);
1305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    m_started = false;
1315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void SpeechRecognition::didStart()
1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1351e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)    dispatchEvent(Event::create(EventTypeNames::start));
1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void SpeechRecognition::didEnd()
1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    m_started = false;
141926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    m_stopping = false;
1425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (!m_stoppedByActiveDOMObject)
1431e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)        dispatchEvent(Event::create(EventTypeNames::end));
1445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)const AtomicString& SpeechRecognition::interfaceName() const
1475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1481e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)    return EventTargetNames::SpeechRecognition;
1495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1511e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)ExecutionContext* SpeechRecognition::executionContext() const
1525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1531e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)    return ActiveDOMObject::executionContext();
1545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void SpeechRecognition::stop()
1575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    m_stoppedByActiveDOMObject = true;
1595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    if (hasPendingActivity())
1605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        abort();
1615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
16307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdochbool SpeechRecognition::hasPendingActivity() const
16407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch{
16507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch    return m_started;
16607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch}
16707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch
1681e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)SpeechRecognition::SpeechRecognition(ExecutionContext* context)
169926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    : ActiveDOMObject(context)
1705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    , m_grammars(SpeechGrammarList::create()) // FIXME: The spec is not clear on the default value for the grammars attribute.
1715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    , m_continuous(false)
1725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    , m_interimResults(false)
1735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    , m_maxAlternatives(1)
1745d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)    , m_controller(nullptr)
1755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    , m_stoppedByActiveDOMObject(false)
1765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    , m_started(false)
177926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    , m_stopping(false)
1785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1791e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)    Document* document = toDocument(executionContext());
1805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    Page* page = document->page();
1825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    ASSERT(page);
1835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    m_controller = SpeechRecognitionController::from(page);
1855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    ASSERT(m_controller);
1865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // FIXME: Need to hook up with Page to get notified when the visibility changes.
1885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
1905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)SpeechRecognition::~SpeechRecognition()
1915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
1925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
1935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
19409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)void SpeechRecognition::trace(Visitor* visitor)
19509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){
19609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    visitor->trace(m_grammars);
1975d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)#if ENABLE(OILPAN)
1985d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)    visitor->trace(m_controller);
1995d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)#endif
200d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    visitor->trace(m_finalResults);
201d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    EventTargetWithInlineData::trace(visitor);
20209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)}
20309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
204c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} // namespace blink
205