// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROMEOS_ASH_SERVICES_RECORDING_RECORDING_SERVICE_TEST_API_H_
#define CHROMEOS_ASH_SERVICES_RECORDING_RECORDING_SERVICE_TEST_API_H_
#include "base/functional/callback_forward.h"
#include "base/functional/callback_helpers.h"
#include "chromeos/ash/services/recording/public/mojom/recording_service.mojom.h"
#include "chromeos/ash/services/recording/recording_service.h"
#include "media/base/video_frame.h"
#include "mojo/public/cpp/bindings/pending_receiver.h"
#include "ui/gfx/image/image_skia.h"
namespace recording {
// Defines an API to test the internals of the recording service. The recording
// service instance is created (in-process) and owned by this class.
class RecordingServiceTestApi {
public:
explicit RecordingServiceTestApi(
mojo::PendingReceiver<mojom::RecordingService> receiver);
RecordingServiceTestApi(const RecordingServiceTestApi&) = delete;
RecordingServiceTestApi& operator=(const RecordingServiceTestApi&) = delete;
~RecordingServiceTestApi() = default;
// Gets the current frame sink id being captured by the service.
viz::FrameSinkId GetCurrentFrameSinkId() const;
// Gets the device scale factor value used by the recording service. This
// value will always be 1.f when recording at the DIPs sizes, and equal to the
// current DSF value of the display being recorded when recording at the pixel
// sizes (see |ash::features::kRecordAtPixelSize|).
float GetCurrentDeviceScaleFactor() const;
// Gets the current size of the frame sink being recorded in pixels.
gfx::Size GetCurrentFrameSinkSizeInPixels() const;
// Gets the current video size being captured by the service. This matches the
// the pixel size of the target being recorded.
gfx::Size GetCurrentVideoSize() const;
// Gets the thumbnail image that will be used by the service to provide it to
// the client.
gfx::ImageSkia GetVideoThumbnail() const;
// Gets the number of times the video encoder was reconfigured (not counting
// the first time it was configured) as a result of a change in the video
// size.
int GetNumberOfVideoEncoderReconfigures() const;
// Requests a video frame from the video capturer and waits for it to be
// delivered to the service. If the caller provided a non-null
// |verify_frame_callback| it will be called before this function returns.
using VerifyVideoFrameCallback =
base::OnceCallback<void(const media::VideoFrame& frame,
const gfx::Rect& content_rect)>;
void RequestAndWaitForVideoFrame(
VerifyVideoFrameCallback verify_frame_callback = base::NullCallback());
// Returns true if the recording service is currently recording audio.
bool IsDoingAudioRecording() const;
// Returns the number of audio capturers currently owned by the recording
// service.
int GetNumberOfAudioCapturers() const;
private:
// The actual recording service instance.
RecordingService recording_service_;
};
} // namespace recording
#endif // CHROMEOS_ASH_SERVICES_RECORDING_RECORDING_SERVICE_TEST_API_H_