1 // Copyright 2020 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chrome/services/speech/speech_recognition_service_impl.h"
6
7 #include "chrome/services/speech/speech_recognition_recognizer_impl.h"
8
9 namespace speech {
10
SpeechRecognitionServiceImpl(mojo::PendingReceiver<media::mojom::SpeechRecognitionService> receiver)11 SpeechRecognitionServiceImpl::SpeechRecognitionServiceImpl(
12 mojo::PendingReceiver<media::mojom::SpeechRecognitionService> receiver)
13 : receiver_(this, std::move(receiver)) {}
14
15 SpeechRecognitionServiceImpl::~SpeechRecognitionServiceImpl() = default;
16
BindContext(mojo::PendingReceiver<media::mojom::SpeechRecognitionContext> context)17 void SpeechRecognitionServiceImpl::BindContext(
18 mojo::PendingReceiver<media::mojom::SpeechRecognitionContext> context) {
19 speech_recognition_contexts_.Add(this, std::move(context));
20 }
21
SetUrlLoaderFactory(mojo::PendingRemote<network::mojom::URLLoaderFactory> url_loader_factory)22 void SpeechRecognitionServiceImpl::SetUrlLoaderFactory(
23 mojo::PendingRemote<network::mojom::URLLoaderFactory> url_loader_factory) {
24 url_loader_factory_ = mojo::Remote<network::mojom::URLLoaderFactory>(
25 std::move(url_loader_factory));
26 url_loader_factory_.set_disconnect_handler(
27 base::BindOnce(&SpeechRecognitionServiceImpl::DisconnectHandler,
28 base::Unretained(this)));
29 }
30
SetSodaPath(const base::FilePath & binary_path,const base::FilePath & config_path)31 void SpeechRecognitionServiceImpl::SetSodaPath(
32 const base::FilePath& binary_path,
33 const base::FilePath& config_path) {
34 binary_path_ = binary_path;
35 config_path_ = config_path;
36 }
37
BindSpeechRecognitionServiceClient(mojo::PendingRemote<media::mojom::SpeechRecognitionServiceClient> client)38 void SpeechRecognitionServiceImpl::BindSpeechRecognitionServiceClient(
39 mojo::PendingRemote<media::mojom::SpeechRecognitionServiceClient> client) {
40 client_ = mojo::Remote<media::mojom::SpeechRecognitionServiceClient>(
41 std::move(client));
42 }
43
44 mojo::PendingRemote<network::mojom::URLLoaderFactory>
GetUrlLoaderFactory()45 SpeechRecognitionServiceImpl::GetUrlLoaderFactory() {
46 mojo::PendingRemote<network::mojom::URLLoaderFactory> pending_factory_remote;
47 url_loader_factory_->Clone(
48 pending_factory_remote.InitWithNewPipeAndPassReceiver());
49
50 return pending_factory_remote;
51 }
52
BindRecognizer(mojo::PendingReceiver<media::mojom::SpeechRecognitionRecognizer> receiver,mojo::PendingRemote<media::mojom::SpeechRecognitionRecognizerClient> client,BindRecognizerCallback callback)53 void SpeechRecognitionServiceImpl::BindRecognizer(
54 mojo::PendingReceiver<media::mojom::SpeechRecognitionRecognizer> receiver,
55 mojo::PendingRemote<media::mojom::SpeechRecognitionRecognizerClient> client,
56 BindRecognizerCallback callback) {
57 SpeechRecognitionRecognizerImpl::Create(
58 std::move(receiver), std::move(client), weak_factory_.GetWeakPtr(),
59 binary_path_, config_path_);
60 std::move(callback).Run(
61 SpeechRecognitionRecognizerImpl::IsMultichannelSupported());
62 }
63
DisconnectHandler()64 void SpeechRecognitionServiceImpl::DisconnectHandler() {
65 if (client_.is_bound())
66 client_->OnNetworkServiceDisconnect();
67 }
68
69 } // namespace speech
70