+void NodeDebugger::CloseSession() {
+ accepted_socket_.reset();
+}
+
+void NodeDebugger::OnMessage(const std::string& message) {
+ if (message.find("\"type\":\"request\",\"command\":\"disconnect\"}") !=
+ std::string::npos)
+ CloseSession();
+
+ base::string16 message16 = base::UTF8ToUTF16(message);
+ v8::Debug::SendCommand(isolate_, message16.data(), message16.size());
+
+ content::BrowserThread::PostTask(
+ content::BrowserThread::UI, FROM_HERE,
+ base::Bind(&v8::Debug::ProcessDebugMessages));
+}
+
+void NodeDebugger::SendMessage(const std::string& message) {
+ if (accepted_socket_) {
+ std::string header = base::StringPrintf("Content-Length: %d\r\n\r\n",
+ static_cast<int>(message.size()));
+ accepted_socket_->Send(header);
+ accepted_socket_->Send(message);
+ }
+}
+
+// static
+void NodeDebugger::DebugMessageHandler(const v8::Debug::Message& message) {
+ NodeDebugger* self = static_cast<NodeDebugger*>(
+ message.GetIsolate()->GetData(kIsolateSlot));
+
+ if (self) {
+ std::string message8(*v8::String::Utf8Value(message.GetJSON()));
+ self->SendMessage(message8);
+ }
+}
+