| 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 |