Commit 8e639a98 authored by Jeroen Dhollander's avatar Jeroen Dhollander Committed by Chromium LUCI CQ

Move |PlatformApi| to Libassistant mojom service

This CL introduces an implementation of
|assistant_client::PlatformApi| in the Libassistant mojom service.
This initial implementation simply forwards all work to the existing
|CrosPlatformApi| (in //chromeos/services/assistant/platform),
but this will allow us to start migrating the individual components one
by one to the Libassistant mojom service.

This CL also changes the |CrosPlatformApi| so it no longer inherits from
|assistant_client::PlatformApi|. This is again done so we can start
removing components one by one away from |CrosPlatformApi|.

Bug: b/171748795
Test: chromeos_unittests with filter "Assistant*:ServiceController*"
Change-Id: I715d25fb13b128d31218ec8a3f727e19feae4bc1
Cq-Include-Trybots: luci.chrome.try:linux-chromeos-chrome
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2596254
Commit-Queue: Jeroen Dhollander <jeroendh@chromium.org>
Reviewed-by: default avatarTao Wu <wutao@chromium.org>
Cr-Commit-Position: refs/heads/master@{#839457}
parent f2657080
...@@ -12,7 +12,7 @@ namespace chromeos { ...@@ -12,7 +12,7 @@ namespace chromeos {
namespace assistant { namespace assistant {
LibassistantServiceHostImpl::LibassistantServiceHostImpl( LibassistantServiceHostImpl::LibassistantServiceHostImpl(
assistant_client::PlatformApi* platform_api, CrosPlatformApi* platform_api,
AssistantManagerServiceDelegate* delegate) AssistantManagerServiceDelegate* delegate)
: platform_api_(platform_api), delegate_(delegate) { : platform_api_(platform_api), delegate_(delegate) {
DCHECK(platform_api_); DCHECK(platform_api_);
......
...@@ -10,10 +10,6 @@ ...@@ -10,10 +10,6 @@
#include "base/synchronization/lock.h" #include "base/synchronization/lock.h"
#include "chromeos/services/assistant/proxy/libassistant_service_host.h" #include "chromeos/services/assistant/proxy/libassistant_service_host.h"
namespace assistant_client {
class PlatformApi;
} // namespace assistant_client
namespace chromeos { namespace chromeos {
namespace libassistant { namespace libassistant {
class LibassistantService; class LibassistantService;
...@@ -24,6 +20,7 @@ namespace chromeos { ...@@ -24,6 +20,7 @@ namespace chromeos {
namespace assistant { namespace assistant {
class AssistantManagerServiceDelegate; class AssistantManagerServiceDelegate;
class CrosPlatformApi;
class LibassistantServiceHostImpl : public LibassistantServiceHost { class LibassistantServiceHostImpl : public LibassistantServiceHost {
public: public:
...@@ -31,7 +28,7 @@ class LibassistantServiceHostImpl : public LibassistantServiceHost { ...@@ -31,7 +28,7 @@ class LibassistantServiceHostImpl : public LibassistantServiceHost {
base::OnceCallback<void(assistant_client::AssistantManager*, base::OnceCallback<void(assistant_client::AssistantManager*,
assistant_client::AssistantManagerInternal*)>; assistant_client::AssistantManagerInternal*)>;
LibassistantServiceHostImpl(assistant_client::PlatformApi* platform_api, LibassistantServiceHostImpl(CrosPlatformApi* platform_api,
AssistantManagerServiceDelegate* delegate); AssistantManagerServiceDelegate* delegate);
LibassistantServiceHostImpl(LibassistantServiceHostImpl&) = delete; LibassistantServiceHostImpl(LibassistantServiceHostImpl&) = delete;
LibassistantServiceHostImpl& operator=(LibassistantServiceHostImpl&) = delete; LibassistantServiceHostImpl& operator=(LibassistantServiceHostImpl&) = delete;
...@@ -45,7 +42,7 @@ class LibassistantServiceHostImpl : public LibassistantServiceHost { ...@@ -45,7 +42,7 @@ class LibassistantServiceHostImpl : public LibassistantServiceHost {
private: private:
// Owned by |AssistantManagerServiceImpl| which also owns |this|. // Owned by |AssistantManagerServiceImpl| which also owns |this|.
assistant_client::PlatformApi* const platform_api_; CrosPlatformApi* const platform_api_;
// Owned by |AssistantManagerServiceImpl| which also owns |this|. // Owned by |AssistantManagerServiceImpl| which also owns |this|.
AssistantManagerServiceDelegate* const delegate_; AssistantManagerServiceDelegate* const delegate_;
......
...@@ -6,17 +6,28 @@ ...@@ -6,17 +6,28 @@
#define CHROMEOS_SERVICES_ASSISTANT_PUBLIC_CPP_MIGRATION_CROS_PLATFORM_API_H_ #define CHROMEOS_SERVICES_ASSISTANT_PUBLIC_CPP_MIGRATION_CROS_PLATFORM_API_H_
#include "base/macros.h" #include "base/macros.h"
#include "libassistant/shared/public/platform_api.h"
namespace assistant_client {
class AudioInputProvider;
class AudioOutputProvider;
class AuthProvider;
class FileProvider;
class NetworkProvider;
class SystemProvider;
} // namespace assistant_client
namespace chromeos { namespace chromeos {
namespace assistant { namespace assistant {
// Platform API required by the voice assistant, extended with some methods used // Platform API required by the voice assistant, extended with some methods used
// when ChromeOS needs to make changes to the platform state. // when ChromeOS needs to make changes to the platform state.
class CrosPlatformApi : public assistant_client::PlatformApi { // Note that this no longer inherits from |assistant_client::PlatformApi|,
// because we are in the process of migrating its functionality from here to the
// Libassistant mojom service.
class CrosPlatformApi {
public: public:
CrosPlatformApi() = default; CrosPlatformApi() = default;
~CrosPlatformApi() override = default; virtual ~CrosPlatformApi() = default;
// Called when the mic state associated with the interaction is changed. // Called when the mic state associated with the interaction is changed.
virtual void SetMicState(bool mic_open) = 0; virtual void SetMicState(bool mic_open) = 0;
...@@ -27,6 +38,24 @@ class CrosPlatformApi : public assistant_client::PlatformApi { ...@@ -27,6 +38,24 @@ class CrosPlatformApi : public assistant_client::PlatformApi {
// Called when hotword enabled status changed. // Called when hotword enabled status changed.
virtual void OnHotwordEnabled(bool enable) = 0; virtual void OnHotwordEnabled(bool enable) = 0;
// Returns the platform's audio input provider.
virtual assistant_client::AudioInputProvider& GetAudioInputProvider() = 0;
// Returns the platform's audio output provider.
virtual assistant_client::AudioOutputProvider& GetAudioOutputProvider() = 0;
// Returns the platform's authentication provider.
virtual assistant_client::AuthProvider& GetAuthProvider() = 0;
// Returns the file provider to be used by libassistant.
virtual assistant_client::FileProvider& GetFileProvider() = 0;
// Returns the network provider to be used by libassistant.
virtual assistant_client::NetworkProvider& GetNetworkProvider() = 0;
// Returns the system provider to be used by libassistant.
virtual assistant_client::SystemProvider& GetSystemProvider() = 0;
private: private:
DISALLOW_COPY_AND_ASSIGN(CrosPlatformApi); DISALLOW_COPY_AND_ASSIGN(CrosPlatformApi);
}; };
......
...@@ -16,6 +16,7 @@ component("libassistant") { ...@@ -16,6 +16,7 @@ component("libassistant") {
deps = [ deps = [
":internal", ":internal",
"//chromeos/services/assistant/public/cpp/migration",
"//chromeos/services/libassistant/public/mojom", "//chromeos/services/libassistant/public/mojom",
] ]
...@@ -32,6 +33,8 @@ source_set("internal") { ...@@ -32,6 +33,8 @@ source_set("internal") {
sources = [ sources = [
"assistant_manager_observer.h", "assistant_manager_observer.h",
"platform_api.cc",
"platform_api.h",
"service_controller.cc", "service_controller.cc",
"service_controller.h", "service_controller.h",
] ]
......
...@@ -9,6 +9,8 @@ ...@@ -9,6 +9,8 @@
#include "base/check.h" #include "base/check.h"
#include "base/logging.h" #include "base/logging.h"
#include "chromeos/services/assistant/public/cpp/migration/cros_platform_api.h"
#include "chromeos/services/libassistant/platform_api.h"
#include "chromeos/services/libassistant/service_controller.h" #include "chromeos/services/libassistant/service_controller.h"
namespace chromeos { namespace chromeos {
...@@ -16,11 +18,19 @@ namespace libassistant { ...@@ -16,11 +18,19 @@ namespace libassistant {
LibassistantService::LibassistantService( LibassistantService::LibassistantService(
mojo::PendingReceiver<mojom::LibassistantService> receiver, mojo::PendingReceiver<mojom::LibassistantService> receiver,
assistant_client::PlatformApi* platform_api, chromeos::assistant::CrosPlatformApi* platform_api,
assistant::AssistantManagerServiceDelegate* delegate) assistant::AssistantManagerServiceDelegate* delegate)
: receiver_(this, std::move(receiver)), : receiver_(this, std::move(receiver)),
platform_api_(std::make_unique<PlatformApi>()),
service_controller_( service_controller_(
std::make_unique<ServiceController>(delegate, platform_api)) {} std::make_unique<ServiceController>(delegate, platform_api_.get())) {
platform_api_->SetAudioInputProvider(&platform_api->GetAudioInputProvider())
.SetAudioOutputProvider(&platform_api->GetAudioOutputProvider())
.SetAuthProvider(&platform_api->GetAuthProvider())
.SetFileProvider(&platform_api->GetFileProvider())
.SetNetworkProvider(&platform_api->GetNetworkProvider())
.SetSystemProvider(&platform_api->GetSystemProvider());
}
LibassistantService::~LibassistantService() = default; LibassistantService::~LibassistantService() = default;
......
...@@ -14,18 +14,19 @@ ...@@ -14,18 +14,19 @@
namespace assistant_client { namespace assistant_client {
class AssistantManager; class AssistantManager;
class AssistantManagerInternal; class AssistantManagerInternal;
class PlatformApi;
} // namespace assistant_client } // namespace assistant_client
namespace chromeos { namespace chromeos {
namespace assistant { namespace assistant {
class AssistantManagerServiceDelegate; class AssistantManagerServiceDelegate;
class CrosPlatformApi;
} // namespace assistant } // namespace assistant
} // namespace chromeos } // namespace chromeos
namespace chromeos { namespace chromeos {
namespace libassistant { namespace libassistant {
class PlatformApi;
class ServiceController; class ServiceController;
class COMPONENT_EXPORT(LIBASSISTANT_SERVICE) LibassistantService class COMPONENT_EXPORT(LIBASSISTANT_SERVICE) LibassistantService
...@@ -37,7 +38,7 @@ class COMPONENT_EXPORT(LIBASSISTANT_SERVICE) LibassistantService ...@@ -37,7 +38,7 @@ class COMPONENT_EXPORT(LIBASSISTANT_SERVICE) LibassistantService
explicit LibassistantService( explicit LibassistantService(
mojo::PendingReceiver<mojom::LibassistantService> receiver, mojo::PendingReceiver<mojom::LibassistantService> receiver,
assistant_client::PlatformApi* platform_api, chromeos::assistant::CrosPlatformApi* platform_api,
assistant::AssistantManagerServiceDelegate* delegate); assistant::AssistantManagerServiceDelegate* delegate);
LibassistantService(LibassistantService&) = delete; LibassistantService(LibassistantService&) = delete;
LibassistantService& operator=(LibassistantService&) = delete; LibassistantService& operator=(LibassistantService&) = delete;
...@@ -56,6 +57,7 @@ class COMPONENT_EXPORT(LIBASSISTANT_SERVICE) LibassistantService ...@@ -56,6 +57,7 @@ class COMPONENT_EXPORT(LIBASSISTANT_SERVICE) LibassistantService
void BindInteractionController() override {} void BindInteractionController() override {}
mojo::Receiver<mojom::LibassistantService> receiver_; mojo::Receiver<mojom::LibassistantService> receiver_;
std::unique_ptr<PlatformApi> platform_api_;
std::unique_ptr<ServiceController> service_controller_; std::unique_ptr<ServiceController> service_controller_;
}; };
......
// Copyright 2020 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 "chromeos/services/libassistant/platform_api.h"
#include "base/check.h"
namespace chromeos {
namespace libassistant {
PlatformApi& PlatformApi::SetAudioInputProvider(
assistant_client::AudioInputProvider* provider) {
audio_input_provider_ = provider;
return *this;
}
PlatformApi& PlatformApi::SetAudioOutputProvider(
assistant_client::AudioOutputProvider* provider) {
audio_output_provider_ = provider;
return *this;
}
PlatformApi& PlatformApi::SetAuthProvider(
assistant_client::AuthProvider* provider) {
auth_provider_ = provider;
return *this;
}
PlatformApi& PlatformApi::SetFileProvider(
assistant_client::FileProvider* provider) {
file_provider_ = provider;
return *this;
}
PlatformApi& PlatformApi::SetNetworkProvider(
assistant_client::NetworkProvider* provider) {
network_provider_ = provider;
return *this;
}
PlatformApi& PlatformApi::SetSystemProvider(
assistant_client::SystemProvider* provider) {
system_provider_ = provider;
return *this;
}
assistant_client::AudioInputProvider& PlatformApi::GetAudioInputProvider() {
DCHECK(audio_input_provider_);
return *audio_input_provider_;
}
assistant_client::AudioOutputProvider& PlatformApi::GetAudioOutputProvider() {
DCHECK(audio_output_provider_);
return *audio_output_provider_;
}
assistant_client::AuthProvider& PlatformApi::GetAuthProvider() {
DCHECK(auth_provider_);
return *auth_provider_;
}
assistant_client::FileProvider& PlatformApi::GetFileProvider() {
DCHECK(file_provider_);
return *file_provider_;
}
assistant_client::NetworkProvider& PlatformApi::GetNetworkProvider() {
DCHECK(network_provider_);
return *network_provider_;
}
assistant_client::SystemProvider& PlatformApi::GetSystemProvider() {
DCHECK(system_provider_);
return *system_provider_;
}
} // namespace libassistant
} // namespace chromeos
// Copyright 2020 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.
#ifndef CHROMEOS_SERVICES_LIBASSISTANT_PLATFORM_API_H_
#define CHROMEOS_SERVICES_LIBASSISTANT_PLATFORM_API_H_
#include "libassistant/shared/public/platform_api.h"
namespace chromeos {
namespace libassistant {
// Implementation of the Libassistant PlatformApi.
// The components that haven't been migrated to this mojom service will still be
// implemented chromeos/service/assistant/platform (and simply be exposed here).
class PlatformApi : public assistant_client::PlatformApi {
public:
PlatformApi() = default;
PlatformApi(const PlatformApi&) = delete;
PlatformApi& operator=(const PlatformApi&) = delete;
~PlatformApi() override = default;
PlatformApi& SetAudioInputProvider(assistant_client::AudioInputProvider*);
PlatformApi& SetAudioOutputProvider(assistant_client::AudioOutputProvider*);
PlatformApi& SetAuthProvider(assistant_client::AuthProvider*);
PlatformApi& SetFileProvider(assistant_client::FileProvider*);
PlatformApi& SetNetworkProvider(assistant_client::NetworkProvider*);
PlatformApi& SetSystemProvider(assistant_client::SystemProvider*);
// assistant_client::PlatformApi implementation:
assistant_client::AudioInputProvider& GetAudioInputProvider() override;
assistant_client::AudioOutputProvider& GetAudioOutputProvider() override;
assistant_client::AuthProvider& GetAuthProvider() override;
assistant_client::FileProvider& GetFileProvider() override;
assistant_client::NetworkProvider& GetNetworkProvider() override;
assistant_client::SystemProvider& GetSystemProvider() override;
private:
// The below are all owned by the browser side |PlatformApiImpl|,
// which outlives us.
assistant_client::AudioInputProvider* audio_input_provider_ = nullptr;
assistant_client::AudioOutputProvider* audio_output_provider_ = nullptr;
assistant_client::AuthProvider* auth_provider_ = nullptr;
assistant_client::FileProvider* file_provider_ = nullptr;
assistant_client::NetworkProvider* network_provider_ = nullptr;
assistant_client::SystemProvider* system_provider_ = nullptr;
};
} // namespace libassistant
} // namespace chromeos
#endif // CHROMEOS_SERVICES_LIBASSISTANT_PLATFORM_API_H_
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