electron/shell/browser/api/frame_subscriber.h
Charles Kerr e70ce89235
chore: more iwyu (#43063)
* chore: iwyu shell/browser/electron_pdf_document_helper_client.h

* chore: iwyu shell/browser/hid/electron_hid_delegate.h

* chore: iwyu content/public/browser/web_contents.h

* chore: iwyu shell/browser/usb/electron_usb_delegate.h

* chore: iwyu shell/browser/browser_observer.h

* chore: iwyu shell/browser/bluetooth/electron_bluetooth_delegate.h

* chore: iwyu shell/browser/serial/electron_serial_delegate.h

* chore: iwyu shell/browser/api/frame_subscriber.h

* chore: iwyu mojo/public/cpp/bindings/

* chore: iwyu components/

* chore: iwyu extensions/

* chore: iwyu shell/common/gin_helper/

* chore: iwyu v8/

* chore: iwyu base/containers/linked_list.h

* chore: iwyu shell/browser/native_window.h

* chore: iwyu shell/browser/api/electron_api_base_window.h

* chore: iwyu shell/common/node_includes.h

* chore: iwyu gin/handle.h

* chore: iwyu base/functional/callback.h

* chore: iwyu ui/gfx/

* chore: iwyu content/public/browser/render_frame_host.h

* fix: mac

* fix: mac

* fix: win

* chore: iwyu base/files/file_path.h

* chore: iwyu base/unguessable_token.h

* chore: iwyu ui/display/screen.h

* chore: iwyu chrome/browser/predictors/preconnect_manager.h

* chore: iwyu base/observer_list_types.h

* chore: iwyu content/public/browser/web_contents.h

* chore: iwyu chrome/browser/devtools/devtools_eye_dropper.h

* chore: iwyu shell/browser/ui/inspectable_web_contents.h

* chore: iwyu content/public/browser/keyboard_event_processing_result.h

* chore: iwyu net/cookies/canonical_cookie.h

* chore: iwyu net/base/address_list.h

* chore: iwyu net/cert/x509_certificate.h

* chore: iwyu net/cookies/cookie_change_dispatcher.h

* chore: iwyu net/dns/public/host_resolver_results.h

* fix: mac

* Revert "chore: iwyu net/cert/x509_certificate.h"

This reverts commit 002896f71146e90f1e29e090a1d6eede48cee11e.
2024-07-29 12:42:57 -05:00

85 lines
2.6 KiB
C++

// Copyright (c) 2015 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.
#ifndef ELECTRON_SHELL_BROWSER_API_FRAME_SUBSCRIBER_H_
#define ELECTRON_SHELL_BROWSER_API_FRAME_SUBSCRIBER_H_
#include <memory>
#include <string>
#include "base/functional/callback_forward.h"
#include "base/memory/raw_ptr.h"
#include "base/memory/weak_ptr.h"
#include "components/viz/host/client_frame_sink_video_capturer.h"
#include "content/public/browser/web_contents_observer.h"
#include "media/capture/mojom/video_capture_buffer.mojom-forward.h"
#include "v8/include/v8-forward.h"
namespace gfx {
class Image;
class Rect;
} // namespace gfx
namespace mojo {
template <typename T>
class PendingRemote;
} // namespace mojo
namespace electron::api {
class WebContents;
class FrameSubscriber : private content::WebContentsObserver,
private viz::mojom::FrameSinkVideoConsumer {
public:
using FrameCaptureCallback =
base::RepeatingCallback<void(const gfx::Image&, const gfx::Rect&)>;
FrameSubscriber(content::WebContents* web_contents,
const FrameCaptureCallback& callback,
bool only_dirty);
~FrameSubscriber() override;
// disable copy
FrameSubscriber(const FrameSubscriber&) = delete;
FrameSubscriber& operator=(const FrameSubscriber&) = delete;
private:
void AttachToHost(content::RenderWidgetHost* host);
void DetachFromHost();
// content::WebContentsObserver
void RenderFrameCreated(content::RenderFrameHost* render_frame_host) override;
void PrimaryPageChanged(content::Page& page) override;
void RenderViewDeleted(content::RenderViewHost* host) override;
// viz::mojom::FrameSinkVideoConsumer
void OnFrameCaptured(
::media::mojom::VideoBufferHandlePtr data,
::media::mojom::VideoFrameInfoPtr info,
const gfx::Rect& content_rect,
mojo::PendingRemote<viz::mojom::FrameSinkVideoConsumerFrameCallbacks>
callbacks) override;
void OnNewSubCaptureTargetVersion(uint32_t crop_version) override;
void OnFrameWithEmptyRegionCapture() override;
void OnStopped() override;
void OnLog(const std::string& message) override;
void Done(const gfx::Rect& damage, const SkBitmap& frame);
// Get the pixel size of render view.
gfx::Size GetRenderViewSize() const;
FrameCaptureCallback callback_;
bool only_dirty_;
raw_ptr<content::RenderWidgetHost> host_;
std::unique_ptr<viz::ClientFrameSinkVideoCapturer> video_capturer_;
base::WeakPtrFactory<FrameSubscriber> weak_ptr_factory_{this};
};
} // namespace electron::api
#endif // ELECTRON_SHELL_BROWSER_API_FRAME_SUBSCRIBER_H_