• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1  /*
2   * Copyright (C) 2010 Google Inc. All rights reserved.
3   *
4   * Redistribution and use in source and binary forms, with or without
5   * modification, are permitted provided that the following conditions are
6   * met:
7   *
8   *     * Redistributions of source code must retain the above copyright
9   * notice, this list of conditions and the following disclaimer.
10   *     * Redistributions in binary form must reproduce the above
11   * copyright notice, this list of conditions and the following disclaimer
12   * in the documentation and/or other materials provided with the
13   * distribution.
14   *     * Neither the name of Google Inc. nor the names of its
15   * contributors may be used to endorse or promote products derived from
16   * this software without specific prior written permission.
17   *
18   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19   * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20   * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21   * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22   * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25   * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26   * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27   * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28   * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29   */
30  
31  #include "config.h"
32  #include "SpeechInput.h"
33  
34  #if ENABLE(INPUT_SPEECH)
35  
36  #include "SecurityOrigin.h"
37  #include "SpeechInputClient.h"
38  #include "SpeechInputListener.h"
39  
40  namespace WebCore {
41  
SpeechInput(SpeechInputClient * client)42  SpeechInput::SpeechInput(SpeechInputClient* client)
43      : m_client(client)
44      , m_nextListenerId(1)
45  {
46      m_client->setListener(this);
47  }
48  
~SpeechInput()49  SpeechInput::~SpeechInput()
50  {
51      m_client->setListener(0);
52  }
53  
registerListener(SpeechInputListener * listener)54  int SpeechInput::registerListener(SpeechInputListener* listener)
55  {
56  #if defined(DEBUG)
57      // Check if already present.
58      for (HashMap<int, SpeechInputListener*>::iterator it = m_listeners.begin(); it != m_listeners.end(); ++it)
59        ASSERT(it->second != listener);
60  #endif
61  
62      m_listeners.add(m_nextListenerId, listener);
63      return m_nextListenerId++;
64  }
65  
unregisterListener(int listenerId)66  void SpeechInput::unregisterListener(int listenerId)
67  {
68      if (m_listeners.contains(listenerId))
69          m_listeners.remove(listenerId);
70  }
71  
didCompleteRecording(int listenerId)72  void SpeechInput::didCompleteRecording(int listenerId)
73  {
74      // Don't assert if not present as the element might have been removed by the page while
75      // this event was on the way.
76      if (m_listeners.contains(listenerId))
77          m_listeners.get(listenerId)->didCompleteRecording(listenerId);
78  }
79  
didCompleteRecognition(int listenerId)80  void SpeechInput::didCompleteRecognition(int listenerId)
81  {
82      // Don't assert if not present as the element might have been removed by the page while
83      // this event was on the way.
84      if (m_listeners.contains(listenerId))
85          m_listeners.get(listenerId)->didCompleteRecognition(listenerId);
86  }
87  
setRecognitionResult(int listenerId,const SpeechInputResultArray & result)88  void SpeechInput::setRecognitionResult(int listenerId, const SpeechInputResultArray& result)
89  {
90      // Don't assert if not present as the element might have been removed by the page while
91      // this event was on the way.
92      if (m_listeners.contains(listenerId))
93          m_listeners.get(listenerId)->setRecognitionResult(listenerId, result);
94  }
95  
startRecognition(int listenerId,const IntRect & elementRect,const AtomicString & language,const String & grammar,SecurityOrigin * origin)96  bool SpeechInput::startRecognition(int listenerId, const IntRect& elementRect, const AtomicString& language, const String& grammar, SecurityOrigin* origin)
97  {
98      ASSERT(m_listeners.contains(listenerId));
99      return m_client->startRecognition(listenerId, elementRect, language, grammar, origin);
100  }
101  
stopRecording(int listenerId)102  void SpeechInput::stopRecording(int listenerId)
103  {
104      ASSERT(m_listeners.contains(listenerId));
105      m_client->stopRecording(listenerId);
106  }
107  
cancelRecognition(int listenerId)108  void SpeechInput::cancelRecognition(int listenerId)
109  {
110      ASSERT(m_listeners.contains(listenerId));
111      m_client->cancelRecognition(listenerId);
112  }
113  
114  } // namespace WebCore
115  
116  #endif // ENABLE(INPUT_SPEECH)
117