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

Side by Side Diff: content/browser/debugger/devtools_http_handler_impl.cc

Issue 11361034: DevTools: [remote debugging] emit Inspector.detached protocol message upon connectin termination. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: More tests fixed Created 8 years, 1 month 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
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "content/browser/debugger/devtools_http_handler_impl.h" 5 #include "content/browser/debugger/devtools_http_handler_impl.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
89 // messages sent for DevToolsClient to a DebuggerShell instance. 89 // messages sent for DevToolsClient to a DebuggerShell instance.
90 class DevToolsClientHostImpl : public DevToolsClientHost { 90 class DevToolsClientHostImpl : public DevToolsClientHost {
91 public: 91 public:
92 DevToolsClientHostImpl( 92 DevToolsClientHostImpl(
93 MessageLoop* message_loop, 93 MessageLoop* message_loop,
94 net::HttpServer* server, 94 net::HttpServer* server,
95 int connection_id) 95 int connection_id)
96 : message_loop_(message_loop), 96 : message_loop_(message_loop),
97 server_(server), 97 server_(server),
98 connection_id_(connection_id), 98 connection_id_(connection_id),
99 is_closed_(false) { 99 is_closed_(false),
100 detach_reason_("target_closed") {
100 } 101 }
101 102
102 ~DevToolsClientHostImpl() {} 103 ~DevToolsClientHostImpl() {}
103 104
104 // DevToolsClientHost interface 105 // DevToolsClientHost interface
105 virtual void InspectedContentsClosing() { 106 virtual void InspectedContentsClosing() {
106 if (is_closed_) 107 if (is_closed_)
107 return; 108 return;
108 is_closed_ = true; 109 is_closed_ = true;
110
111 std::string response;
112 DictionaryValue message;
113 message.SetString("method", "Inspector.detached");
114 DictionaryValue* params = new DictionaryValue();
115 message.Set("params", params);
116 params->SetString("reason", detach_reason_);
117 base::JSONWriter::WriteWithOptions(&message,
yurys 2012/11/01 15:37:11 Can you provide a method in WebKit API that would
pfeldman 2012/11/01 16:24:49 We can't delegate it to the dying renderer, but I
pfeldman 2012/11/01 16:54:32 Done.
118 base::JSONWriter::OPTIONS_PRETTY_PRINT,
119 &response);
120 message_loop_->PostTask(
121 FROM_HERE,
122 base::Bind(&net::HttpServer::SendOverWebSocket,
123 server_,
124 connection_id_,
125 response));
126
109 message_loop_->PostTask( 127 message_loop_->PostTask(
110 FROM_HERE, 128 FROM_HERE,
111 base::Bind(&net::HttpServer::Close, server_, connection_id_)); 129 base::Bind(&net::HttpServer::Close, server_, connection_id_));
112 } 130 }
113 131
114 virtual void DispatchOnInspectorFrontend(const std::string& data) { 132 virtual void DispatchOnInspectorFrontend(const std::string& data) {
115 message_loop_->PostTask( 133 message_loop_->PostTask(
116 FROM_HERE, 134 FROM_HERE,
117 base::Bind(&net::HttpServer::SendOverWebSocket, 135 base::Bind(&net::HttpServer::SendOverWebSocket,
118 server_, 136 server_,
119 connection_id_, 137 connection_id_,
120 data)); 138 data));
121 } 139 }
122 140
123 virtual void ContentsReplaced(WebContents* new_contents) { 141 virtual void ContentsReplaced(WebContents* new_contents) {
124 } 142 }
125 143
144 virtual void ReplacedWithAnotherClient() {
145 detach_reason_ = "replaced_with_devtools";
146 }
147
126 private: 148 private:
127 virtual void FrameNavigating(const std::string& url) {} 149 virtual void FrameNavigating(const std::string& url) {}
128 MessageLoop* message_loop_; 150 MessageLoop* message_loop_;
129 net::HttpServer* server_; 151 net::HttpServer* server_;
130 int connection_id_; 152 int connection_id_;
131 bool is_closed_; 153 bool is_closed_;
154 std::string detach_reason_;
132 }; 155 };
133 156
134 } // namespace 157 } // namespace
135 158
136 // static 159 // static
137 int DevToolsHttpHandler::GetFrontendResourceId(const std::string& name) { 160 int DevToolsHttpHandler::GetFrontendResourceId(const std::string& name) {
138 for (size_t i = 0; i < kDevtoolsResourcesSize; ++i) { 161 for (size_t i = 0; i < kDevtoolsResourcesSize; ++i) {
139 if (name == kDevtoolsResources[i].name) 162 if (name == kDevtoolsResources[i].name)
140 return kDevtoolsResources[i].value; 163 return kDevtoolsResources[i].value;
141 } 164 }
(...skipping 570 matching lines...) Expand 10 before | Expand all | Expand 10 after
712 page_info.id.c_str())); 735 page_info.id.c_str()));
713 std::string devtools_frontend_url = GetFrontendURLInternal( 736 std::string devtools_frontend_url = GetFrontendURLInternal(
714 page_info.id.c_str(), 737 page_info.id.c_str(),
715 host); 738 host);
716 dictionary->SetString("devtoolsFrontendUrl", devtools_frontend_url); 739 dictionary->SetString("devtoolsFrontendUrl", devtools_frontend_url);
717 } 740 }
718 return dictionary; 741 return dictionary;
719 } 742 }
720 743
721 } // namespace content 744 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/debugger/devtools_frontend_host.cc ('k') | content/browser/debugger/devtools_manager_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698