123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202 |
- // Copyright 2020 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 "ash/public/cpp/capture_mode/capture_mode_test_api.h"
- #include "ash/capture_mode/camera_video_frame_handler.h"
- #include "ash/capture_mode/camera_video_frame_renderer.h"
- #include "ash/capture_mode/capture_mode_camera_controller.h"
- #include "ash/capture_mode/capture_mode_camera_preview_view.h"
- #include "ash/capture_mode/capture_mode_controller.h"
- #include "ash/capture_mode/capture_mode_metrics.h"
- #include "ash/capture_mode/capture_mode_session.h"
- #include "ash/capture_mode/capture_mode_types.h"
- #include "ash/capture_mode/video_recording_watcher.h"
- #include "base/auto_reset.h"
- #include "base/check.h"
- #include "base/run_loop.h"
- namespace ash {
- namespace {
- CaptureModeController* GetController() {
- auto* controller = CaptureModeController::Get();
- DCHECK(controller);
- return controller;
- }
- } // namespace
- CaptureModeTestApi::CaptureModeTestApi() : controller_(GetController()) {}
- void CaptureModeTestApi::StartForFullscreen(bool for_video) {
- SetType(for_video);
- controller_->SetSource(CaptureModeSource::kFullscreen);
- controller_->Start(CaptureModeEntryType::kQuickSettings);
- }
- void CaptureModeTestApi::StartForWindow(bool for_video) {
- SetType(for_video);
- controller_->SetSource(CaptureModeSource::kWindow);
- controller_->Start(CaptureModeEntryType::kQuickSettings);
- }
- void CaptureModeTestApi::StartForRegion(bool for_video) {
- SetType(for_video);
- controller_->SetSource(CaptureModeSource::kRegion);
- controller_->Start(CaptureModeEntryType::kQuickSettings);
- }
- bool CaptureModeTestApi::IsSessionActive() const {
- return controller_->IsActive();
- }
- void CaptureModeTestApi::SetUserSelectedRegion(const gfx::Rect& region) {
- controller_->SetUserCaptureRegion(region, /*by_user=*/true);
- }
- void CaptureModeTestApi::PerformCapture(bool skip_count_down) {
- DCHECK(controller_->IsActive());
- if (skip_count_down) {
- base::AutoReset<bool> skip_count_down_resetter(
- &controller_->skip_count_down_ui_, true);
- controller_->PerformCapture();
- } else {
- controller_->PerformCapture();
- }
- }
- bool CaptureModeTestApi::IsVideoRecordingInProgress() const {
- return controller_->is_recording_in_progress();
- }
- bool CaptureModeTestApi::IsPendingDlpCheck() const {
- return controller_->pending_dlp_check_;
- }
- bool CaptureModeTestApi::IsSessionWaitingForDlpConfirmation() const {
- return controller_->IsActive() &&
- controller_->capture_mode_session_->is_waiting_for_dlp_confirmation_;
- }
- bool CaptureModeTestApi::IsInCountDownAnimation() const {
- return controller_->IsActive() &&
- controller_->capture_mode_session_->IsInCountDownAnimation();
- }
- void CaptureModeTestApi::StopVideoRecording() {
- DCHECK(controller_->is_recording_in_progress());
- controller_->EndVideoRecording(EndRecordingReason::kStopRecordingButton);
- }
- void CaptureModeTestApi::SetOnCaptureFileSavedCallback(
- OnFileSavedCallback callback) {
- controller_->on_file_saved_callback_for_test_ = std::move(callback);
- }
- void CaptureModeTestApi::SetOnCaptureFileDeletedCallback(
- OnFileDeletedCallback callback) {
- controller_->on_file_deleted_callback_for_test_ = std::move(callback);
- }
- void CaptureModeTestApi::SetOnVideoRecordCountdownFinishedCallback(
- base::OnceClosure callback) {
- controller_->on_countdown_finished_callback_for_test_ = std::move(callback);
- }
- void CaptureModeTestApi::SetAudioRecordingEnabled(bool enabled) {
- DCHECK(!controller_->is_recording_in_progress());
- controller_->enable_audio_recording_ = enabled;
- }
- void CaptureModeTestApi::FlushRecordingServiceForTesting() {
- DCHECK(controller_->is_recording_in_progress());
- controller_->recording_service_remote_.FlushForTesting();
- }
- void CaptureModeTestApi::ResetRecordingServiceRemote() {
- DCHECK(controller_->is_recording_in_progress());
- controller_->recording_service_remote_.reset();
- }
- void CaptureModeTestApi::ResetRecordingServiceClientReceiver() {
- DCHECK(controller_->is_recording_in_progress());
- controller_->recording_service_client_receiver_.reset();
- }
- RecordingOverlayController*
- CaptureModeTestApi::GetRecordingOverlayController() {
- DCHECK(controller_->is_recording_in_progress());
- DCHECK(controller_->video_recording_watcher_->is_in_projector_mode());
- return controller_->video_recording_watcher_->recording_overlay_controller_
- .get();
- }
- void CaptureModeTestApi::SimulateOpeningFolderSelectionDialog() {
- DCHECK(controller_->IsActive());
- auto* session = controller_->capture_mode_session();
- DCHECK(!session->capture_mode_settings_widget_);
- session->SetSettingsMenuShown(true);
- DCHECK(session->capture_mode_settings_widget_);
- session->OpenFolderSelectionDialog();
- // In browser tests, the dialog creation is asynchronous, so we'll need to
- // wait for it.
- if (GetFolderSelectionDialogWindow())
- return;
- base::RunLoop loop;
- session->folder_selection_dialog_controller_
- ->on_dialog_window_added_callback_for_test_ = loop.QuitClosure();
- loop.Run();
- }
- aura::Window* CaptureModeTestApi::GetFolderSelectionDialogWindow() {
- DCHECK(controller_->IsActive());
- auto* session = controller_->capture_mode_session();
- auto* dialog_controller = session->folder_selection_dialog_controller_.get();
- return dialog_controller ? dialog_controller->dialog_window() : nullptr;
- }
- void CaptureModeTestApi::SetForceUseGpuMemoryBufferForCameraFrames(bool value) {
- DCHECK(controller_->camera_controller());
- CameraVideoFrameHandler::SetForceUseGpuMemoryBufferForTest(value);
- }
- size_t CaptureModeTestApi::GetNumberOfAvailableCameras() const {
- DCHECK(controller_->camera_controller());
- return controller_->camera_controller()->available_cameras().size();
- }
- void CaptureModeTestApi::SelectCameraAtIndex(size_t index) {
- auto* camera_controller = controller_->camera_controller();
- DCHECK(camera_controller);
- DCHECK_LT(index, GetNumberOfAvailableCameras());
- const auto& camera_info = camera_controller->available_cameras()[index];
- camera_controller->SetSelectedCamera(camera_info.camera_id);
- }
- void CaptureModeTestApi::TurnCameraOff() {
- auto* camera_controller = controller_->camera_controller();
- DCHECK(camera_controller);
- camera_controller->SetSelectedCamera(CameraId());
- }
- void CaptureModeTestApi::SetOnCameraVideoFrameRendered(
- CameraVideoFrameCallback callback) {
- auto* camera_controller = controller_->camera_controller();
- DCHECK(camera_controller);
- DCHECK(camera_controller->camera_preview_widget());
- DCHECK(camera_controller->camera_preview_view_);
- camera_controller->camera_preview_view_->camera_video_renderer_
- .on_video_frame_rendered_for_test_ = std::move(callback);
- }
- void CaptureModeTestApi::SetType(bool for_video) {
- controller_->SetType(for_video ? CaptureModeType::kVideo
- : CaptureModeType::kImage);
- }
- } // namespace ash
|