blob: 120cc6f1613f73ac0630dfec6658212ce63fc2ef [file] [log] [blame]
// Copyright 2017 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 "media/capture/video/chromeos/mock_camera_module.h"
#include <memory>
#include <utility>
#include "base/bind.h"
namespace media {
namespace unittest_internal {
MockCameraModule::MockCameraModule() : mock_module_thread_("MockModuleThread") {
mock_module_thread_.Start();
}
MockCameraModule::~MockCameraModule() {
mock_module_thread_.task_runner()->PostTask(
FROM_HERE, base::BindOnce(&MockCameraModule::CloseBindingOnThread,
base::Unretained(this)));
mock_module_thread_.Stop();
}
void MockCameraModule::OpenDevice(
int32_t camera_id,
mojo::PendingReceiver<cros::mojom::Camera3DeviceOps> device_ops_receiver,
OpenDeviceCallback callback) {
DoOpenDevice(camera_id, std::move(device_ops_receiver), callback);
}
void MockCameraModule::GetNumberOfCameras(GetNumberOfCamerasCallback callback) {
DoGetNumberOfCameras(callback);
}
void MockCameraModule::GetCameraInfo(int32_t camera_id,
GetCameraInfoCallback callback) {
DoGetCameraInfo(camera_id, callback);
}
void MockCameraModule::SetCallbacks(
mojo::PendingRemote<cros::mojom::CameraModuleCallbacks> callbacks,
SetCallbacksCallback callback) {
// Method deprecated and not expected to be called.
}
void MockCameraModule::Init(InitCallback callback) {
DoInit(callback);
std::move(callback).Run(0);
}
void MockCameraModule::SetTorchMode(int32_t camera_id,
bool enabled,
SetTorchModeCallback callback) {
DoSetTorchMode(camera_id, enabled, callback);
std::move(callback).Run(0);
}
void MockCameraModule::GetVendorTagOps(
mojo::PendingReceiver<cros::mojom::VendorTagOps> vendor_tag_ops_receiver,
GetVendorTagOpsCallback callback) {
DoGetVendorTagOps(std::move(vendor_tag_ops_receiver), callback);
std::move(callback).Run();
}
void MockCameraModule::SetCallbacksAssociated(
mojo::PendingAssociatedRemote<cros::mojom::CameraModuleCallbacks> callbacks,
SetCallbacksAssociatedCallback callback) {
DoSetCallbacksAssociated(callbacks, callback);
callbacks_.Bind(std::move(callbacks));
std::move(callback).Run(0);
}
void MockCameraModule::NotifyCameraDeviceChange(
int camera_id,
cros::mojom::CameraDeviceStatus status) {
mock_module_thread_.task_runner()->PostTask(
FROM_HERE,
base::BindOnce(&MockCameraModule::NotifyCameraDeviceChangeOnThread,
base::Unretained(this), camera_id, status));
}
void MockCameraModule::NotifyCameraDeviceChangeOnThread(
int camera_id,
cros::mojom::CameraDeviceStatus status) {
callbacks_->CameraDeviceStatusChange(camera_id, status);
}
mojo::PendingRemote<cros::mojom::CameraModule>
MockCameraModule::GetPendingRemote() {
base::WaitableEvent done(base::WaitableEvent::ResetPolicy::MANUAL,
base::WaitableEvent::InitialState::NOT_SIGNALED);
mojo::PendingRemote<cros::mojom::CameraModule> pending_remote;
mock_module_thread_.task_runner()->PostTask(
FROM_HERE, base::BindOnce(&MockCameraModule::BindOnThread,
base::Unretained(this), base::Unretained(&done),
base::Unretained(&pending_remote)));
done.Wait();
return pending_remote;
}
void MockCameraModule::CloseBindingOnThread() {
receiver_.reset();
if (callbacks_.is_bound()) {
callbacks_.reset();
}
}
void MockCameraModule::BindOnThread(
base::WaitableEvent* done,
mojo::PendingRemote<cros::mojom::CameraModule>* pending_remote) {
*pending_remote = receiver_.BindNewPipeAndPassRemote();
done->Signal();
}
} // namespace unittest_internal
} // namespace media