| // Copyright 2024 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef CONTENT_BROWSER_MEDIA_CAPTURE_NATIVE_SCREEN_CAPTURE_PICKER_H_ |
| #define CONTENT_BROWSER_MEDIA_CAPTURE_NATIVE_SCREEN_CAPTURE_PICKER_H_ |
| |
| #include <memory> |
| |
| #include "base/functional/callback.h" |
| #include "base/memory/weak_ptr.h" |
| #include "content/public/browser/desktop_media_id.h" |
| #include "third_party/webrtc/modules/desktop_capture/desktop_capturer.h" |
| |
| namespace media { |
| class VideoCaptureDevice; |
| } // namespace media |
| |
| namespace content { |
| |
| class NativeScreenCapturePicker { |
| public: |
| virtual ~NativeScreenCapturePicker() = default; |
| |
| // Opens the picker dialog. |
| // `type` is the type of the content capture (window/screen). |
| // `created_callback` is called when the picker is opened/created. |
| // `picker_callback` is called when the user picks a source. |
| // `cancel_callback` is called when the user closes the picker without |
| // picking. |
| // `error_callback` is called when the picker fails to open. |
| // Exactly one of these three callbacks is called depending on the picker |
| // selection and success. |
| virtual void Open( |
| DesktopMediaID::Type type, |
| base::OnceCallback<void(DesktopMediaID::Id)> created_callback, |
| base::OnceCallback<void(webrtc::DesktopCapturer::Source)> picker_callback, |
| base::OnceClosure cancel_callback, |
| base::OnceClosure error_callback) = 0; |
| |
| // Closes the picker. |
| virtual void Close(DesktopMediaID device_id) = 0; |
| |
| // Creates a video capture device for a surface selected during a previous |
| // call to Open. |
| virtual std::unique_ptr<media::VideoCaptureDevice> CreateDevice( |
| const DesktopMediaID& source) = 0; |
| |
| virtual base::WeakPtr<NativeScreenCapturePicker> GetWeakPtr() = 0; |
| }; |
| |
| std::unique_ptr<NativeScreenCapturePicker> |
| MaybeCreateNativeScreenCapturePicker(); |
| |
| } // namespace content |
| #endif // CONTENT_BROWSER_MEDIA_CAPTURE_NATIVE_SCREEN_CAPTURE_PICKER_H_ |