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"
21 class RenderViewHostImpl
;
31 typedef DevToolsProtocolClient::Response Response
;
33 class ScreencastListener
{
35 virtual ~ScreencastListener() { }
36 virtual void ScreencastEnabledChanged() = 0;
40 virtual ~PageHandler();
42 void SetRenderViewHost(RenderViewHostImpl
* host
);
43 void SetClient(scoped_ptr
<Client
> client
);
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_
; }
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
,
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
,
81 double device_scale_factor
,
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
,
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
);
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
,
127 void OnColorPicked(int r
, int g
, int b
, int a
);
128 void OnFramesRecorded(
129 DevToolsCommandId command_id
,
130 scoped_refptr
<StopRecordingFramesResponse
> response_data
);
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
);
165 } // namespace devtools
166 } // namespace content
168 #endif // CONTENT_BROWSER_DEVTOOLS_PROTOCOL_PAGE_HANDLER_H_