Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(87)

Side by Side Diff: webkit/glue/webdevtoolsagent_impl.cc

Issue 54002: Make DevTools client survive 'refresh' of the inspectable tab. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « webkit/glue/webdevtoolsagent_impl.h ('k') | webkit/glue/webframeloaderclient_impl.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 }
OLDNEW
« no previous file with comments | « webkit/glue/webdevtoolsagent_impl.h ('k') | webkit/glue/webframeloaderclient_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698