Index: ui/keyboard/resources/voice_input.js |
diff --git a/ui/keyboard/resources/voice_input.js b/ui/keyboard/resources/voice_input.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..fc3016511a7aea46370adbc27ad844ac4c3f0664 |
--- /dev/null |
+++ b/ui/keyboard/resources/voice_input.js |
@@ -0,0 +1,74 @@ |
+// Copyright (c) 2013 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+function VoiceInput(keyboard) { |
+ this.finaResult_ = null; |
+ this.recognizing_ = false; |
+ this.keyboard_ = keyboard; |
+ this.recognition_ = new webkitSpeechRecognition(); |
+ this.recognition_.onstart = this.onStartHandler.bind(this); |
+ this.recognition_.onresult = this.onResultHandler.bind(this); |
+ this.recognition_.onerror = this.onErrorHandler.bind(this); |
+ this.recognition_.onend = this.onEndHandler.bind(this); |
+}; |
+ |
+VoiceInput.prototype = { |
+ /** |
+ * Event handler for mouse/touch down events. |
+ */ |
+ onDown: function() { |
+ if (this.recognizing_) { |
+ this.recognition_.stop(); |
+ return; |
+ } |
+ this.recognition_.start(); |
+ }, |
+ |
+ /** |
+ * Speech recognition started. Change mic key's icon. |
+ */ |
+ onStartHandler: function() { |
+ this.recognizing_ = true; |
+ this.finalResult_ = ''; |
+ if (!this.keyboard_.classList.contains('audio')) |
+ this.keyboard_.classList.add('audio'); |
+ }, |
+ |
+ /** |
+ * Speech recognizer returns a result. |
+ * @param{Event} e The SpeechRecognition event that is raised each time |
+ * there |
+ * are any changes to interim or final results. |
+ */ |
+ onResultHandler: function(e) { |
+ for (var i = e.resultIndex; i < e.results.length; i++) { |
+ if (e.results[i].isFinal) |
+ this.finalResult_ = e.results[i][0].transcript; |
+ } |
+ for (var i = 0; i < this.finalResult_.length; i++) { |
+ var keyEvent = { |
+ keyIdentifier: this.finalResult_.charAt(i) |
+ }; |
+ sendKeyEvent(keyEvent); |
+ } |
+ }, |
+ |
+ /** |
+ * Speech recognizer returns an error. |
+ * @param{Event} e The SpeechRecognitionError event that is raised each time |
+ * there is an error. |
+ */ |
+ onErrorHandler: function(e) { |
+ console.error('error code = ' + e.error); |
+ }, |
+ |
+ /** |
+ * Speech recognition ended. Reset mic key's icon. |
+ */ |
+ onEndHandler: function() { |
+ if (this.keyboard_.classList.contains('audio')) |
+ this.keyboard_.classList.remove('audio'); |
+ this.recognizing_ = false; |
+ } |
+}; |