summaryrefslogtreecommitdiffstats
path: root/webkit/glue/webdevtoolsagent_impl.cc
blob: a548a59a5a1f1e8b8ef282494caf75bd6b4a2f5b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
// 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.

#include "config.h"

#include <string>

#include "Document.h"
#include "EventListener.h"
#include "InspectorController.h"
#include "Node.h"
#include "Page.h"
#include "PlatformString.h"
#undef LOG

#include "base/values.h"
#include "webkit/glue/devtools/dom_agent_impl.h"
#include "webkit/glue/devtools/net_agent_impl.h"
#include "webkit/glue/glue_util.h"
#include "webkit/glue/webdevtoolsagent_delegate.h"
#include "webkit/glue/webdevtoolsagent_impl.h"
#include "webkit/glue/webview_impl.h"

using WebCore::Document;
using WebCore::InspectorController;
using WebCore::Node;
using WebCore::Page;
using WebCore::String;

WebDevToolsAgentImpl::WebDevToolsAgentImpl(
    WebViewImpl* web_view_impl,
    WebDevToolsAgentDelegate* delegate)
    : delegate_(delegate),
      web_view_impl_(web_view_impl),
      document_(NULL) {
  dom_agent_delegate_stub_.reset(new DomAgentDelegateStub(this));
  net_agent_delegate_stub_.reset(new NetAgentDelegateStub(this));
  tools_agent_delegate_stub_.reset(new ToolsAgentDelegateStub(this));
}

WebDevToolsAgentImpl::~WebDevToolsAgentImpl() {
}

void WebDevToolsAgentImpl::SetDomAgentEnabled(bool enabled) {
  if (enabled && !dom_agent_impl_.get()) {
    dom_agent_impl_.reset(new DomAgentImpl(dom_agent_delegate_stub_.get()));
    if (document_)
      dom_agent_impl_->SetDocument(document_);
  } else if (!enabled && dom_agent_impl_.get()) {
    dom_agent_impl_.reset(NULL);
  }
}

void WebDevToolsAgentImpl::SetNetAgentEnabled(bool enabled) {
  if (enabled && !net_agent_impl_.get()) {
    net_agent_impl_.reset(new NetAgentImpl(net_agent_delegate_stub_.get()));
    if (document_)
      net_agent_impl_->SetDocument(document_);
  } else if (!enabled && net_agent_impl_.get()) {
    net_agent_impl_.reset(NULL);
  }
}

void WebDevToolsAgentImpl::SetMainFrameDocumentReady(bool ready) {
  if (ready) {
    Page* page = web_view_impl_->page();
    document_ = page->mainFrame()->document();
  } else {
    document_ = NULL;
  }
  if (dom_agent_impl_.get())
    dom_agent_impl_->SetDocument(document_);
  if (net_agent_impl_.get())
    net_agent_impl_->SetDocument(document_);
}

void WebDevToolsAgentImpl::HighlightDOMNode(int node_id) {
  if (!dom_agent_impl_.get())
    return;
  Node* node = dom_agent_impl_->GetNodeForId(node_id);
  if (!node)
    return;
  Page* page = web_view_impl_->page();
  page->inspectorController()->highlight(node);
}

void WebDevToolsAgentImpl::HideDOMNodeHighlight() {
  Page* page = web_view_impl_->page();
  page->inspectorController()->hideHighlight();
}

void WebDevToolsAgentImpl::Inspect(Node* node) {
  if (!dom_agent_impl_.get())
    return;

  int node_id = dom_agent_impl_->GetPathToNode(node);
  tools_agent_delegate_stub_->UpdateFocusedNode(node_id);
}

void WebDevToolsAgentImpl::DispatchMessageFromClient(
    const std::string& raw_msg) {
  if (dom_agent_impl_.get() &&
      dom_agent_dispatch_.Dispatch(dom_agent_impl_.get(), raw_msg))
    return;
  if (net_agent_impl_.get() &&
      net_agent_dispatch_.Dispatch(net_agent_impl_.get(), raw_msg))
    return;
  tools_agent_dispatch_.Dispatch(this, raw_msg);
}

void WebDevToolsAgentImpl::SendRpcMessage(const std::string& raw_msg) {
  delegate_->SendMessageToClient(raw_msg);
}