frame_subscriber.h 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  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 "base/callback.h"
  8. #include "base/memory/weak_ptr.h"
  9. #include "components/viz/host/client_frame_sink_video_capturer.h"
  10. #include "content/public/browser/web_contents.h"
  11. #include "content/public/browser/web_contents_observer.h"
  12. #include "v8/include/v8.h"
  13. namespace gfx {
  14. class Image;
  15. }
  16. namespace electron {
  17. namespace api {
  18. class WebContents;
  19. class FrameSubscriber : public content::WebContentsObserver,
  20. public viz::mojom::FrameSinkVideoConsumer {
  21. public:
  22. using FrameCaptureCallback =
  23. base::RepeatingCallback<void(const gfx::Image&, const gfx::Rect&)>;
  24. FrameSubscriber(content::WebContents* web_contents,
  25. const FrameCaptureCallback& callback,
  26. bool only_dirty);
  27. ~FrameSubscriber() override;
  28. private:
  29. void AttachToHost(content::RenderWidgetHost* host);
  30. void DetachFromHost();
  31. void RenderViewCreated(content::RenderViewHost* host) override;
  32. void RenderViewDeleted(content::RenderViewHost* host) override;
  33. void RenderViewHostChanged(content::RenderViewHost* old_host,
  34. content::RenderViewHost* new_host) override;
  35. // viz::mojom::FrameSinkVideoConsumer implementation.
  36. void OnFrameCaptured(
  37. base::ReadOnlySharedMemoryRegion data,
  38. ::media::mojom::VideoFrameInfoPtr info,
  39. const gfx::Rect& content_rect,
  40. viz::mojom::FrameSinkVideoConsumerFrameCallbacksPtr callbacks) override;
  41. void OnStopped() override;
  42. void Done(const gfx::Rect& damage, const SkBitmap& frame);
  43. // Get the pixel size of render view.
  44. gfx::Size GetRenderViewSize() const;
  45. FrameCaptureCallback callback_;
  46. bool only_dirty_;
  47. content::RenderWidgetHost* host_;
  48. std::unique_ptr<viz::ClientFrameSinkVideoCapturer> video_capturer_;
  49. base::WeakPtrFactory<FrameSubscriber> weak_ptr_factory_;
  50. DISALLOW_COPY_AND_ASSIGN(FrameSubscriber);
  51. };
  52. } // namespace api
  53. } // namespace electron
  54. #endif // SHELL_BROWSER_API_FRAME_SUBSCRIBER_H_