| // Copyright 2013 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "chrome/browser/ash/notifications/screen_capture_notification_ui_ash.h" |
| |
| #include "ash/shell.h" |
| #include "ash/system/tray/system_tray_notifier.h" |
| #include "base/functional/bind.h" |
| #include "base/functional/callback.h" |
| |
| namespace ash { |
| |
| ScreenCaptureNotificationUIAsh::ScreenCaptureNotificationUIAsh( |
| const std::u16string& text) |
| : text_(text) {} |
| |
| ScreenCaptureNotificationUIAsh::~ScreenCaptureNotificationUIAsh() { |
| // MediaStreamCaptureIndicator will delete ScreenCaptureNotificationUI object |
| // after it stops screen capture. |
| stop_callback_.Reset(); |
| ash::Shell::Get()->system_tray_notifier()->NotifyScreenAccessStop(); |
| } |
| |
| gfx::NativeViewId ScreenCaptureNotificationUIAsh::OnStarted( |
| base::OnceClosure stop_callback, |
| content::MediaStreamUI::SourceCallback source_callback, |
| const std::vector<content::DesktopMediaID>& media_ids) { |
| stop_callback_ = std::move(stop_callback); |
| ash::Shell::Get()->system_tray_notifier()->NotifyScreenAccessStart( |
| base::BindRepeating( |
| &ScreenCaptureNotificationUIAsh::ProcessStopRequestFromUI, |
| weak_ptr_factory_.GetWeakPtr()), |
| source_callback |
| ? base::BindRepeating(std::move(source_callback), |
| content::DesktopMediaID(), |
| /*captured_surface_control_active=*/false) |
| : base::RepeatingClosure(), |
| text_); |
| return 0; |
| } |
| |
| void ScreenCaptureNotificationUIAsh::ProcessStopRequestFromUI() { |
| if (!stop_callback_.is_null()) { |
| std::move(stop_callback_).Run(); |
| } |
| } |
| |
| } // namespace ash |
| |
| // static |
| std::unique_ptr<ScreenCaptureNotificationUI> |
| ScreenCaptureNotificationUI::Create( |
| const std::u16string& text, |
| content::WebContents* capturing_web_contents) { |
| return std::make_unique<ash::ScreenCaptureNotificationUIAsh>(text); |
| } |