// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_SPEECH_TTS_CROSAPI_UTIL_H_
#define CHROME_BROWSER_SPEECH_TTS_CROSAPI_UTIL_H_
#include <memory>
#include "chromeos/crosapi/mojom/tts.mojom.h"
#include "content/public/browser/tts_controller.h"
#include "content/public/browser/tts_utterance.h"
namespace tts_crosapi_util {
// Functions for converting Tts data types to/from its corresponding mojo types.
content::TtsEventType FromMojo(crosapi::mojom::TtsEventType mojo_event);
crosapi::mojom::TtsEventType ToMojo(content::TtsEventType event_type);
content::VoiceData FromMojo(const crosapi::mojom::TtsVoicePtr& mojo_voice);
crosapi::mojom::TtsVoicePtr ToMojo(const content::VoiceData& voice);
crosapi::mojom::TtsUtterancePtr ToMojo(content::TtsUtterance* utterance);
// Creates TtsUtterane from the mojo Utterance data.
// |should_always_be_spoken| should be set to true if the TtsUtterance is
// created for a Lacros utterance; otherwise, it should be set to false if the
// TtsUtterance is created for an Ash utterance. This is used by Ash's
// TtsController to differentiate whether an utterances is originated from Ash
// or Lacros.
std::unique_ptr<content::TtsUtterance> CreateUtteranceFromMojo(
crosapi::mojom::TtsUtterancePtr& mojo_utterance,
bool should_always_be_spoken);
bool ShouldEnableLacrosTtsSupport();
// Functions for testing use only.
// This function allows StandaloneBrowserTestController located in
// chrome/browser/lacros to retrieve voice data via
// content::TtsController::GetVoices(), which can not be called directly
// from StandaloneBrowserTestController since chrome/browser/DEPS disallows
// content/public/browser/tts_controller.h explicitly.
void GetAllVoicesForTesting(content::BrowserContext* browser_context,
const GURL& source_url,
std::vector<content::VoiceData>* out_voices);
// This function allows ash browser test to call StandaloneBrowserTestController
// to speak a Lacros utterance, which is a workaround for crbug/1368284.
void SpeakForTesting(std::unique_ptr<content::TtsUtterance> utterance);
// This function allows TestControllerAsh located under chrome/browser/ash to
// retrieve the utterance queue size via content::TtsController::QueueSize(),
// which can not be called directly from TestControllerAsh since
// chrome/browser/DEPS disallows content/public/browser/tts_controller.h
// explicitly.
int GetTtsUtteranceQueueSizeForTesting();
} // namespace tts_crosapi_util
#endif // CHROME_BROWSER_SPEECH_TTS_CROSAPI_UTIL_H_