#ifndef ASH_CAPTURE_MODE_TEST_CAPTURE_MODE_DELEGATE_H_
#define ASH_CAPTURE_MODE_TEST_CAPTURE_MODE_DELEGATE_H_
#include <limits>
#include <memory>
#include "ash/public/cpp/capture_mode/capture_mode_delegate.h"
#include "base/files/file_path.h"
#include "base/files/scoped_temp_dir.h"
#include "base/functional/callback.h"
#include "base/functional/callback_forward.h"
#include "components/viz/common/surfaces/frame_sink_id.h"
#include "ui/gfx/geometry/size.h"
#include "ui/gfx/image/image_skia.h"
namespace recording {
class RecordingServiceTestApi;
}
namespace ash {
class FakeVideoSourceProvider;
class TestCaptureModeDelegate : public CaptureModeDelegate {
public:
TestCaptureModeDelegate();
TestCaptureModeDelegate(const TestCaptureModeDelegate&) = delete;
TestCaptureModeDelegate& operator=(const TestCaptureModeDelegate&) = delete;
~TestCaptureModeDelegate() override;
recording::RecordingServiceTestApi* recording_service() const {
return recording_service_.get();
}
FakeVideoSourceProvider* video_source_provider() {
return video_source_provider_.get();
}
void set_on_session_state_changed_callback(base::OnceClosure callback) {
on_session_state_changed_callback_ = std::move(callback);
}
void set_on_recording_started_callback(base::OnceClosure callback) {
on_recording_started_callback_ = std::move(callback);
}
void set_is_allowed_by_dlp(bool value) { is_allowed_by_dlp_ = value; }
void set_is_allowed_by_policy(bool value) { is_allowed_by_policy_ = value; }
void set_should_save_after_dlp_check(bool value) {
should_save_after_dlp_check_ = value;
}
void set_is_camera_disabled_by_policy(bool value) {
is_camera_disabled_by_policy_ = value;
}
void set_is_audio_capture_disabled_by_policy(bool value) {
is_audio_capture_disabled_by_policy_ = value;
}
void set_fake_drive_fs_free_bytes(int64_t bytes) {
fake_drive_fs_free_bytes_ = bytes;
}
void ResetAllowancesToDefault();
viz::FrameSinkId GetCurrentFrameSinkId() const;
gfx::Size GetCurrentFrameSinkSizeInPixels() const;
gfx::Size GetCurrentVideoSize() const;
gfx::ImageSkia GetVideoThumbnail() const;
void RequestAndWaitForVideoFrame();
bool IsDoingAudioRecording() const;
base::FilePath GetUserDefaultDownloadsFolder() const override;
void ShowScreenCaptureItemInFolder(const base::FilePath& file_path) override;
void OpenScreenshotInImageEditor(const base::FilePath& file_path) override;
bool Uses24HourFormat() const override;
void CheckCaptureModeInitRestrictionByDlp(
OnCaptureModeDlpRestrictionChecked callback) override;
void CheckCaptureOperationRestrictionByDlp(
const aura::Window* window,
const gfx::Rect& bounds,
OnCaptureModeDlpRestrictionChecked callback) override;
bool IsCaptureAllowedByPolicy() const override;
void StartObservingRestrictedContent(
const aura::Window* window,
const gfx::Rect& bounds,
base::OnceClosure stop_callback) override;
void StopObservingRestrictedContent(
OnCaptureModeDlpRestrictionChecked callback) override;
void OnCaptureImageAttempted(aura::Window const*, gfx::Rect const&) override;
mojo::Remote<recording::mojom::RecordingService> LaunchRecordingService()
override;
void BindAudioStreamFactory(
mojo::PendingReceiver<media::mojom::AudioStreamFactory> receiver)
override;
void OnSessionStateChanged(bool started) override;
void OnServiceRemoteReset() override;
bool GetDriveFsMountPointPath(base::FilePath* result) const override;
base::FilePath GetAndroidFilesPath() const override;
base::FilePath GetLinuxFilesPath() const override;
std::unique_ptr<RecordingOverlayView> CreateRecordingOverlayView()
const override;
void ConnectToVideoSourceProvider(
mojo::PendingReceiver<video_capture::mojom::VideoSourceProvider> receiver)
override;
void GetDriveFsFreeSpaceBytes(OnGotDriveFsFreeSpace callback) override;
bool IsCameraDisabledByPolicy() const override;
bool IsAudioCaptureDisabledByPolicy() const override;
private:
std::unique_ptr<recording::RecordingServiceTestApi> recording_service_;
std::unique_ptr<FakeVideoSourceProvider> video_source_provider_;
base::ScopedTempDir fake_downloads_dir_;
base::OnceClosure on_session_state_changed_callback_;
base::OnceClosure on_recording_started_callback_;
bool is_allowed_by_dlp_ = true;
bool is_allowed_by_policy_ = true;
bool should_save_after_dlp_check_ = true;
bool is_camera_disabled_by_policy_ = false;
bool is_audio_capture_disabled_by_policy_ = false;
base::ScopedTempDir fake_drive_fs_mount_path_;
base::ScopedTempDir fake_android_files_path_;
base::ScopedTempDir fake_linux_files_path_;
int64_t fake_drive_fs_free_bytes_ = std::numeric_limits<int64_t>::max();
};
}
#endif