0

Add UpdateRecognitionContext() to SpeechRecognitionRecognizer mojom

In this way other classes can call the function from the interface. Make
SpeechRecognitionRecognizerImpl override the function from the interface
instead too.

The UpdateRecognitionContext() function is added under [MinVersion=8]
because SpeechRecognitionRecognitionContext inside
SpeechRecognitionOptions was added recently under the same version.

Bug: 388626991
Change-Id: Ie62e282eeb14cc0054a5005daba69a1e1d24a00f
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6170783
Reviewed-by: Daniel Cheng <dcheng@chromium.org>
Reviewed-by: Evan Liu <evliu@google.com>
Commit-Queue: Yiren Wang <yrw@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1409394}
This commit is contained in:
Yiren Wang
2025-01-21 17:11:02 -08:00
committed by Chromium LUCI CQ
parent 52e714b046
commit a7906efbd7
7 changed files with 24 additions and 8 deletions

@ -41,6 +41,9 @@ class FakeSpeechRecognizer : public media::mojom::AudioSourceFetcher,
void OnLanguageChanged(const std::string& language) override {}
void OnMaskOffensiveWordsChanged(bool mask_offensive_words) override {}
void MarkDone() override;
void UpdateRecognitionContext(
const media::SpeechRecognitionRecognitionContext& recognition_context)
override {}
// media::mojom::AudioSourceFetcher:
void Start(

@ -64,6 +64,9 @@ class SodaSpeechRecognizerImplTest
void OnLanguageChanged(const std::string& language) override {}
void OnMaskOffensiveWordsChanged(bool mask_offensive_words) override {}
void MarkDone() override {}
void UpdateRecognitionContext(
const media::SpeechRecognitionRecognitionContext& recognition_context)
override {}
// media::mojom::SpeechRecognitionSessionClient implementation.
void ResultRetrieved(std::vector<media::mojom::WebSpeechRecognitionResultPtr>

@ -351,11 +351,11 @@ void SpeechRecognitionRecognizerImpl::MarkDone() {
}
void SpeechRecognitionRecognizerImpl::UpdateRecognitionContext(
media::mojom::SpeechRecognitionRecognitionContextPtr recognition_context) {
const media::SpeechRecognitionRecognitionContext& recognition_context) {
soda::chrome::RecognitionContext context;
auto* context_input = context.add_context();
context_input->set_name(kContextInputName);
for (const auto& phrase : recognition_context->phrases) {
for (const auto& phrase : recognition_context.phrases) {
auto* p = context_input->mutable_phrases()->add_phrase();
p->set_phrase(phrase.phrase);
p->set_boost(phrase.boost);

@ -103,7 +103,8 @@ class SpeechRecognitionRecognizerImpl
void MarkDone() override;
void UpdateRecognitionContext(
media::mojom::SpeechRecognitionRecognitionContextPtr recognition_context);
const media::SpeechRecognitionRecognitionContext& recognition_context)
final;
// AudioSourceConsumer:
void AddAudio(media::mojom::AudioDataS16Ptr buffer) override;

@ -96,7 +96,7 @@ TEST_F(SpeechRecognitionRecognizerImplTest, OnLanguagePackInstalledTest) {
TEST_F(SpeechRecognitionRecognizerImplTest,
SpeechRecognitionRecognitionContextTest) {
std::vector<media::SpeechRecognitionPhrase> phrases;
phrases.push_back(media::SpeechRecognitionPhrase("test phrase", 2.0));
phrases.emplace_back("test phrase", 2.0);
auto recognizer = CreateRecognizer(
CreateOptions(media::SpeechRecognitionRecognitionContext(phrases)));
@ -121,11 +121,10 @@ TEST_F(SpeechRecognitionRecognizerImplTest, UpdateRecognitionContextTest) {
auto* soda_client_ptr = soda_client.get();
recognizer->SetSodaClientForTesting(std::move(soda_client));
media::mojom::SpeechRecognitionRecognitionContextPtr context =
media::mojom::SpeechRecognitionRecognitionContext::New();
context->phrases.emplace_back("test phrase", 2.0);
media::SpeechRecognitionRecognitionContext context;
context.phrases.emplace_back("test phrase", 2.0);
EXPECT_CALL(*soda_client_ptr, UpdateRecognitionContext(_));
recognizer->UpdateRecognitionContext(std::move(context));
recognizer->UpdateRecognitionContext(context);
}
} // namespace speech

@ -92,6 +92,11 @@ class MockOnDeviceWebSpeechRecognitionService
(override));
MOCK_METHOD(void, OnLanguageChanged, (const std::string& lang), (override));
MOCK_METHOD(void, OnMaskOffensiveWordsChanged, (bool changed), (override));
MOCK_METHOD(
void,
UpdateRecognitionContext,
(const media::SpeechRecognitionRecognitionContext& recognition_context),
(override));
void MarkDone() override;
// Methods for testing plumbing to SpeechRecognitionRecognizerClient.

@ -88,6 +88,11 @@ interface SpeechRecognitionRecognizer {
// setting has changed.
[MinVersion=2]
OnMaskOffensiveWordsChanged@3(bool mask_offensive_words);
// Notify the speech recognition recognizer to update the recognition context.
[MinVersion=8]
UpdateRecognitionContext@4(
SpeechRecognitionRecognitionContext recognition_context);
};
// The interface used to return speech recognition events from the speech