frame_subscriber.h 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. // Copyright (c) 2015 GitHub, Inc.
  2. // Use of this source code is governed by the MIT license that can be
  3. // found in the LICENSE file.
  4. #ifndef SHELL_BROWSER_API_FRAME_SUBSCRIBER_H_
  5. #define SHELL_BROWSER_API_FRAME_SUBSCRIBER_H_
  6. #include <memory>
  7. #include <string>
  8. #include "base/callback.h"
  9. #include "base/memory/weak_ptr.h"
  10. #include "components/viz/host/client_frame_sink_video_capturer.h"
  11. #include "content/public/browser/web_contents.h"
  12. #include "content/public/browser/web_contents_observer.h"
  13. #include "mojo/public/cpp/bindings/pending_remote.h"
  14. #include "v8/include/v8.h"
  15. namespace gfx {
  16. class Image;
  17. class Rect;
  18. } // namespace gfx
  19. namespace electron {
  20. namespace api {
  21. class WebContents;
  22. class FrameSubscriber : public content::WebContentsObserver,
  23. public viz::mojom::FrameSinkVideoConsumer {
  24. public:
  25. using FrameCaptureCallback =
  26. base::RepeatingCallback<void(const gfx::Image&, const gfx::Rect&)>;
  27. FrameSubscriber(content::WebContents* web_contents,
  28. const FrameCaptureCallback& callback,
  29. bool only_dirty);
  30. ~FrameSubscriber() override;
  31. private:
  32. void AttachToHost(content::RenderWidgetHost* host);
  33. void DetachFromHost();
  34. void RenderFrameCreated(content::RenderFrameHost* render_frame_host) override;
  35. void RenderViewDeleted(content::RenderViewHost* host) override;
  36. void RenderViewHostChanged(content::RenderViewHost* old_host,
  37. content::RenderViewHost* new_host) override;
  38. // viz::mojom::FrameSinkVideoConsumer implementation.
  39. void OnFrameCaptured(
  40. base::ReadOnlySharedMemoryRegion data,
  41. ::media::mojom::VideoFrameInfoPtr info,
  42. const gfx::Rect& content_rect,
  43. mojo::PendingRemote<viz::mojom::FrameSinkVideoConsumerFrameCallbacks>
  44. callbacks) override;
  45. void OnStopped() override;
  46. void OnLog(const std::string& message) override;
  47. void Done(const gfx::Rect& damage, const SkBitmap& frame);
  48. // Get the pixel size of render view.
  49. gfx::Size GetRenderViewSize() const;
  50. FrameCaptureCallback callback_;
  51. bool only_dirty_;
  52. content::RenderWidgetHost* host_;
  53. std::unique_ptr<viz::ClientFrameSinkVideoCapturer> video_capturer_;
  54. base::WeakPtrFactory<FrameSubscriber> weak_ptr_factory_{this};
  55. DISALLOW_COPY_AND_ASSIGN(FrameSubscriber);
  56. };
  57. } // namespace api
  58. } // namespace electron
  59. #endif // SHELL_BROWSER_API_FRAME_SUBSCRIBER_H_