1 // Copyright (c) 2013 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_RENDERER_OVERRIDES_HANDLER_H_
6 #define CONTENT_BROWSER_DEVTOOLS_RENDERER_OVERRIDES_HANDLER_H_
8 #include "base/basictypes.h"
9 #include "base/compiler_specific.h"
10 #include "base/memory/ref_counted_memory.h"
11 #include "base/memory/scoped_ptr.h"
12 #include "base/memory/weak_ptr.h"
13 #include "base/time/time.h"
14 #include "cc/output/compositor_frame_metadata.h"
15 #include "content/browser/devtools/devtools_protocol.h"
16 #include "content/common/content_export.h"
17 #include "content/public/browser/render_widget_host.h"
18 #include "third_party/skia/include/core/SkBitmap.h"
32 class DevToolsTracingHandler
;
33 class RenderViewHostImpl
;
35 // Overrides Inspector commands before they are sent to the renderer.
36 // May override the implementation completely, ignore it, or handle
37 // additional browser process implementation details.
38 class CONTENT_EXPORT RendererOverridesHandler
39 : public DevToolsProtocol::Handler
{
41 RendererOverridesHandler();
42 virtual ~RendererOverridesHandler();
44 void OnClientDetached();
45 void OnSwapCompositorFrame(const cc::CompositorFrameMetadata
& frame_metadata
);
46 void OnVisibilityChanged(bool visible
);
47 void SetRenderViewHost(RenderViewHostImpl
* host
);
48 void ClearRenderViewHost();
49 void DidAttachInterstitialPage();
50 void DidDetachInterstitialPage();
53 void InnerSwapCompositorFrame();
56 scoped_refptr
<DevToolsProtocol::Response
>
57 GrantPermissionsForSetFileInputFiles(
58 scoped_refptr
<DevToolsProtocol::Command
> command
);
61 scoped_refptr
<DevToolsProtocol::Response
> CanEmulateNetworkConditions(
62 scoped_refptr
<DevToolsProtocol::Command
> command
);
63 scoped_refptr
<DevToolsProtocol::Response
> ClearBrowserCache(
64 scoped_refptr
<DevToolsProtocol::Command
> command
);
65 scoped_refptr
<DevToolsProtocol::Response
> ClearBrowserCookies(
66 scoped_refptr
<DevToolsProtocol::Command
> command
);
69 scoped_refptr
<DevToolsProtocol::Response
> PageEnable(
70 scoped_refptr
<DevToolsProtocol::Command
> command
);
71 scoped_refptr
<DevToolsProtocol::Response
> PageDisable(
72 scoped_refptr
<DevToolsProtocol::Command
> command
);
73 scoped_refptr
<DevToolsProtocol::Response
> PageHandleJavaScriptDialog(
74 scoped_refptr
<DevToolsProtocol::Command
> command
);
75 scoped_refptr
<DevToolsProtocol::Response
> PageNavigate(
76 scoped_refptr
<DevToolsProtocol::Command
> command
);
77 scoped_refptr
<DevToolsProtocol::Response
> PageReload(
78 scoped_refptr
<DevToolsProtocol::Command
> command
);
79 scoped_refptr
<DevToolsProtocol::Response
> PageGetNavigationHistory(
80 scoped_refptr
<DevToolsProtocol::Command
> command
);
81 scoped_refptr
<DevToolsProtocol::Response
> PageNavigateToHistoryEntry(
82 scoped_refptr
<DevToolsProtocol::Command
> command
);
83 scoped_refptr
<DevToolsProtocol::Response
> PageSetTouchEmulationEnabled(
84 scoped_refptr
<DevToolsProtocol::Command
> command
);
85 scoped_refptr
<DevToolsProtocol::Response
> PageCaptureScreenshot(
86 scoped_refptr
<DevToolsProtocol::Command
> command
);
87 scoped_refptr
<DevToolsProtocol::Response
> PageCanEmulate(
88 scoped_refptr
<DevToolsProtocol::Command
> command
);
89 scoped_refptr
<DevToolsProtocol::Response
> PageCanScreencast(
90 scoped_refptr
<DevToolsProtocol::Command
> command
);
91 scoped_refptr
<DevToolsProtocol::Response
> PageStartScreencast(
92 scoped_refptr
<DevToolsProtocol::Command
> command
);
93 scoped_refptr
<DevToolsProtocol::Response
> PageStopScreencast(
94 scoped_refptr
<DevToolsProtocol::Command
> command
);
95 scoped_refptr
<DevToolsProtocol::Response
> PageQueryUsageAndQuota(
96 scoped_refptr
<DevToolsProtocol::Command
>);
97 scoped_refptr
<DevToolsProtocol::Response
> PageSetColorPickerEnabled(
98 scoped_refptr
<DevToolsProtocol::Command
>);
100 void ScreenshotCaptured(
101 scoped_refptr
<DevToolsProtocol::Command
> command
,
102 const unsigned char* png_data
,
105 void ScreencastFrameCaptured(
106 const std::string
& format
,
108 const cc::CompositorFrameMetadata
& metadata
,
110 const SkBitmap
& bitmap
);
112 void PageQueryUsageAndQuotaCompleted(
113 scoped_refptr
<DevToolsProtocol::Command
>,
114 scoped_ptr
<base::DictionaryValue
> response_data
);
116 void NotifyScreencastVisibility(bool visible
);
117 void SetColorPickerEnabled(bool enabled
);
118 void UpdateColorPickerFrame();
119 void ResetColorPickerFrame();
120 void ColorPickerFrameUpdated(bool succeeded
, const SkBitmap
& bitmap
);
121 bool HandleMouseEvent(const blink::WebMouseEvent
& event
);
122 void UpdateColorPickerCursor();
125 scoped_refptr
<DevToolsProtocol::Response
> InputEmulateTouchFromMouseEvent(
126 scoped_refptr
<DevToolsProtocol::Command
> command
);
128 void UpdateTouchEventEmulationState();
130 RenderViewHostImpl
* host_
;
131 bool page_domain_enabled_
;
132 scoped_refptr
<DevToolsProtocol::Command
> screencast_command_
;
133 bool has_last_compositor_frame_metadata_
;
134 cc::CompositorFrameMetadata last_compositor_frame_metadata_
;
135 base::TimeTicks last_frame_time_
;
136 int capture_retry_count_
;
137 bool touch_emulation_enabled_
;
138 bool color_picker_enabled_
;
139 SkBitmap color_picker_frame_
;
142 RenderWidgetHost::MouseEventCallback mouse_event_callback_
;
143 base::WeakPtrFactory
<RendererOverridesHandler
> weak_factory_
;
144 DISALLOW_COPY_AND_ASSIGN(RendererOverridesHandler
);
147 } // namespace content
149 #endif // CONTENT_BROWSER_DEVTOOLS_RENDERER_OVERRIDES_HANDLER_H_