1 // Copyright (c) 2012 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_RENDERER_DEVTOOLS_DEVTOOLS_AGENT_H_ 6 #define CONTENT_RENDERER_DEVTOOLS_DEVTOOLS_AGENT_H_ 7 8 #include <string> 9 #include <vector> 10 11 #include "base/atomicops.h" 12 #include "base/basictypes.h" 13 #include "base/memory/weak_ptr.h" 14 #include "base/time/time.h" 15 #include "content/public/common/console_message_level.h" 16 #include "content/public/renderer/render_view_observer.h" 17 #include "third_party/WebKit/public/web/WebDevToolsAgentClient.h" 18 19 namespace blink { 20 class WebDevToolsAgent; 21 } 22 23 struct GpuTaskInfo; 24 25 namespace content { 26 class RenderViewImpl; 27 28 // DevToolsAgent belongs to the inspectable RenderView and provides Glue's 29 // agents with the communication capabilities. All messages from/to Glue's 30 // agents infrastructure are flowing through this communication agent. 31 // There is a corresponding DevToolsClient object on the client side. 32 class DevToolsAgent : public RenderViewObserver, 33 public base::SupportsWeakPtr<DevToolsAgent>, 34 public blink::WebDevToolsAgentClient { 35 public: 36 explicit DevToolsAgent(RenderViewImpl* render_view); 37 virtual ~DevToolsAgent(); 38 39 // Returns agent instance for its routing id. 40 static DevToolsAgent* FromRoutingId(int routing_id); 41 42 blink::WebDevToolsAgent* GetWebAgent(); 43 44 bool IsAttached(); 45 46 private: 47 // RenderView::Observer implementation. 48 virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE; 49 50 // WebDevToolsAgentClient implementation 51 virtual void sendMessageToInspectorFrontend(const blink::WebString& data); 52 53 virtual int debuggerId() OVERRIDE; 54 virtual void saveAgentRuntimeState(const blink::WebString& state) OVERRIDE; 55 virtual blink::WebDevToolsAgentClient::WebKitClientMessageLoop* 56 createClientMessageLoop() OVERRIDE; 57 virtual void willEnterDebugLoop() OVERRIDE; 58 virtual void didExitDebugLoop() OVERRIDE; 59 virtual void visitAllocatedObjects(AllocatedObjectVisitor* visitor) OVERRIDE; 60 61 typedef void (*TraceEventCallback)( 62 char phase, const unsigned char*, const char* name, unsigned long long id, 63 int numArgs, const char* const* argNames, const unsigned char* argTypes, 64 const unsigned long long* argValues, 65 unsigned char flags, double timestamp); 66 virtual void resetTraceEventCallback() OVERRIDE; 67 virtual void setTraceEventCallback(const blink::WebString& category_filter, 68 TraceEventCallback cb) OVERRIDE; 69 virtual void enableTracing(const blink::WebString& category_filter) OVERRIDE; 70 virtual void disableTracing() OVERRIDE; 71 virtual void startGPUEventsRecording() OVERRIDE; 72 virtual void stopGPUEventsRecording() OVERRIDE; 73 74 virtual void enableDeviceEmulation( 75 const blink::WebDeviceEmulationParams& params) OVERRIDE; 76 virtual void disableDeviceEmulation() OVERRIDE; 77 virtual void setTouchEventEmulationEnabled(bool enabled, 78 bool allow_pinch) OVERRIDE; 79 80 void OnAttach(const std::string& host_id); 81 void OnReattach(const std::string& host_id, 82 const std::string& agent_state); 83 void OnDetach(); 84 void OnDispatchOnInspectorBackend(const std::string& message); 85 void OnInspectElement(const std::string& host_id, int x, int y); 86 void OnAddMessageToConsole(ConsoleMessageLevel level, 87 const std::string& message); 88 void OnGpuTasksChunk(const std::vector<GpuTaskInfo>& tasks); 89 void ContinueProgram(); 90 void OnSetupDevToolsClient(); 91 92 static void TraceEventCallbackWrapper( 93 base::TimeTicks timestamp, 94 char phase, 95 const unsigned char* category_group_enabled, 96 const char* name, 97 unsigned long long id, 98 int num_args, 99 const char* const arg_names[], 100 const unsigned char arg_types[], 101 const unsigned long long arg_values[], 102 unsigned char flags); 103 104 bool is_attached_; 105 bool is_devtools_client_; 106 int32 gpu_route_id_; 107 bool paused_in_mouse_move_; 108 109 static base::subtle::AtomicWord /* TraceEventCallback */ event_callback_; 110 111 DISALLOW_COPY_AND_ASSIGN(DevToolsAgent); 112 }; 113 114 } // namespace content 115 116 #endif // CONTENT_RENDERER_DEVTOOLS_DEVTOOLS_AGENT_H_ 117