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

Convert CameraHalServer to new Mojo types

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

Bug: 955171
Change-Id: Ice2749a91a90e6e0da0c8211209aa7f3e0a72db0
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1863022
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@{#707279}
parent 6d40186a
...@@ -164,17 +164,17 @@ CameraHalDispatcherImpl::~CameraHalDispatcherImpl() { ...@@ -164,17 +164,17 @@ CameraHalDispatcherImpl::~CameraHalDispatcherImpl() {
} }
void CameraHalDispatcherImpl::RegisterServer( void CameraHalDispatcherImpl::RegisterServer(
cros::mojom::CameraHalServerPtr camera_hal_server) { mojo::PendingRemote<cros::mojom::CameraHalServer> camera_hal_server) {
DCHECK(proxy_task_runner_->BelongsToCurrentThread()); DCHECK(proxy_task_runner_->BelongsToCurrentThread());
if (camera_hal_server_) { if (camera_hal_server_) {
LOG(ERROR) << "Camera HAL server is already registered"; LOG(ERROR) << "Camera HAL server is already registered";
return; return;
} }
camera_hal_server.set_connection_error_handler( camera_hal_server_.Bind(std::move(camera_hal_server));
camera_hal_server_.set_disconnect_handler(
base::BindOnce(&CameraHalDispatcherImpl::OnCameraHalServerConnectionError, base::BindOnce(&CameraHalDispatcherImpl::OnCameraHalServerConnectionError,
base::Unretained(this))); base::Unretained(this)));
camera_hal_server_ = std::move(camera_hal_server);
VLOG(1) << "Camera HAL server registered"; VLOG(1) << "Camera HAL server registered";
// Set up the Mojo channels for clients which registered before the server // Set up the Mojo channels for clients which registered before the server
......
...@@ -20,6 +20,8 @@ ...@@ -20,6 +20,8 @@
#include "media/capture/video/video_capture_device_factory.h" #include "media/capture/video/video_capture_device_factory.h"
#include "mojo/public/cpp/bindings/binding_set.h" #include "mojo/public/cpp/bindings/binding_set.h"
#include "mojo/public/cpp/bindings/pending_receiver.h" #include "mojo/public/cpp/bindings/pending_receiver.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "mojo/public/cpp/bindings/remote.h"
#include "mojo/public/cpp/platform/platform_channel_server_endpoint.h" #include "mojo/public/cpp/platform/platform_channel_server_endpoint.h"
namespace base { namespace base {
...@@ -64,7 +66,8 @@ class CAPTURE_EXPORT CameraHalDispatcherImpl final ...@@ -64,7 +66,8 @@ class CAPTURE_EXPORT CameraHalDispatcherImpl final
bool IsStarted(); bool IsStarted();
// CameraHalDispatcher implementations. // CameraHalDispatcher implementations.
void RegisterServer(cros::mojom::CameraHalServerPtr server) final; void RegisterServer(
mojo::PendingRemote<cros::mojom::CameraHalServer> server) final;
void RegisterClient(cros::mojom::CameraHalClientPtr client) final; void RegisterClient(cros::mojom::CameraHalClientPtr client) final;
void GetJpegDecodeAccelerator( void GetJpegDecodeAccelerator(
mojo::PendingReceiver<chromeos_camera::mojom::MjpegDecodeAccelerator> mojo::PendingReceiver<chromeos_camera::mojom::MjpegDecodeAccelerator>
...@@ -124,7 +127,7 @@ class CAPTURE_EXPORT CameraHalDispatcherImpl final ...@@ -124,7 +127,7 @@ class CAPTURE_EXPORT CameraHalDispatcherImpl final
mojo::BindingSet<cros::mojom::CameraHalDispatcher> binding_set_; mojo::BindingSet<cros::mojom::CameraHalDispatcher> binding_set_;
cros::mojom::CameraHalServerPtr camera_hal_server_; mojo::Remote<cros::mojom::CameraHalServer> camera_hal_server_;
std::set<std::unique_ptr<CameraClientObserver>, base::UniquePtrComparator> std::set<std::unique_ptr<CameraClientObserver>, base::UniquePtrComparator>
client_observers_; client_observers_;
......
...@@ -13,6 +13,8 @@ ...@@ -13,6 +13,8 @@
#include "base/test/task_environment.h" #include "base/test/task_environment.h"
#include "media/capture/video/chromeos/mojom/camera_common.mojom.h" #include "media/capture/video/chromeos/mojom/camera_common.mojom.h"
#include "media/capture/video/chromeos/mojom/cros_camera_service.mojom.h" #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 "mojo/public/cpp/bindings/strong_binding.h"
#include "testing/gmock/include/gmock/gmock.h" #include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h" #include "testing/gtest/include/gtest/gtest.h"
...@@ -25,7 +27,7 @@ namespace { ...@@ -25,7 +27,7 @@ namespace {
class MockCameraHalServer : public cros::mojom::CameraHalServer { class MockCameraHalServer : public cros::mojom::CameraHalServer {
public: public:
MockCameraHalServer() : binding_(this) {} MockCameraHalServer() = default;
~MockCameraHalServer() = default; ~MockCameraHalServer() = default;
...@@ -38,16 +40,12 @@ class MockCameraHalServer : public cros::mojom::CameraHalServer { ...@@ -38,16 +40,12 @@ class MockCameraHalServer : public cros::mojom::CameraHalServer {
MOCK_METHOD1(SetTracingEnabled, void(bool enabled)); MOCK_METHOD1(SetTracingEnabled, void(bool enabled));
cros::mojom::CameraHalServerPtrInfo GetInterfacePtrInfo() { mojo::PendingRemote<cros::mojom::CameraHalServer> GetPendingRemote() {
cros::mojom::CameraHalServerPtrInfo camera_hal_server_ptr_info; return receiver_.BindNewPipeAndPassRemote();
cros::mojom::CameraHalServerRequest camera_hal_server_request =
mojo::MakeRequest(&camera_hal_server_ptr_info);
binding_.Bind(std::move(camera_hal_server_request));
return camera_hal_server_ptr_info;
} }
private: private:
mojo::Binding<cros::mojom::CameraHalServer> binding_; mojo::Receiver<cros::mojom::CameraHalServer> receiver_{this};
DISALLOW_COPY_AND_ASSIGN(MockCameraHalServer); DISALLOW_COPY_AND_ASSIGN(MockCameraHalServer);
}; };
...@@ -106,9 +104,10 @@ class CameraHalDispatcherImplTest : public ::testing::Test { ...@@ -106,9 +104,10 @@ class CameraHalDispatcherImplTest : public ::testing::Test {
} }
} }
static void RegisterServer(CameraHalDispatcherImpl* dispatcher, static void RegisterServer(
cros::mojom::CameraHalServerPtrInfo server) { CameraHalDispatcherImpl* dispatcher,
dispatcher->RegisterServer(mojo::MakeProxy(std::move(server))); mojo::PendingRemote<cros::mojom::CameraHalServer> server) {
dispatcher->RegisterServer(std::move(server));
} }
static void RegisterClient(CameraHalDispatcherImpl* dispatcher, static void RegisterClient(CameraHalDispatcherImpl* dispatcher,
...@@ -141,11 +140,11 @@ TEST_F(CameraHalDispatcherImplTest, ServerConnectionError) { ...@@ -141,11 +140,11 @@ TEST_F(CameraHalDispatcherImplTest, ServerConnectionError) {
.WillOnce( .WillOnce(
InvokeWithoutArgs(this, &CameraHalDispatcherImplTest::QuitRunLoop)); InvokeWithoutArgs(this, &CameraHalDispatcherImplTest::QuitRunLoop));
auto server_ptr = mock_server->GetInterfacePtrInfo(); auto server = mock_server->GetPendingRemote();
GetProxyTaskRunner()->PostTask( GetProxyTaskRunner()->PostTask(
FROM_HERE, FROM_HERE,
base::BindOnce(&CameraHalDispatcherImplTest::RegisterServer, base::BindOnce(&CameraHalDispatcherImplTest::RegisterServer,
base::Unretained(dispatcher_), base::Passed(&server_ptr))); base::Unretained(dispatcher_), std::move(server)));
auto client_ptr = mock_client->GetInterfacePtrInfo(); auto client_ptr = mock_client->GetInterfacePtrInfo();
GetProxyTaskRunner()->PostTask( GetProxyTaskRunner()->PostTask(
FROM_HERE, FROM_HERE,
...@@ -166,11 +165,11 @@ TEST_F(CameraHalDispatcherImplTest, ServerConnectionError) { ...@@ -166,11 +165,11 @@ TEST_F(CameraHalDispatcherImplTest, ServerConnectionError) {
.WillOnce( .WillOnce(
InvokeWithoutArgs(this, &CameraHalDispatcherImplTest::QuitRunLoop)); InvokeWithoutArgs(this, &CameraHalDispatcherImplTest::QuitRunLoop));
server_ptr = mock_server->GetInterfacePtrInfo(); server = mock_server->GetPendingRemote();
GetProxyTaskRunner()->PostTask( GetProxyTaskRunner()->PostTask(
FROM_HERE, FROM_HERE,
base::BindOnce(&CameraHalDispatcherImplTest::RegisterServer, base::BindOnce(&CameraHalDispatcherImplTest::RegisterServer,
base::Unretained(dispatcher_), base::Passed(&server_ptr))); base::Unretained(dispatcher_), std::move(server)));
// Wait until the clients gets the newly established Mojo channel. // Wait until the clients gets the newly established Mojo channel.
DoLoop(); DoLoop();
...@@ -190,11 +189,11 @@ TEST_F(CameraHalDispatcherImplTest, ClientConnectionError) { ...@@ -190,11 +189,11 @@ TEST_F(CameraHalDispatcherImplTest, ClientConnectionError) {
.WillOnce( .WillOnce(
InvokeWithoutArgs(this, &CameraHalDispatcherImplTest::QuitRunLoop)); InvokeWithoutArgs(this, &CameraHalDispatcherImplTest::QuitRunLoop));
auto server_ptr = mock_server->GetInterfacePtrInfo(); auto server = mock_server->GetPendingRemote();
GetProxyTaskRunner()->PostTask( GetProxyTaskRunner()->PostTask(
FROM_HERE, FROM_HERE,
base::BindOnce(&CameraHalDispatcherImplTest::RegisterServer, base::BindOnce(&CameraHalDispatcherImplTest::RegisterServer,
base::Unretained(dispatcher_), base::Passed(&server_ptr))); base::Unretained(dispatcher_), std::move(server)));
auto client_ptr = mock_client->GetInterfacePtrInfo(); auto client_ptr = mock_client->GetInterfacePtrInfo();
GetProxyTaskRunner()->PostTask( GetProxyTaskRunner()->PostTask(
FROM_HERE, FROM_HERE,
......
...@@ -21,7 +21,7 @@ import "media/capture/video/chromeos/mojom/camera_common.mojom"; ...@@ -21,7 +21,7 @@ import "media/capture/video/chromeos/mojom/camera_common.mojom";
interface CameraHalDispatcher { interface CameraHalDispatcher {
// A CameraHalServer calls RegisterServer to register itself with the // A CameraHalServer calls RegisterServer to register itself with the
// dispatcher. // dispatcher.
RegisterServer@0(CameraHalServer server); RegisterServer@0(pending_remote<CameraHalServer> server);
// A CameraHalClient calls RegisterClient to register itself with the // A CameraHalClient calls RegisterClient to register itself with the
// dispatcher. // dispatcher.
......
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