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