summaryrefslogtreecommitdiff
path: root/chromium/third_party/blink/renderer/modules/speech/speech_recognition_controller.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/blink/renderer/modules/speech/speech_recognition_controller.cc')
-rw-r--r--chromium/third_party/blink/renderer/modules/speech/speech_recognition_controller.cc54
1 files changed, 46 insertions, 8 deletions
diff --git a/chromium/third_party/blink/renderer/modules/speech/speech_recognition_controller.cc b/chromium/third_party/blink/renderer/modules/speech/speech_recognition_controller.cc
index bd7656e648c..6bd603d0da6 100644
--- a/chromium/third_party/blink/renderer/modules/speech/speech_recognition_controller.cc
+++ b/chromium/third_party/blink/renderer/modules/speech/speech_recognition_controller.cc
@@ -27,28 +27,66 @@
#include <memory>
+#include "services/service_manager/public/cpp/interface_provider.h"
+#include "third_party/blink/renderer/core/dom/document.h"
+#include "third_party/blink/renderer/modules/speech/speech_grammar_list.h"
+#include "third_party/blink/renderer/modules/speech/speech_recognition.h"
+
namespace blink {
const char SpeechRecognitionController::kSupplementName[] =
"SpeechRecognitionController";
-SpeechRecognitionController::SpeechRecognitionController(
- SpeechRecognitionClient* client)
- : client_(client) {}
+SpeechRecognitionController::SpeechRecognitionController(LocalFrame& frame)
+ : Supplement<LocalFrame>(frame) {}
SpeechRecognitionController::~SpeechRecognitionController() {
// FIXME: Call m_client->pageDestroyed(); once we have implemented a client.
}
SpeechRecognitionController* SpeechRecognitionController::Create(
- SpeechRecognitionClient* client) {
- return new SpeechRecognitionController(client);
+ LocalFrame& frame) {
+ return new SpeechRecognitionController(frame);
+}
+
+void SpeechRecognitionController::Start(
+ mojom::blink::SpeechRecognitionSessionRequest session_request,
+ mojom::blink::SpeechRecognitionSessionClientPtrInfo session_client,
+ const SpeechGrammarList& grammars,
+ const String& lang,
+ bool continuous,
+ bool interim_results,
+ unsigned long max_alternatives) {
+ mojom::blink::StartSpeechRecognitionRequestParamsPtr msg_params =
+ mojom::blink::StartSpeechRecognitionRequestParams::New();
+ for (unsigned i = 0; i < grammars.length(); i++) {
+ SpeechGrammar* grammar = grammars.item(i);
+ msg_params->grammars.push_back(mojom::blink::SpeechRecognitionGrammar::New(
+ grammar->src(), grammar->weight()));
+ }
+ msg_params->language = lang.IsNull() ? g_empty_string : lang;
+ msg_params->max_hypotheses = max_alternatives;
+ msg_params->continuous = continuous;
+ msg_params->interim_results = interim_results;
+ msg_params->origin = GetSupplementable()->GetDocument()->GetSecurityOrigin();
+ msg_params->client = std::move(session_client);
+ msg_params->session_request = std::move(session_request);
+
+ GetSpeechRecognizer().Start(std::move(msg_params));
}
-void ProvideSpeechRecognitionTo(LocalFrame& frame,
- SpeechRecognitionClient* client) {
+void ProvideSpeechRecognitionTo(LocalFrame& frame) {
SpeechRecognitionController::ProvideTo(
- frame, SpeechRecognitionController::Create(client));
+ frame, SpeechRecognitionController::Create(frame));
+}
+
+mojom::blink::SpeechRecognizer&
+SpeechRecognitionController::GetSpeechRecognizer() {
+ if (!speech_recognizer_) {
+ GetSupplementable()->GetInterfaceProvider().GetInterface(
+ mojo::MakeRequest(&speech_recognizer_));
+ }
+ return *speech_recognizer_;
}
} // namespace blink