electron/shell/browser/api/frame_subscriber.h
Electron Bot ca75bca667
chore: bump chromium to 90.0.4415.0 (master) (#27694)
* chore: bump chromium in DEPS to 520c02b46668fc608927e0fcd79b6a90885a48bf

* chore: bump chromium in DEPS to 90.0.4414.0

* resolve chromium conflicts

* resolve v8 conflicts

* fix node gn files

* 2673502: Remove RenderViewCreated use from ExtensionHost.

2673502

* 2676903: [mojo] Remove most legacy Binding classes.

2676903

* 2644847: Move self-deleting URLLoaderFactory base into //services/network.

2644847

* 2664006: Remove from mojo::DataPipe.

2664006

* 2674530: Remove CertVerifierService feature

2674530

* 2668748: Move OnSSLCertificateError to a new interface.

2668748

* 2672923: Remove RAPPOR reporting infrastructure.

2672923

* 2673502: Remove RenderViewCreated use from ExtensionHost.

2673502

* 2655126: Convert FrameHostMsg_ContextMenu and FrameMsg_ContextMenuClosed|CustomContextMenuAction to Mojo

2655126

* 2628705: Window Placement: Implement screen.isExtended and change event

2628705

* 2643161: Refactor storage::kFileSystem*Native*

2643161

* fix build

* only remove the biggest subdir of //ios

* chore: bump chromium in DEPS to 90.0.4415.0

* update patches

* update sysroots

* 2686147: Remove WebContentsObserver::RenderViewCreated().

2686147

* 2596429: Fixing how extension's split and spanning modes affect OriginAccessList.

2596429

* 2686026: [mojo] Delete AssociatedInterfacePtr (replaced by AssociatedRemote)

2686026

* 2651705: Move ui/base/dragdrop/file_info to ui/base/clipboard

2651705

* 358217: drawBitmap is deprecated

https://skia-review.googlesource.com/c/skia/+/358217

* fix gn check

* 2678098: Use gen/front_end as input to generate_devtools_grd

2678098

* 2674530: Remove CertVerifierService feature

2674530

* fixup 2664006: Remove from mojo::DataPipe.

  2664006

* fixup build_add_electron_tracing_category.patch

* 2673415: [base] Prepare CrashReporterClient for string16 switch

2673415

* 2673413: Add CursorFactoryWin to handle Cursors on Windows

2673413

* 2668748: Move OnSSLCertificateError to a new interface.

2668748

* fix mas gn check

* update patch after merge

* Update node for .mjs files

* build: load v8_prof_processor dependencies as ESM

* chore: add patch to fix linux 32bit

Co-authored-by: Jeremy Rose <nornagon@nornagon.net>
Co-authored-by: Jeremy Rose <jeremya@chromium.org>
Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org>
Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
Co-authored-by: Samuel Attard <samuel.r.attard@gmail.com>
2021-03-04 09:27:05 -08:00

79 lines
2.3 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 SHELL_BROWSER_API_FRAME_SUBSCRIBER_H_
#define SHELL_BROWSER_API_FRAME_SUBSCRIBER_H_
#include <memory>
#include <string>
#include "base/callback.h"
#include "base/memory/weak_ptr.h"
#include "components/viz/host/client_frame_sink_video_capturer.h"
#include "content/public/browser/web_contents.h"
#include "content/public/browser/web_contents_observer.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "v8/include/v8.h"
namespace gfx {
class Image;
}
namespace electron {
namespace api {
class WebContents;
class FrameSubscriber : public content::WebContentsObserver,
public 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;
private:
void AttachToHost(content::RenderWidgetHost* host);
void DetachFromHost();
void RenderFrameCreated(content::RenderFrameHost* render_frame_host) override;
void RenderViewDeleted(content::RenderViewHost* host) override;
void RenderViewHostChanged(content::RenderViewHost* old_host,
content::RenderViewHost* new_host) override;
// viz::mojom::FrameSinkVideoConsumer implementation.
void OnFrameCaptured(
base::ReadOnlySharedMemoryRegion data,
::media::mojom::VideoFrameInfoPtr info,
const gfx::Rect& content_rect,
mojo::PendingRemote<viz::mojom::FrameSinkVideoConsumerFrameCallbacks>
callbacks) 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_;
content::RenderWidgetHost* host_;
std::unique_ptr<viz::ClientFrameSinkVideoCapturer> video_capturer_;
base::WeakPtrFactory<FrameSubscriber> weak_ptr_factory_{this};
DISALLOW_COPY_AND_ASSIGN(FrameSubscriber);
};
} // namespace api
} // namespace electron
#endif // SHELL_BROWSER_API_FRAME_SUBSCRIBER_H_