Commit b60e5ef2 authored by Hidehiko Abe's avatar Hidehiko Abe Committed by Commit Bot

Migrate ArcService to BrowserContextKeyedService part 22.

This CL migrates ArcTtsService.

BUG=672829
TEST=Ran try.

Change-Id: Ia635f234c7bd03ce19a2ffd2f78bc20bbe9ecc19
Reviewed-on: https://chromium-review.googlesource.com/572473
Commit-Queue: Hidehiko Abe <hidehiko@chromium.org>
Reviewed-by: default avatarLuis Hector Chavez <lhchavez@chromium.org>
Cr-Commit-Position: refs/heads/master@{#487224}
parent 619a89be
...@@ -98,8 +98,6 @@ void ArcServiceLauncher::Initialize() { ...@@ -98,8 +98,6 @@ void ArcServiceLauncher::Initialize() {
base::MakeUnique<ArcIntentHelperBridge>(arc_bridge_service)); base::MakeUnique<ArcIntentHelperBridge>(arc_bridge_service));
arc_service_manager_->AddService( arc_service_manager_->AddService(
base::MakeUnique<ArcSettingsService>(arc_bridge_service)); base::MakeUnique<ArcSettingsService>(arc_bridge_service));
arc_service_manager_->AddService(
base::MakeUnique<ArcTtsService>(arc_bridge_service));
arc_service_manager_->AddService( arc_service_manager_->AddService(
base::MakeUnique<ArcUserSessionService>(arc_bridge_service)); base::MakeUnique<ArcUserSessionService>(arc_bridge_service));
if (chromeos::switches::IsVoiceInteractionEnabled()) { if (chromeos::switches::IsVoiceInteractionEnabled()) {
...@@ -182,6 +180,7 @@ void ArcServiceLauncher::OnPrimaryUserProfilePrepared(Profile* profile) { ...@@ -182,6 +180,7 @@ void ArcServiceLauncher::OnPrimaryUserProfilePrepared(Profile* profile) {
ArcProcessService::GetForBrowserContext(profile); ArcProcessService::GetForBrowserContext(profile);
ArcProvisionNotificationService::GetForBrowserContext(profile); ArcProvisionNotificationService::GetForBrowserContext(profile);
ArcTracingBridge::GetForBrowserContext(profile); ArcTracingBridge::GetForBrowserContext(profile);
ArcTtsService::GetForBrowserContext(profile);
arc_service_manager_->AddService(base::MakeUnique<ArcBootPhaseMonitorBridge>( arc_service_manager_->AddService(base::MakeUnique<ArcBootPhaseMonitorBridge>(
arc_service_manager_->arc_bridge_service(), arc_service_manager_->arc_bridge_service(),
......
...@@ -4,24 +4,62 @@ ...@@ -4,24 +4,62 @@
#include "chrome/browser/chromeos/arc/tts/arc_tts_service.h" #include "chrome/browser/chromeos/arc/tts/arc_tts_service.h"
#include <utility>
#include "base/logging.h" #include "base/logging.h"
#include "base/memory/singleton.h"
#include "chrome/browser/speech/tts_controller.h" #include "chrome/browser/speech/tts_controller.h"
#include "components/arc/arc_bridge_service.h" #include "components/arc/arc_bridge_service.h"
#include "components/arc/arc_browser_context_keyed_service_factory_base.h"
namespace arc { namespace arc {
namespace {
// Singleton factory for ArcTtsService.
class ArcTtsServiceFactory
: public internal::ArcBrowserContextKeyedServiceFactoryBase<
ArcTtsService,
ArcTtsServiceFactory> {
public:
// Factory name used by ArcBrowserContextKeyedServiceFactoryBase.
static constexpr const char* kName = "ArcTtsServiceFactory";
static ArcTtsServiceFactory* GetInstance() {
return base::Singleton<ArcTtsServiceFactory>::get();
}
private:
friend base::DefaultSingletonTraits<ArcTtsServiceFactory>;
ArcTtsServiceFactory() = default;
~ArcTtsServiceFactory() override = default;
};
} // namespace
// static
ArcTtsService* ArcTtsService::GetForBrowserContext(
content::BrowserContext* context) {
return ArcTtsServiceFactory::GetForBrowserContext(context);
}
ArcTtsService::ArcTtsService(ArcBridgeService* bridge_service) ArcTtsService::ArcTtsService(content::BrowserContext* context,
: ArcService(bridge_service), binding_(this) { ArcBridgeService* bridge_service)
arc_bridge_service()->tts()->AddObserver(this); : arc_bridge_service_(bridge_service), binding_(this) {
arc_bridge_service_->tts()->AddObserver(this);
} }
ArcTtsService::~ArcTtsService() { ArcTtsService::~ArcTtsService() {
arc_bridge_service()->tts()->RemoveObserver(this); // TODO(hidehiko): Currently, the lifetime of ArcBridgeService and
// BrowserContextKeyedService is not nested.
// If ArcServiceManager::Get() returns nullptr, it is already destructed,
// so do not touch it.
if (ArcServiceManager::Get())
arc_bridge_service_->tts()->RemoveObserver(this);
} }
void ArcTtsService::OnInstanceReady() { void ArcTtsService::OnInstanceReady() {
mojom::TtsInstance* tts_instance = mojom::TtsInstance* tts_instance =
ARC_GET_INSTANCE_FOR_METHOD(arc_bridge_service()->tts(), Init); ARC_GET_INSTANCE_FOR_METHOD(arc_bridge_service_->tts(), Init);
DCHECK(tts_instance); DCHECK(tts_instance);
mojom::TtsHostPtr host_proxy; mojom::TtsHostPtr host_proxy;
binding_.Bind(mojo::MakeRequest(&host_proxy)); binding_.Bind(mojo::MakeRequest(&host_proxy));
......
...@@ -8,22 +8,31 @@ ...@@ -8,22 +8,31 @@
#include <string> #include <string>
#include "base/macros.h" #include "base/macros.h"
#include "components/arc/arc_service.h"
#include "components/arc/common/tts.mojom.h" #include "components/arc/common/tts.mojom.h"
#include "components/arc/instance_holder.h" #include "components/arc/instance_holder.h"
#include "components/keyed_service/core/keyed_service.h"
#include "mojo/public/cpp/bindings/binding.h" #include "mojo/public/cpp/bindings/binding.h"
namespace content {
class BrowserContext;
} // namespace content
namespace arc { namespace arc {
class ArcBridgeService; class ArcBridgeService;
// Provides text to speech services and events to Chrome OS via Android's text // Provides text to speech services and events to Chrome OS via Android's text
// to speech API. // to speech API.
class ArcTtsService : public ArcService, class ArcTtsService : public KeyedService,
public InstanceHolder<mojom::TtsInstance>::Observer, public InstanceHolder<mojom::TtsInstance>::Observer,
public mojom::TtsHost { public mojom::TtsHost {
public: public:
explicit ArcTtsService(ArcBridgeService* bridge_service); // Returns singleton instance for the given BrowserContext,
// or nullptr if the browser |context| is not allowed to use ARC.
static ArcTtsService* GetForBrowserContext(content::BrowserContext* context);
ArcTtsService(content::BrowserContext* context,
ArcBridgeService* bridge_service);
~ArcTtsService() override; ~ArcTtsService() override;
// InstanceHolder<mojom::TtsInstance>::Observer overrides: // InstanceHolder<mojom::TtsInstance>::Observer overrides:
...@@ -36,6 +45,8 @@ class ArcTtsService : public ArcService, ...@@ -36,6 +45,8 @@ class ArcTtsService : public ArcService,
const std::string& error_msg) override; const std::string& error_msg) override;
private: private:
ArcBridgeService* const arc_bridge_service_; // Owned by ArcServiceManager.
mojo::Binding<mojom::TtsHost> binding_; mojo::Binding<mojom::TtsHost> binding_;
DISALLOW_COPY_AND_ASSIGN(ArcTtsService); DISALLOW_COPY_AND_ASSIGN(ArcTtsService);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment