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. 4 5 #ifndef CONTENT_BROWSER_DEVTOOLS_RENDERER_OVERRIDES_HANDLER_H_ 6 #define CONTENT_BROWSER_DEVTOOLS_RENDERER_OVERRIDES_HANDLER_H_ 7 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 18 class SkBitmap; 19 20 namespace IPC { 21 class Message; 22 } 23 24 namespace content { 25 26 class DevToolsAgentHost; 27 class DevToolsTracingHandler; 28 29 // Overrides Inspector commands before they are sent to the renderer. 30 // May override the implementation completely, ignore it, or handle 31 // additional browser process implementation details. 32 class CONTENT_EXPORT RendererOverridesHandler 33 : public DevToolsProtocol::Handler { 34 public: 35 explicit RendererOverridesHandler(DevToolsAgentHost* agent); 36 virtual ~RendererOverridesHandler(); 37 38 void OnClientDetached(); 39 void OnSwapCompositorFrame(const cc::CompositorFrameMetadata& frame_metadata); 40 void OnVisibilityChanged(bool visible); 41 42 private: 43 void InnerSwapCompositorFrame(); 44 void ParseCaptureParameters(DevToolsProtocol::Command* command, 45 std::string* format, int* quality, 46 double* scale); 47 base::DictionaryValue* CreateScreenshotResponse( 48 const std::vector<unsigned char>& png_data); 49 50 // DOM domain. 51 scoped_refptr<DevToolsProtocol::Response> 52 GrantPermissionsForSetFileInputFiles( 53 scoped_refptr<DevToolsProtocol::Command> command); 54 55 // Network domain. 56 scoped_refptr<DevToolsProtocol::Response> ClearBrowserCache( 57 scoped_refptr<DevToolsProtocol::Command> command); 58 scoped_refptr<DevToolsProtocol::Response> ClearBrowserCookies( 59 scoped_refptr<DevToolsProtocol::Command> command); 60 61 // Page domain. 62 scoped_refptr<DevToolsProtocol::Response> PageDisable( 63 scoped_refptr<DevToolsProtocol::Command> command); 64 scoped_refptr<DevToolsProtocol::Response> PageHandleJavaScriptDialog( 65 scoped_refptr<DevToolsProtocol::Command> command); 66 scoped_refptr<DevToolsProtocol::Response> PageNavigate( 67 scoped_refptr<DevToolsProtocol::Command> command); 68 scoped_refptr<DevToolsProtocol::Response> PageReload( 69 scoped_refptr<DevToolsProtocol::Command> command); 70 scoped_refptr<DevToolsProtocol::Response> PageGetNavigationHistory( 71 scoped_refptr<DevToolsProtocol::Command> command); 72 scoped_refptr<DevToolsProtocol::Response> PageNavigateToHistoryEntry( 73 scoped_refptr<DevToolsProtocol::Command> command); 74 scoped_refptr<DevToolsProtocol::Response> PageCaptureScreenshot( 75 scoped_refptr<DevToolsProtocol::Command> command); 76 scoped_refptr<DevToolsProtocol::Response> PageCanScreencast( 77 scoped_refptr<DevToolsProtocol::Command> command); 78 scoped_refptr<DevToolsProtocol::Response> PageStartScreencast( 79 scoped_refptr<DevToolsProtocol::Command> command); 80 scoped_refptr<DevToolsProtocol::Response> PageStopScreencast( 81 scoped_refptr<DevToolsProtocol::Command> command); 82 scoped_refptr<DevToolsProtocol::Response> PageQueryUsageAndQuota( 83 scoped_refptr<DevToolsProtocol::Command>); 84 85 void ScreenshotCaptured( 86 scoped_refptr<DevToolsProtocol::Command> command, 87 scoped_refptr<base::RefCountedBytes> png_data); 88 89 void ScreencastFrameCaptured( 90 const std::string& format, 91 int quality, 92 const cc::CompositorFrameMetadata& metadata, 93 bool success, 94 const SkBitmap& bitmap); 95 96 void PageQueryUsageAndQuotaCompleted( 97 scoped_refptr<DevToolsProtocol::Command>, 98 scoped_ptr<base::DictionaryValue> response_data); 99 100 void NotifyScreencastVisibility(bool visible); 101 102 // Input domain. 103 scoped_refptr<DevToolsProtocol::Response> InputDispatchMouseEvent( 104 scoped_refptr<DevToolsProtocol::Command> command); 105 scoped_refptr<DevToolsProtocol::Response> InputDispatchGestureEvent( 106 scoped_refptr<DevToolsProtocol::Command> command); 107 108 DevToolsAgentHost* agent_; 109 scoped_refptr<DevToolsProtocol::Command> screencast_command_; 110 cc::CompositorFrameMetadata last_compositor_frame_metadata_; 111 base::TimeTicks last_frame_time_; 112 int capture_retry_count_; 113 base::WeakPtrFactory<RendererOverridesHandler> weak_factory_; 114 DISALLOW_COPY_AND_ASSIGN(RendererOverridesHandler); 115 }; 116 117 } // namespace content 118 119 #endif // CONTENT_BROWSER_DEVTOOLS_RENDERER_OVERRIDES_HANDLER_H_ 120