chromium/chrome/browser/ui/lacros/screen_capture_notification_ui_lacros.h

// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CHROME_BROWSER_UI_LACROS_SCREEN_CAPTURE_NOTIFICATION_UI_LACROS_H_
#define CHROME_BROWSER_UI_LACROS_SCREEN_CAPTURE_NOTIFICATION_UI_LACROS_H_

#include "base/gtest_prod_util.h"
#include "chrome/browser/notifications/notification_platform_bridge_chromeos.h"
#include "chrome/browser/notifications/notification_platform_bridge_lacros.h"
#include "chrome/browser/ui/screen_capture_notification_ui.h"

constexpr char kLacrosScreenAccessNotificationId[] = "lacros-screen-access";

// Lacros implementation for ScreenCaptureNotificationUI. This UI displays a
// notification in system tray rather than a notification bar on screen.
class ScreenCaptureNotificationUILacros : public ScreenCaptureNotificationUI {
 public:
  explicit ScreenCaptureNotificationUILacros(const std::u16string& text);

  ScreenCaptureNotificationUILacros(const ScreenCaptureNotificationUILacros&) =
      delete;
  ScreenCaptureNotificationUILacros& operator=(
      const ScreenCaptureNotificationUILacros&) = delete;

  ~ScreenCaptureNotificationUILacros() override;

  // ScreenCaptureNotificationUI override.
  gfx::NativeViewId OnStarted(
      base::OnceClosure stop_callback,
      content::MediaStreamUI::SourceCallback source_callback,
      const std::vector<content::DesktopMediaID>& media_ids) override;

 private:
  FRIEND_TEST_ALL_PREFIXES(ScreenCaptureNotificationUILacrosTest, OnStarted);

  void ProcessStopRequestFromNotification();

  // Body text of the notification.
  const std::u16string text_;

  std::unique_ptr<NotificationPlatformBridgeChromeOs> bridge_delegate_;
  base::OnceClosure stop_callback_;
  base::WeakPtrFactory<ScreenCaptureNotificationUILacros> weak_ptr_factory_{
      this};
};

#endif  // CHROME_BROWSER_UI_LACROS_SCREEN_CAPTURE_NOTIFICATION_UI_LACROS_H_