blob: aaa87d23db3b5e8e0a174681ca585cf1bac1da96 [file] [log] [blame]
dgozman1137e622017-04-17 19:49:121// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef CHROME_BROWSER_DEVTOOLS_DEVTOOLS_EYE_DROPPER_H_
6#define CHROME_BROWSER_DEVTOOLS_DEVTOOLS_EYE_DROPPER_H_
7
Yuri Wiitalafc5fe702018-06-20 06:14:008#include <memory>
9
dgozman1137e622017-04-17 19:49:1210#include "base/callback.h"
11#include "base/macros.h"
Saman Samid2dc25f2018-05-24 20:41:0712#include "components/viz/host/client_frame_sink_video_capturer.h"
dgozman1137e622017-04-17 19:49:1213#include "content/public/browser/render_widget_host.h"
14#include "content/public/browser/web_contents_observer.h"
Saman Sami2acabd12018-03-10 00:51:0915#include "media/renderers/paint_canvas_video_renderer.h"
dgozman1137e622017-04-17 19:49:1216#include "third_party/skia/include/core/SkBitmap.h"
17
18namespace blink {
19class WebMouseEvent;
20}
21
Saman Sami2acabd12018-03-10 00:51:0922class DevToolsEyeDropper : public content::WebContentsObserver,
23 public viz::mojom::FrameSinkVideoConsumer {
dgozman1137e622017-04-17 19:49:1224 public:
25 typedef base::Callback<void(int, int, int, int)> EyeDropperCallback;
26
27 DevToolsEyeDropper(content::WebContents* web_contents,
28 EyeDropperCallback callback);
29 ~DevToolsEyeDropper() override;
30
31 private:
32 void AttachToHost(content::RenderWidgetHost* host);
33 void DetachFromHost();
34
35 // content::WebContentsObserver.
dgozman1137e622017-04-17 19:49:1236 void RenderViewCreated(content::RenderViewHost* host) override;
37 void RenderViewDeleted(content::RenderViewHost* host) override;
38 void RenderViewHostChanged(content::RenderViewHost* old_host,
39 content::RenderViewHost* new_host) override;
40
dgozman1137e622017-04-17 19:49:1241 void ResetFrame();
Yuri Wiitala6a4443f02018-02-27 22:29:2742 void FrameUpdated(const SkBitmap&);
dgozman1137e622017-04-17 19:49:1243 bool HandleMouseEvent(const blink::WebMouseEvent& event);
44 void UpdateCursor();
45
Saman Sami2acabd12018-03-10 00:51:0946 // viz::mojom::FrameSinkVideoConsumer implementation.
47 void OnFrameCaptured(
Yuri Wiitala4a74fb02018-08-29 06:09:3548 base::ReadOnlySharedMemoryRegion data,
Saman Sami2acabd12018-03-10 00:51:0949 ::media::mojom::VideoFrameInfoPtr info,
50 const gfx::Rect& update_rect,
51 const gfx::Rect& content_rect,
52 viz::mojom::FrameSinkVideoConsumerFrameCallbacksPtr callbacks) override;
Saman Sami2acabd12018-03-10 00:51:0953 void OnStopped() override;
54
dgozman1137e622017-04-17 19:49:1255 EyeDropperCallback callback_;
56 SkBitmap frame_;
57 int last_cursor_x_;
58 int last_cursor_y_;
59 content::RenderWidgetHost::MouseEventCallback mouse_event_callback_;
60 content::RenderWidgetHost* host_;
Saman Samid2dc25f2018-05-24 20:41:0761 std::unique_ptr<viz::ClientFrameSinkVideoCapturer> video_capturer_;
Saman Sami2acabd12018-03-10 00:51:0962 media::PaintCanvasVideoRenderer video_renderer_;
dgozman1137e622017-04-17 19:49:1263 base::WeakPtrFactory<DevToolsEyeDropper> weak_factory_;
64
65 DISALLOW_COPY_AND_ASSIGN(DevToolsEyeDropper);
66};
67
68#endif // CHROME_BROWSER_DEVTOOLS_DEVTOOLS_EYE_DROPPER_H_