[DevTools] Emulation domain implementation (browser side).
[chromium-blink-merge.git] / content / browser / devtools / protocol / page_handler.h
blobcee47594bc3ba0697595379efe35d1a98b243506
1 // 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.
5 #ifndef CONTENT_BROWSER_DEVTOOLS_PROTOCOL_PAGE_HANDLER_H_
6 #define CONTENT_BROWSER_DEVTOOLS_PROTOCOL_PAGE_HANDLER_H_
8 #include "base/basictypes.h"
9 #include "base/compiler_specific.h"
10 #include "base/memory/weak_ptr.h"
11 #include "base/time/time.h"
12 #include "cc/output/compositor_frame_metadata.h"
13 #include "content/browser/devtools/protocol/devtools_protocol_handler.h"
14 #include "content/public/browser/readback_types.h"
15 #include "third_party/WebKit/public/web/WebDeviceEmulationParams.h"
17 class SkBitmap;
19 namespace content {
21 class RenderViewHostImpl;
23 namespace devtools {
24 namespace page {
26 class ColorPicker;
27 class FrameRecorder;
29 class PageHandler {
30 public:
31 typedef DevToolsProtocolClient::Response Response;
33 class ScreencastListener {
34 public:
35 virtual ~ScreencastListener() { }
36 virtual void ScreencastEnabledChanged() = 0;
39 PageHandler();
40 virtual ~PageHandler();
42 void SetRenderViewHost(RenderViewHostImpl* host);
43 void SetClient(scoped_ptr<Client> client);
44 void Detached();
45 void OnSwapCompositorFrame(const cc::CompositorFrameMetadata& frame_metadata);
46 void OnVisibilityChanged(bool visible);
47 void DidAttachInterstitialPage();
48 void DidDetachInterstitialPage();
49 void SetScreencastListener(ScreencastListener* listener);
50 bool screencast_enabled() const { return enabled_ && screencast_enabled_; }
52 Response Enable();
53 Response Disable();
55 Response Reload(const bool* ignoreCache,
56 const std::string* script_to_evaluate_on_load,
57 const std::string* script_preprocessor = NULL);
59 Response Navigate(const std::string& url, FrameId* frame_id);
61 using NavigationEntries = std::vector<scoped_refptr<NavigationEntry>>;
62 Response GetNavigationHistory(int* current_index,
63 NavigationEntries* entries);
65 Response NavigateToHistoryEntry(int entry_id);
67 Response SetGeolocationOverride(double* latitude,
68 double* longitude,
69 double* accuracy);
71 Response ClearGeolocationOverride();
73 Response SetTouchEmulationEnabled(bool enabled,
74 const std::string* configuration);
76 Response CaptureScreenshot(DevToolsCommandId command_id);
78 Response CanEmulate(bool* result);
79 Response SetDeviceMetricsOverride(int width,
80 int height,
81 double device_scale_factor,
82 bool mobile,
83 bool fit_window,
84 const double* optional_scale,
85 const double* optional_offset_x,
86 const double* optional_offset_y);
87 Response ClearDeviceMetricsOverride();
89 Response CanScreencast(bool* result);
91 Response StartScreencast(const std::string* format,
92 const int* quality,
93 const int* max_width,
94 const int* max_height);
95 Response StopScreencast();
96 Response ScreencastFrameAck(int frame_number);
98 Response StartRecordingFrames(int max_frame_count);
99 Response StopRecordingFrames(DevToolsCommandId command_id);
100 Response CancelRecordingFrames();
102 Response HandleJavaScriptDialog(bool accept, const std::string* prompt_text);
104 Response QueryUsageAndQuota(DevToolsCommandId command_id,
105 const std::string& security_origin);
107 Response SetColorPickerEnabled(bool enabled);
109 private:
110 void UpdateTouchEventEmulationState();
111 void UpdateDeviceEmulationState();
113 void NotifyScreencastVisibility(bool visible);
114 void InnerSwapCompositorFrame();
115 void ScreencastFrameCaptured(const cc::CompositorFrameMetadata& metadata,
116 const SkBitmap& bitmap,
117 ReadbackResponse response);
118 void ScreencastFrameEncoded(const cc::CompositorFrameMetadata& metadata,
119 const base::Time& timestamp,
120 const std::string& data);
122 void ScreenshotCaptured(
123 DevToolsCommandId command_id,
124 const unsigned char* png_data,
125 size_t png_size);
127 void OnColorPicked(int r, int g, int b, int a);
128 void OnFramesRecorded(
129 DevToolsCommandId command_id,
130 scoped_refptr<StopRecordingFramesResponse> response_data);
132 bool enabled_;
134 bool touch_emulation_enabled_;
135 std::string touch_emulation_configuration_;
137 bool device_emulation_enabled_;
138 blink::WebDeviceEmulationParams device_emulation_params_;
140 bool screencast_enabled_;
141 std::string screencast_format_;
142 int screencast_quality_;
143 int screencast_max_width_;
144 int screencast_max_height_;
145 int capture_retry_count_;
146 bool has_compositor_frame_metadata_;
147 cc::CompositorFrameMetadata next_compositor_frame_metadata_;
148 cc::CompositorFrameMetadata last_compositor_frame_metadata_;
149 int screencast_frame_sent_;
150 int screencast_frame_acked_;
151 bool processing_screencast_frame_;
153 scoped_ptr<ColorPicker> color_picker_;
154 scoped_ptr<FrameRecorder> frame_recorder_;
156 RenderViewHostImpl* host_;
157 scoped_ptr<Client> client_;
158 ScreencastListener* screencast_listener_;
159 base::WeakPtrFactory<PageHandler> weak_factory_;
161 DISALLOW_COPY_AND_ASSIGN(PageHandler);
164 } // namespace page
165 } // namespace devtools
166 } // namespace content
168 #endif // CONTENT_BROWSER_DEVTOOLS_PROTOCOL_PAGE_HANDLER_H_