frame_subscriber.h 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  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 ATOM_BROWSER_API_FRAME_SUBSCRIBER_H_
  5. #define ATOM_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 atom {
  17. namespace api {
  18. class WebContents;
  19. class FrameSubscriber : public content::WebContentsObserver,
  20. public viz::mojom::FrameSinkVideoConsumer {
  21. public:
  22. using FrameCaptureCallback =
  23. base::Callback<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& update_rect,
  40. const gfx::Rect& content_rect,
  41. viz::mojom::FrameSinkVideoConsumerFrameCallbacksPtr callbacks) override;
  42. void OnStopped() override;
  43. void Done(const gfx::Rect& damage, const SkBitmap& frame);
  44. FrameCaptureCallback callback_;
  45. bool only_dirty_;
  46. content::RenderWidgetHost* host_;
  47. std::unique_ptr<viz::ClientFrameSinkVideoCapturer> video_capturer_;
  48. base::WeakPtrFactory<FrameSubscriber> weak_ptr_factory_;
  49. DISALLOW_COPY_AND_ASSIGN(FrameSubscriber);
  50. };
  51. } // namespace api
  52. } // namespace atom
  53. #endif // ATOM_BROWSER_API_FRAME_SUBSCRIBER_H_