Commit e1806958 authored by Miyoung Shin's avatar Miyoung Shin Committed by Commit Bot

Convert CameraHalClient to new Mojo types

This CL converts CameraHalClient{Ptr, Request} in media and
components to the new Mojo type, and uses
pending_remote<CameraHalClient> in cros_camera_service.mojom and
camera.mojom.

Bug: 955171
Change-Id: I33fc6c386f1fe8dc205a8ea76d5afc0782c7996b
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1862924
Commit-Queue: Miyoung Shin <myid.shin@igalia.com>
Reviewed-by: default avatarSam McNally <sammc@chromium.org>
Reviewed-by: default avatarKen Rockot <rockot@google.com>
Reviewed-by: default avatarRicky Liang <jcliang@chromium.org>
Cr-Commit-Position: refs/heads/master@{#707285}
parent 27b72502
......@@ -135,7 +135,7 @@ void ArcCameraBridge::StartCameraService(StartCameraServiceCallback callback) {
}
void ArcCameraBridge::RegisterCameraHalClient(
cros::mojom::CameraHalClientPtr client) {
mojo::PendingRemote<cros::mojom::CameraHalClient> client) {
media::CameraHalDispatcherImpl::GetInstance()->RegisterClient(
std::move(client));
}
......
......@@ -11,6 +11,7 @@
#include "base/macros.h"
#include "components/arc/mojom/camera.mojom.h"
#include "components/keyed_service/core/keyed_service.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
namespace content {
class BrowserContext;
......@@ -34,7 +35,8 @@ class ArcCameraBridge : public KeyedService, public mojom::CameraHost {
// mojom::CameraHost overrides:
void StartCameraService(StartCameraServiceCallback callback) override;
void RegisterCameraHalClient(cros::mojom::CameraHalClientPtr client) override;
void RegisterCameraHalClient(
mojo::PendingRemote<cros::mojom::CameraHalClient> client) override;
private:
class PendingStartCameraServiceResult;
......
......@@ -99,7 +99,8 @@ interface CameraHost {
StartCameraService@0() => (CameraService service);
// Registers the camera HAL client. Used by camera HAL v3.
[MinVersion=2] RegisterCameraHalClient@1(cros.mojom.CameraHalClient client);
[MinVersion=2] RegisterCameraHalClient@1(
pending_remote<cros.mojom.CameraHalClient> client);
};
// Next method ID: 1
......
......@@ -66,17 +66,18 @@ bool WaitForSocketReadable(int raw_socket_fd, int raw_cancel_fd) {
class MojoCameraClientObserver : public CameraClientObserver {
public:
explicit MojoCameraClientObserver(cros::mojom::CameraHalClientPtr client)
explicit MojoCameraClientObserver(
mojo::PendingRemote<cros::mojom::CameraHalClient> client)
: client_(std::move(client)) {}
void OnChannelCreated(cros::mojom::CameraModulePtr camera_module) override {
client_->SetUpChannel(std::move(camera_module));
}
cros::mojom::CameraHalClientPtr& client() { return client_; }
mojo::Remote<cros::mojom::CameraHalClient>& client() { return client_; }
private:
cros::mojom::CameraHalClientPtr client_;
mojo::Remote<cros::mojom::CameraHalClient> client_;
DISALLOW_IMPLICIT_CONSTRUCTORS(MojoCameraClientObserver);
};
......@@ -185,14 +186,14 @@ void CameraHalDispatcherImpl::RegisterServer(
}
void CameraHalDispatcherImpl::RegisterClient(
cros::mojom::CameraHalClientPtr client) {
mojo::PendingRemote<cros::mojom::CameraHalClient> client) {
// RegisterClient can be called locally by ArcCameraBridge. Unretained
// reference is safe here because CameraHalDispatcherImpl owns
// |proxy_thread_|.
proxy_task_runner_->PostTask(
FROM_HERE,
base::BindOnce(&CameraHalDispatcherImpl::RegisterClientOnProxyThread,
base::Unretained(this), client.PassInterface()));
base::Unretained(this), std::move(client)));
}
void CameraHalDispatcherImpl::GetJpegDecodeAccelerator(
......@@ -333,12 +334,11 @@ void CameraHalDispatcherImpl::StartServiceLoop(base::ScopedFD socket_fd,
}
void CameraHalDispatcherImpl::RegisterClientOnProxyThread(
mojo::InterfacePtrInfo<cros::mojom::CameraHalClient> client_ptr_info) {
mojo::PendingRemote<cros::mojom::CameraHalClient> client) {
DCHECK(proxy_task_runner_->BelongsToCurrentThread());
cros::mojom::CameraHalClientPtr client_ptr(std::move(client_ptr_info));
auto client_observer =
std::make_unique<MojoCameraClientObserver>(std::move(client_ptr));
client_observer->client().set_connection_error_handler(base::BindOnce(
std::make_unique<MojoCameraClientObserver>(std::move(client));
client_observer->client().set_disconnect_handler(base::BindOnce(
&CameraHalDispatcherImpl::OnCameraHalClientConnectionError,
base::Unretained(this), base::Unretained(client_observer.get())));
AddClientObserver(std::move(client_observer));
......
......@@ -68,7 +68,8 @@ class CAPTURE_EXPORT CameraHalDispatcherImpl final
// CameraHalDispatcher implementations.
void RegisterServer(
mojo::PendingRemote<cros::mojom::CameraHalServer> server) final;
void RegisterClient(cros::mojom::CameraHalClientPtr client) final;
void RegisterClient(
mojo::PendingRemote<cros::mojom::CameraHalClient> client) final;
void GetJpegDecodeAccelerator(
mojo::PendingReceiver<chromeos_camera::mojom::MjpegDecodeAccelerator>
jda_receiver) final;
......@@ -99,7 +100,7 @@ class CAPTURE_EXPORT CameraHalDispatcherImpl final
void StartServiceLoop(base::ScopedFD socket_fd, base::WaitableEvent* started);
void RegisterClientOnProxyThread(
mojo::InterfacePtrInfo<cros::mojom::CameraHalClient> client_ptr_info);
mojo::PendingRemote<cros::mojom::CameraHalClient> client);
void AddClientObserverOnProxyThread(
std::unique_ptr<CameraClientObserver> observer);
......
......@@ -15,7 +15,6 @@
#include "media/capture/video/chromeos/mojom/cros_camera_service.mojom.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "mojo/public/cpp/bindings/receiver.h"
#include "mojo/public/cpp/bindings/strong_binding.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
......@@ -51,7 +50,7 @@ class MockCameraHalServer : public cros::mojom::CameraHalServer {
class MockCameraHalClient : public cros::mojom::CameraHalClient {
public:
MockCameraHalClient() : binding_(this) {}
MockCameraHalClient() = default;
~MockCameraHalClient() = default;
......@@ -61,16 +60,12 @@ class MockCameraHalClient : public cros::mojom::CameraHalClient {
MOCK_METHOD1(DoSetUpChannel,
void(cros::mojom::CameraModulePtr& camera_module_ptr));
cros::mojom::CameraHalClientPtrInfo GetInterfacePtrInfo() {
cros::mojom::CameraHalClientPtrInfo camera_hal_client_ptr_info;
cros::mojom::CameraHalClientRequest camera_hal_client_request =
mojo::MakeRequest(&camera_hal_client_ptr_info);
binding_.Bind(std::move(camera_hal_client_request));
return camera_hal_client_ptr_info;
mojo::PendingRemote<cros::mojom::CameraHalClient> GetPendingRemote() {
return receiver_.BindNewPipeAndPassRemote();
}
private:
mojo::Binding<cros::mojom::CameraHalClient> binding_;
mojo::Receiver<cros::mojom::CameraHalClient> receiver_{this};
DISALLOW_COPY_AND_ASSIGN(MockCameraHalClient);
};
......@@ -110,9 +105,10 @@ class CameraHalDispatcherImplTest : public ::testing::Test {
dispatcher->RegisterServer(std::move(server));
}
static void RegisterClient(CameraHalDispatcherImpl* dispatcher,
cros::mojom::CameraHalClientPtrInfo client) {
dispatcher->RegisterClient(mojo::MakeProxy(std::move(client)));
static void RegisterClient(
CameraHalDispatcherImpl* dispatcher,
mojo::PendingRemote<cros::mojom::CameraHalClient> client) {
dispatcher->RegisterClient(std::move(client));
}
protected:
......@@ -145,11 +141,11 @@ TEST_F(CameraHalDispatcherImplTest, ServerConnectionError) {
FROM_HERE,
base::BindOnce(&CameraHalDispatcherImplTest::RegisterServer,
base::Unretained(dispatcher_), std::move(server)));
auto client_ptr = mock_client->GetInterfacePtrInfo();
auto client = mock_client->GetPendingRemote();
GetProxyTaskRunner()->PostTask(
FROM_HERE,
base::BindOnce(&CameraHalDispatcherImplTest::RegisterClient,
base::Unretained(dispatcher_), base::Passed(&client_ptr)));
base::Unretained(dispatcher_), std::move(client)));
// Wait until the client gets the established Mojo channel.
DoLoop();
......@@ -194,11 +190,11 @@ TEST_F(CameraHalDispatcherImplTest, ClientConnectionError) {
FROM_HERE,
base::BindOnce(&CameraHalDispatcherImplTest::RegisterServer,
base::Unretained(dispatcher_), std::move(server)));
auto client_ptr = mock_client->GetInterfacePtrInfo();
auto client = mock_client->GetPendingRemote();
GetProxyTaskRunner()->PostTask(
FROM_HERE,
base::BindOnce(&CameraHalDispatcherImplTest::RegisterClient,
base::Unretained(dispatcher_), base::Passed(&client_ptr)));
base::Unretained(dispatcher_), std::move(client)));
// Wait until the client gets the established Mojo channel.
DoLoop();
......@@ -214,11 +210,11 @@ TEST_F(CameraHalDispatcherImplTest, ClientConnectionError) {
.WillOnce(
InvokeWithoutArgs(this, &CameraHalDispatcherImplTest::QuitRunLoop));
client_ptr = mock_client->GetInterfacePtrInfo();
client = mock_client->GetPendingRemote();
GetProxyTaskRunner()->PostTask(
FROM_HERE,
base::BindOnce(&CameraHalDispatcherImplTest::RegisterClient,
base::Unretained(dispatcher_), base::Passed(&client_ptr)));
base::Unretained(dispatcher_), std::move(client)));
// Wait until the clients gets the newly established Mojo channel.
DoLoop();
......
......@@ -25,7 +25,7 @@ interface CameraHalDispatcher {
// A CameraHalClient calls RegisterClient to register itself with the
// dispatcher.
RegisterClient@1(CameraHalClient client);
RegisterClient@1(pending_remote<CameraHalClient> client);
// Get JpegDecodeAccelerator from dispatcher.
[MinVersion=1] GetJpegDecodeAccelerator@2(
......
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