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);
}
|