// Copyright (c) 2009 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CHROME_RENDERER_DEVTOOLS_AGENT_H_ #define CHROME_RENDERER_DEVTOOLS_AGENT_H_ #include #include "base/basictypes.h" #include "base/ref_counted.h" #include "base/scoped_ptr.h" #include "chrome/common/ipc_channel_proxy.h" #include "chrome/renderer/devtools_messages.h" #include "webkit/glue/webdevtoolsagent_delegate.h" class MessageLoop; class RenderView; class WebDevToolsAgent; // Inspected page end of communication channel between the render process of // the page being inspected and tools UI renderer process. All messages will // go through browser process. On the renderer side of the tools UI there's // a corresponding ToolsClient object. class DevToolsAgent : public IPC::ChannelProxy::MessageFilter, public WebDevToolsAgentDelegate { public: // DevToolsAgent is a field of the RenderView. The view is supposed to remove // this agent from message filter list on IO thread before dying. DevToolsAgent(int routing_id, RenderView* view, MessageLoop* view_loop); virtual ~DevToolsAgent(); // WebDevToolsAgentDelegate implementation virtual void SendMessageToClient(const std::string& raw_msg); // DevToolsAgent is created by RenderView which is supposed to call this // method from its destructor. void RenderViewDestroyed(); private: // Sends message to DevToolsClient. Should be called on the render thread. void Send(const IPC::Message& tools_client_message); // IPC::ChannelProxy::MessageFilter overrides. Called on IO thread. virtual void OnFilterAdded(IPC::Channel* channel); virtual bool OnMessageReceived(const IPC::Message& message); virtual void OnFilterRemoved(); void Attach(); void Detach(); void DispatchRpcMessage(const std::string& raw_msg); void InspectElement(int x, int y); WebDevToolsAgent* GetWebAgent(); // Evaluate javascript URL in the renderer void EvaluateScript(const std::wstring& script); // All these OnXXX methods will be executed in IO thread so that we can // handle debug messages even when v8 is stopped. void OnAttach(); void OnDetach(); void OnRpcMessage(const std::string& raw_msg); void OnDebuggerCommand(const std::string& command); void OnInspectElement(int x, int y); int routing_id_; // View routing id that we can access from IO thread. RenderView* view_; MessageLoop* view_loop_; MessageLoop* io_loop_; DISALLOW_COPY_AND_ASSIGN(DevToolsAgent); }; #endif // CHROME_RENDERER_DEVTOOLS_AGENT_H_