OLD | NEW |
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "config.h" | 5 #include "config.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 | 8 |
9 #include "Document.h" | 9 #include "Document.h" |
10 #include "EventListener.h" | 10 #include "EventListener.h" |
11 #include "InspectorController.h" | 11 #include "InspectorController.h" |
12 #include "Node.h" | 12 #include "Node.h" |
13 #include "Page.h" | 13 #include "Page.h" |
14 #include "PlatformString.h" | 14 #include "PlatformString.h" |
15 #include <wtf/OwnPtr.h> | 15 #include <wtf/OwnPtr.h> |
16 #undef LOG | 16 #undef LOG |
17 | 17 |
18 #include "base/values.h" | 18 #include "base/values.h" |
19 #include "webkit/glue/devtools/dom_agent_impl.h" | 19 #include "webkit/glue/devtools/dom_agent_impl.h" |
20 #include "webkit/glue/devtools/net_agent_impl.h" | 20 #include "webkit/glue/devtools/net_agent_impl.h" |
21 #include "webkit/glue/glue_util.h" | 21 #include "webkit/glue/glue_util.h" |
| 22 #include "webkit/glue/webdatasource.h" |
22 #include "webkit/glue/webdevtoolsagent_delegate.h" | 23 #include "webkit/glue/webdevtoolsagent_delegate.h" |
23 #include "webkit/glue/webdevtoolsagent_impl.h" | 24 #include "webkit/glue/webdevtoolsagent_impl.h" |
| 25 #include "webkit/glue/weburlrequest.h" |
24 #include "webkit/glue/webview_impl.h" | 26 #include "webkit/glue/webview_impl.h" |
25 | 27 |
26 using WebCore::Document; | 28 using WebCore::Document; |
27 using WebCore::InspectorController; | 29 using WebCore::InspectorController; |
28 using WebCore::Node; | 30 using WebCore::Node; |
29 using WebCore::Page; | 31 using WebCore::Page; |
30 using WebCore::String; | 32 using WebCore::String; |
31 | 33 |
32 WebDevToolsAgentImpl::WebDevToolsAgentImpl( | 34 WebDevToolsAgentImpl::WebDevToolsAgentImpl( |
33 WebViewImpl* web_view_impl, | 35 WebViewImpl* web_view_impl, |
34 WebDevToolsAgentDelegate* delegate) | 36 WebDevToolsAgentDelegate* delegate) |
35 : delegate_(delegate), | 37 : delegate_(delegate), |
36 web_view_impl_(web_view_impl), | 38 web_view_impl_(web_view_impl), |
37 document_(NULL) { | 39 document_(NULL), |
| 40 enabled_(false) { |
38 dom_agent_delegate_stub_.reset(new DomAgentDelegateStub(this)); | 41 dom_agent_delegate_stub_.reset(new DomAgentDelegateStub(this)); |
39 net_agent_delegate_stub_.reset(new NetAgentDelegateStub(this)); | 42 net_agent_delegate_stub_.reset(new NetAgentDelegateStub(this)); |
40 tools_agent_delegate_stub_.reset(new ToolsAgentDelegateStub(this)); | 43 tools_agent_delegate_stub_.reset(new ToolsAgentDelegateStub(this)); |
41 } | 44 } |
42 | 45 |
43 WebDevToolsAgentImpl::~WebDevToolsAgentImpl() { | 46 WebDevToolsAgentImpl::~WebDevToolsAgentImpl() { |
44 } | 47 } |
45 | 48 |
46 void WebDevToolsAgentImpl::SetDomAgentEnabled(bool enabled) { | 49 void WebDevToolsAgentImpl::SetEnabled(bool enabled) { |
47 if (enabled && !dom_agent_impl_.get()) { | 50 if (enabled && !enabled_) { |
48 dom_agent_impl_.reset(new DomAgentImpl(dom_agent_delegate_stub_.get())); | 51 dom_agent_impl_.reset(new DomAgentImpl(dom_agent_delegate_stub_.get())); |
49 if (document_) | 52 net_agent_impl_.reset(new NetAgentImpl(net_agent_delegate_stub_.get())); |
| 53 if (document_) { |
50 dom_agent_impl_->SetDocument(document_); | 54 dom_agent_impl_->SetDocument(document_); |
51 } else if (!enabled && dom_agent_impl_.get()) { | 55 net_agent_impl_->SetDocument(document_); |
| 56 } |
| 57 enabled_ = true; |
| 58 } else if (!enabled) { |
52 dom_agent_impl_.reset(NULL); | 59 dom_agent_impl_.reset(NULL); |
| 60 net_agent_impl_.reset(NULL); |
| 61 enabled_ = false; |
53 } | 62 } |
54 } | 63 } |
55 | 64 |
56 void WebDevToolsAgentImpl::SetNetAgentEnabled(bool enabled) { | |
57 if (enabled && !net_agent_impl_.get()) { | |
58 net_agent_impl_.reset(new NetAgentImpl(net_agent_delegate_stub_.get())); | |
59 if (document_) | |
60 net_agent_impl_->SetDocument(document_); | |
61 } else if (!enabled && net_agent_impl_.get()) { | |
62 net_agent_impl_.reset(NULL); | |
63 } | |
64 } | |
65 | |
66 void WebDevToolsAgentImpl::SetMainFrameDocumentReady(bool ready) { | 65 void WebDevToolsAgentImpl::SetMainFrameDocumentReady(bool ready) { |
67 if (ready) { | 66 if (ready) { |
68 Page* page = web_view_impl_->page(); | 67 Page* page = web_view_impl_->page(); |
69 document_ = page->mainFrame()->document(); | 68 document_ = page->mainFrame()->document(); |
70 } else { | 69 } else { |
71 document_ = NULL; | 70 document_ = NULL; |
72 } | 71 } |
73 if (dom_agent_impl_.get()) | 72 if (enabled_) { |
74 dom_agent_impl_->SetDocument(document_); | 73 dom_agent_impl_->SetDocument(document_); |
75 if (net_agent_impl_.get()) | |
76 net_agent_impl_->SetDocument(document_); | 74 net_agent_impl_->SetDocument(document_); |
| 75 } |
| 76 } |
| 77 |
| 78 void WebDevToolsAgentImpl::DidCommitLoadForFrame( |
| 79 WebViewImpl* webview, |
| 80 WebFrame* frame, |
| 81 bool is_new_navigation) { |
| 82 if (!enabled_) { |
| 83 return; |
| 84 } |
| 85 dom_agent_impl_->DiscardBindings(); |
| 86 WebDataSource* ds = frame->GetDataSource(); |
| 87 const WebRequest& request = ds->GetRequest(); |
| 88 GURL url = ds->HasUnreachableURL() ? |
| 89 ds->GetUnreachableURL() : |
| 90 request.GetURL(); |
| 91 tools_agent_delegate_stub_->FrameNavigate( |
| 92 url.possibly_invalid_spec(), |
| 93 webview->GetMainFrame() == frame); |
77 } | 94 } |
78 | 95 |
79 void WebDevToolsAgentImpl::HighlightDOMNode(int node_id) { | 96 void WebDevToolsAgentImpl::HighlightDOMNode(int node_id) { |
80 if (!dom_agent_impl_.get()) | 97 if (!enabled_) |
81 return; | 98 return; |
82 Node* node = dom_agent_impl_->GetNodeForId(node_id); | 99 Node* node = dom_agent_impl_->GetNodeForId(node_id); |
83 if (!node) | 100 if (!node) |
84 return; | 101 return; |
85 Page* page = web_view_impl_->page(); | 102 Page* page = web_view_impl_->page(); |
86 page->inspectorController()->highlight(node); | 103 page->inspectorController()->highlight(node); |
87 } | 104 } |
88 | 105 |
89 void WebDevToolsAgentImpl::HideDOMNodeHighlight() { | 106 void WebDevToolsAgentImpl::HideDOMNodeHighlight() { |
90 Page* page = web_view_impl_->page(); | 107 Page* page = web_view_impl_->page(); |
91 page->inspectorController()->hideHighlight(); | 108 page->inspectorController()->hideHighlight(); |
92 } | 109 } |
93 | 110 |
94 void WebDevToolsAgentImpl::DispatchMessageFromClient( | 111 void WebDevToolsAgentImpl::DispatchMessageFromClient( |
95 const std::string& raw_msg) { | 112 const std::string& raw_msg) { |
96 OwnPtr<ListValue> message( | 113 OwnPtr<ListValue> message( |
97 static_cast<ListValue*>(DevToolsRpc::ParseMessage(raw_msg))); | 114 static_cast<ListValue*>(DevToolsRpc::ParseMessage(raw_msg))); |
98 if (dom_agent_impl_.get() && | 115 if (ToolsAgentDispatch::Dispatch(this, *message.get())) |
99 DomAgentDispatch::Dispatch(dom_agent_impl_.get(), *message.get())) | |
100 return; | 116 return; |
101 if (net_agent_impl_.get() && | 117 |
102 NetAgentDispatch::Dispatch(net_agent_impl_.get(), *message.get())) | 118 if (!enabled_) |
103 return; | 119 return; |
104 ToolsAgentDispatch::Dispatch(this, *message.get()); | 120 if (DomAgentDispatch::Dispatch(dom_agent_impl_.get(), *message.get())) |
| 121 return; |
| 122 if (NetAgentDispatch::Dispatch(net_agent_impl_.get(), *message.get())) |
| 123 return; |
105 } | 124 } |
106 | 125 |
107 void WebDevToolsAgentImpl::InspectElement(int x, int y) { | 126 void WebDevToolsAgentImpl::InspectElement(int x, int y) { |
108 Node* node = web_view_impl_->GetNodeForWindowPos(x, y); | 127 Node* node = web_view_impl_->GetNodeForWindowPos(x, y); |
109 if (!node) | 128 if (!node) |
110 return; | 129 return; |
111 | 130 |
112 SetDomAgentEnabled(true); | 131 SetEnabled(true); |
113 int node_id = dom_agent_impl_->PushNodePathToClient(node); | 132 int node_id = dom_agent_impl_->PushNodePathToClient(node); |
114 tools_agent_delegate_stub_->UpdateFocusedNode(node_id); | 133 tools_agent_delegate_stub_->UpdateFocusedNode(node_id); |
115 } | 134 } |
116 | 135 |
117 void WebDevToolsAgentImpl::SendRpcMessage(const std::string& raw_msg) { | 136 void WebDevToolsAgentImpl::SendRpcMessage(const std::string& raw_msg) { |
118 delegate_->SendMessageToClient(raw_msg); | 137 delegate_->SendMessageToClient(raw_msg); |
119 } | 138 } |
OLD | NEW |