blob: 415565d41b84f01d66545cf9e757df2af331fc2a [file] [log] [blame]
// Copyright 2021 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.
#include "chrome/browser/speech/tts_crosapi_util.h"
#include "base/feature_list.h"
#include "build/chromeos_buildflags.h"
#if BUILDFLAG(IS_CHROMEOS_ASH)
#include "ash/constants/ash_features.h"
#include "chrome/browser/ash/crosapi/browser_util.h"
#endif // BUILDFLAG(IS_CHROMEOS_ASH)
#if BUILDFLAG(IS_CHROMEOS_LACROS)
#include "chromeos/startup/browser_params_proxy.h"
#endif // BUILDFLAG(IS_CHROMEOS_LACROS)
namespace tts_crosapi_util {
content::TtsEventType FromMojo(crosapi::mojom::TtsEventType mojo_event) {
switch (mojo_event) {
case crosapi::mojom::TtsEventType::kStart:
return content::TtsEventType::TTS_EVENT_START;
case crosapi::mojom::TtsEventType::kEnd:
return content::TtsEventType::TTS_EVENT_END;
case crosapi::mojom::TtsEventType::kWord:
return content::TtsEventType::TTS_EVENT_WORD;
case crosapi::mojom::TtsEventType::kSentence:
return content::TtsEventType::TTS_EVENT_SENTENCE;
case crosapi::mojom::TtsEventType::kMarker:
return content::TtsEventType::TTS_EVENT_MARKER;
case crosapi::mojom::TtsEventType::kInterrupted:
return content::TtsEventType::TTS_EVENT_INTERRUPTED;
case crosapi::mojom::TtsEventType::kCanceled:
return content::TtsEventType::TTS_EVENT_CANCELLED;
case crosapi::mojom::TtsEventType::kError:
return content::TtsEventType::TTS_EVENT_ERROR;
case crosapi::mojom::TtsEventType::kPause:
return content::TtsEventType::TTS_EVENT_PAUSE;
case crosapi::mojom::TtsEventType::kResume:
return content::TtsEventType::TTS_EVENT_RESUME;
}
}
crosapi::mojom::TtsEventType ToMojo(content::TtsEventType event_type) {
switch (event_type) {
case content::TtsEventType::TTS_EVENT_START:
return crosapi::mojom::TtsEventType::kStart;
case content::TtsEventType::TTS_EVENT_END:
return crosapi::mojom::TtsEventType::kEnd;
case content::TtsEventType::TTS_EVENT_WORD:
return crosapi::mojom::TtsEventType::kWord;
case content::TtsEventType::TTS_EVENT_SENTENCE:
return crosapi::mojom::TtsEventType::kSentence;
case content::TtsEventType::TTS_EVENT_MARKER:
return crosapi::mojom::TtsEventType::kMarker;
case content::TtsEventType::TTS_EVENT_INTERRUPTED:
return crosapi::mojom::TtsEventType::kInterrupted;
case content::TtsEventType::TTS_EVENT_CANCELLED:
return crosapi::mojom::TtsEventType::kCanceled;
case content::TtsEventType::TTS_EVENT_ERROR:
return crosapi::mojom::TtsEventType::kError;
case content::TtsEventType::TTS_EVENT_PAUSE:
return crosapi::mojom::TtsEventType::kPause;
case content::TtsEventType::TTS_EVENT_RESUME:
return crosapi::mojom::TtsEventType::kResume;
}
}
content::VoiceData FromMojo(const crosapi::mojom::TtsVoicePtr& mojo_voice) {
content::VoiceData voice_data;
#if BUILDFLAG(IS_CHROMEOS_ASH)
voice_data.from_crosapi = true;
#endif
voice_data.name = mojo_voice->voice_name;
voice_data.lang = mojo_voice->lang;
voice_data.engine_id = mojo_voice->engine_id;
voice_data.remote = mojo_voice->remote;
voice_data.native = mojo_voice->native;
voice_data.native_voice_identifier = mojo_voice->native_voice_identifier;
for (const auto& mojo_event : mojo_voice->events)
voice_data.events.insert(tts_crosapi_util::FromMojo(mojo_event));
return voice_data;
}
crosapi::mojom::TtsVoicePtr ToMojo(const content::VoiceData& voice) {
auto mojo_voice = crosapi::mojom::TtsVoice::New();
mojo_voice->voice_name = voice.name;
mojo_voice->lang = voice.lang;
mojo_voice->remote = voice.remote;
mojo_voice->engine_id = voice.engine_id;
mojo_voice->native = voice.native;
mojo_voice->native_voice_identifier = voice.native_voice_identifier;
std::vector<crosapi::mojom::TtsEventType> mojo_events;
for (const auto& event : voice.events) {
mojo_events.push_back(tts_crosapi_util::ToMojo(event));
}
mojo_voice->events = std::move(mojo_events);
return mojo_voice;
}
bool ShouldEnableLacrosTtsSupport() {
#if BUILDFLAG(IS_CHROMEOS_ASH)
bool lacros_tts_support_enabled =
crosapi::browser_util::IsLacrosPrimaryBrowser() &&
!base::FeatureList::IsEnabled(ash::features::kDisableLacrosTtsSupport);
return lacros_tts_support_enabled;
#else // IS_CHROMEOS_LACROS
return chromeos::BrowserParamsProxy::Get()->EnableLacrosTtsSupport();
#endif
}
} // namespace tts_crosapi_util