capture_mode_test_api.cc 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. // Copyright 2020 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "ash/public/cpp/capture_mode/capture_mode_test_api.h"
  5. #include "ash/capture_mode/camera_video_frame_handler.h"
  6. #include "ash/capture_mode/camera_video_frame_renderer.h"
  7. #include "ash/capture_mode/capture_mode_camera_controller.h"
  8. #include "ash/capture_mode/capture_mode_camera_preview_view.h"
  9. #include "ash/capture_mode/capture_mode_controller.h"
  10. #include "ash/capture_mode/capture_mode_metrics.h"
  11. #include "ash/capture_mode/capture_mode_session.h"
  12. #include "ash/capture_mode/capture_mode_types.h"
  13. #include "ash/capture_mode/video_recording_watcher.h"
  14. #include "base/auto_reset.h"
  15. #include "base/check.h"
  16. #include "base/run_loop.h"
  17. namespace ash {
  18. namespace {
  19. CaptureModeController* GetController() {
  20. auto* controller = CaptureModeController::Get();
  21. DCHECK(controller);
  22. return controller;
  23. }
  24. } // namespace
  25. CaptureModeTestApi::CaptureModeTestApi() : controller_(GetController()) {}
  26. void CaptureModeTestApi::StartForFullscreen(bool for_video) {
  27. SetType(for_video);
  28. controller_->SetSource(CaptureModeSource::kFullscreen);
  29. controller_->Start(CaptureModeEntryType::kQuickSettings);
  30. }
  31. void CaptureModeTestApi::StartForWindow(bool for_video) {
  32. SetType(for_video);
  33. controller_->SetSource(CaptureModeSource::kWindow);
  34. controller_->Start(CaptureModeEntryType::kQuickSettings);
  35. }
  36. void CaptureModeTestApi::StartForRegion(bool for_video) {
  37. SetType(for_video);
  38. controller_->SetSource(CaptureModeSource::kRegion);
  39. controller_->Start(CaptureModeEntryType::kQuickSettings);
  40. }
  41. bool CaptureModeTestApi::IsSessionActive() const {
  42. return controller_->IsActive();
  43. }
  44. void CaptureModeTestApi::SetUserSelectedRegion(const gfx::Rect& region) {
  45. controller_->SetUserCaptureRegion(region, /*by_user=*/true);
  46. }
  47. void CaptureModeTestApi::PerformCapture(bool skip_count_down) {
  48. DCHECK(controller_->IsActive());
  49. if (skip_count_down) {
  50. base::AutoReset<bool> skip_count_down_resetter(
  51. &controller_->skip_count_down_ui_, true);
  52. controller_->PerformCapture();
  53. } else {
  54. controller_->PerformCapture();
  55. }
  56. }
  57. bool CaptureModeTestApi::IsVideoRecordingInProgress() const {
  58. return controller_->is_recording_in_progress();
  59. }
  60. bool CaptureModeTestApi::IsPendingDlpCheck() const {
  61. return controller_->pending_dlp_check_;
  62. }
  63. bool CaptureModeTestApi::IsSessionWaitingForDlpConfirmation() const {
  64. return controller_->IsActive() &&
  65. controller_->capture_mode_session_->is_waiting_for_dlp_confirmation_;
  66. }
  67. bool CaptureModeTestApi::IsInCountDownAnimation() const {
  68. return controller_->IsActive() &&
  69. controller_->capture_mode_session_->IsInCountDownAnimation();
  70. }
  71. void CaptureModeTestApi::StopVideoRecording() {
  72. DCHECK(controller_->is_recording_in_progress());
  73. controller_->EndVideoRecording(EndRecordingReason::kStopRecordingButton);
  74. }
  75. void CaptureModeTestApi::SetOnCaptureFileSavedCallback(
  76. OnFileSavedCallback callback) {
  77. controller_->on_file_saved_callback_for_test_ = std::move(callback);
  78. }
  79. void CaptureModeTestApi::SetOnCaptureFileDeletedCallback(
  80. OnFileDeletedCallback callback) {
  81. controller_->on_file_deleted_callback_for_test_ = std::move(callback);
  82. }
  83. void CaptureModeTestApi::SetOnVideoRecordCountdownFinishedCallback(
  84. base::OnceClosure callback) {
  85. controller_->on_countdown_finished_callback_for_test_ = std::move(callback);
  86. }
  87. void CaptureModeTestApi::SetAudioRecordingEnabled(bool enabled) {
  88. DCHECK(!controller_->is_recording_in_progress());
  89. controller_->enable_audio_recording_ = enabled;
  90. }
  91. void CaptureModeTestApi::FlushRecordingServiceForTesting() {
  92. DCHECK(controller_->is_recording_in_progress());
  93. controller_->recording_service_remote_.FlushForTesting();
  94. }
  95. void CaptureModeTestApi::ResetRecordingServiceRemote() {
  96. DCHECK(controller_->is_recording_in_progress());
  97. controller_->recording_service_remote_.reset();
  98. }
  99. void CaptureModeTestApi::ResetRecordingServiceClientReceiver() {
  100. DCHECK(controller_->is_recording_in_progress());
  101. controller_->recording_service_client_receiver_.reset();
  102. }
  103. RecordingOverlayController*
  104. CaptureModeTestApi::GetRecordingOverlayController() {
  105. DCHECK(controller_->is_recording_in_progress());
  106. DCHECK(controller_->video_recording_watcher_->is_in_projector_mode());
  107. return controller_->video_recording_watcher_->recording_overlay_controller_
  108. .get();
  109. }
  110. void CaptureModeTestApi::SimulateOpeningFolderSelectionDialog() {
  111. DCHECK(controller_->IsActive());
  112. auto* session = controller_->capture_mode_session();
  113. DCHECK(!session->capture_mode_settings_widget_);
  114. session->SetSettingsMenuShown(true);
  115. DCHECK(session->capture_mode_settings_widget_);
  116. session->OpenFolderSelectionDialog();
  117. // In browser tests, the dialog creation is asynchronous, so we'll need to
  118. // wait for it.
  119. if (GetFolderSelectionDialogWindow())
  120. return;
  121. base::RunLoop loop;
  122. session->folder_selection_dialog_controller_
  123. ->on_dialog_window_added_callback_for_test_ = loop.QuitClosure();
  124. loop.Run();
  125. }
  126. aura::Window* CaptureModeTestApi::GetFolderSelectionDialogWindow() {
  127. DCHECK(controller_->IsActive());
  128. auto* session = controller_->capture_mode_session();
  129. auto* dialog_controller = session->folder_selection_dialog_controller_.get();
  130. return dialog_controller ? dialog_controller->dialog_window() : nullptr;
  131. }
  132. void CaptureModeTestApi::SetForceUseGpuMemoryBufferForCameraFrames(bool value) {
  133. DCHECK(controller_->camera_controller());
  134. CameraVideoFrameHandler::SetForceUseGpuMemoryBufferForTest(value);
  135. }
  136. size_t CaptureModeTestApi::GetNumberOfAvailableCameras() const {
  137. DCHECK(controller_->camera_controller());
  138. return controller_->camera_controller()->available_cameras().size();
  139. }
  140. void CaptureModeTestApi::SelectCameraAtIndex(size_t index) {
  141. auto* camera_controller = controller_->camera_controller();
  142. DCHECK(camera_controller);
  143. DCHECK_LT(index, GetNumberOfAvailableCameras());
  144. const auto& camera_info = camera_controller->available_cameras()[index];
  145. camera_controller->SetSelectedCamera(camera_info.camera_id);
  146. }
  147. void CaptureModeTestApi::TurnCameraOff() {
  148. auto* camera_controller = controller_->camera_controller();
  149. DCHECK(camera_controller);
  150. camera_controller->SetSelectedCamera(CameraId());
  151. }
  152. void CaptureModeTestApi::SetOnCameraVideoFrameRendered(
  153. CameraVideoFrameCallback callback) {
  154. auto* camera_controller = controller_->camera_controller();
  155. DCHECK(camera_controller);
  156. DCHECK(camera_controller->camera_preview_widget());
  157. DCHECK(camera_controller->camera_preview_view_);
  158. camera_controller->camera_preview_view_->camera_video_renderer_
  159. .on_video_frame_rendered_for_test_ = std::move(callback);
  160. }
  161. void CaptureModeTestApi::SetType(bool for_video) {
  162. controller_->SetType(for_video ? CaptureModeType::kVideo
  163. : CaptureModeType::kImage);
  164. }
  165. } // namespace ash