devtools_agent_host_impl.cc revision 2a99a7e74a7f215066514fe81d2bfa6639d9eddd
12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/browser/devtools/devtools_agent_host_impl.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <map> 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/basictypes.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/guid.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/lazy_instance.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/common/devtools_messages.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace content { 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace { 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)typedef std::map<std::string, DevToolsAgentHostImpl*> Instances; 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::LazyInstance<Instances>::Leaky g_instances = LAZY_INSTANCE_INITIALIZER; 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)DevToolsAgentHostImpl::DevToolsAgentHostImpl() 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : close_listener_(NULL), 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) id_(base::GenerateGUID()) { 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) g_instances.Get()[id_] = this; 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)DevToolsAgentHostImpl::~DevToolsAgentHostImpl() { 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) g_instances.Get().erase(g_instances.Get().find(id_)); 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)scoped_refptr<DevToolsAgentHost> DevToolsAgentHost::GetForId( 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& id) { 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (g_instances == NULL) 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return NULL; 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Instances::iterator it = g_instances.Get().find(id); 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (it == g_instances.Get().end()) 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return NULL; 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return it->second; 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void DevToolsAgentHostImpl::Attach() { 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SendMessageToAgent(new DevToolsAgentMsg_Attach(MSG_ROUTING_NONE)); 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NotifyClientAttaching(); 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void DevToolsAgentHostImpl::Reattach(const std::string& saved_agent_state) { 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SendMessageToAgent(new DevToolsAgentMsg_Reattach( 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MSG_ROUTING_NONE, 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) saved_agent_state)); 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NotifyClientAttaching(); 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void DevToolsAgentHostImpl::Detach() { 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SendMessageToAgent(new DevToolsAgentMsg_Detach(MSG_ROUTING_NONE)); 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NotifyClientDetaching(); 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void DevToolsAgentHostImpl::DispatchOnInspectorBackend( 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& message) { 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SendMessageToAgent(new DevToolsAgentMsg_DispatchOnInspectorBackend( 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MSG_ROUTING_NONE, message)); 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void DevToolsAgentHostImpl::InspectElement(int x, int y) { 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SendMessageToAgent(new DevToolsAgentMsg_InspectElement(MSG_ROUTING_NONE, 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) x, y)); 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)std::string DevToolsAgentHostImpl::GetId() { 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return id_; 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)RenderViewHost* DevToolsAgentHostImpl::GetRenderViewHost() { 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return NULL; 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void DevToolsAgentHostImpl::NotifyCloseListener() { 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (close_listener_) { 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<DevToolsAgentHostImpl> protect(this); 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) close_listener_->AgentHostClosing(this); 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) close_listener_ = NULL; 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace content 86