| 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 "Frame.h" | 7 #include "Frame.h" |
| 8 #include "PageGroupLoadDeferrer.h" | 8 #include "PageGroupLoadDeferrer.h" |
| 9 #include "V8Proxy.h" | 9 #include "V8Proxy.h" |
| 10 #include <wtf/HashSet.h> | 10 #include <wtf/HashSet.h> |
| (...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 135 // Note that we do not empty handlers while in dispatch - we schedule | 135 // Note that we do not empty handlers while in dispatch - we schedule |
| 136 // continue and do removal once we are out of the dispatch. Also there is | 136 // continue and do removal once we are out of the dispatch. Also there is |
| 137 // no need to send continue command in this case since removing message | 137 // no need to send continue command in this case since removing message |
| 138 // handler will cause debugger unload and all breakpoints will be cleared. | 138 // handler will cause debugger unload and all breakpoints will be cleared. |
| 139 if (!in_host_dispatch_handler_) { | 139 if (!in_host_dispatch_handler_) { |
| 140 v8::Debug::SetMessageHandler2(NULL); | 140 v8::Debug::SetMessageHandler2(NULL); |
| 141 v8::Debug::SetHostDispatchHandler(NULL); | 141 v8::Debug::SetHostDispatchHandler(NULL); |
| 142 } | 142 } |
| 143 } else { | 143 } else { |
| 144 // Remove all breakpoints set by the agent. | 144 // Remove all breakpoints set by the agent. |
| 145 std::wstring clear_breakpoint_group_cmd(StringPrintf( | 145 String clear_breakpoint_group_cmd = String::format( |
| 146 L"{\"seq\":1,\"type\":\"request\",\"command\":\"clearbreakpointgroup\"," | 146 "{\"seq\":1,\"type\":\"request\",\"command\":\"clearbreakpointgroup\"," |
| 147 L"\"arguments\":{\"groupId\":%d}}", | 147 "\"arguments\":{\"groupId\":%d}}", |
| 148 host_id)); | 148 host_id); |
| 149 SendCommandToV8(WideToUTF16(clear_breakpoint_group_cmd), | 149 SendCommandToV8(clear_breakpoint_group_cmd, new CallerIdWrapper()); |
| 150 new CallerIdWrapper()); | |
| 151 | 150 |
| 152 if (is_on_breakpoint) { | 151 if (is_on_breakpoint) { |
| 153 // Force continue if detach happened in nessted message loop while | 152 // Force continue if detach happened in nessted message loop while |
| 154 // debugger was paused on a breakpoint(as long as there are other | 153 // debugger was paused on a breakpoint(as long as there are other |
| 155 // attached agents v8 will wait for explicit'continue' message). | 154 // attached agents v8 will wait for explicit'continue' message). |
| 156 SendContinueCommandToV8(); | 155 SendContinueCommandToV8(); |
| 157 } | 156 } |
| 158 } | 157 } |
| 159 } | 158 } |
| 160 | 159 |
| 161 // static | 160 // static |
| 162 void DebuggerAgentManager::DebugBreak(DebuggerAgentImpl* debugger_agent) { | 161 void DebuggerAgentManager::DebugBreak(DebuggerAgentImpl* debugger_agent) { |
| 163 #if USE(V8) | 162 #if USE(V8) |
| 164 DCHECK(DebuggerAgentForHostId(debugger_agent->webdevtools_agent()->host_id()) | 163 DCHECK(DebuggerAgentForHostId(debugger_agent->webdevtools_agent()->host_id()) |
| 165 == debugger_agent); | 164 == debugger_agent); |
| 166 if (in_utility_context_) { | 165 if (in_utility_context_) { |
| 167 debug_break_delayed_ = true; | 166 debug_break_delayed_ = true; |
| 168 } else { | 167 } else { |
| 169 v8::Debug::DebugBreak(); | 168 v8::Debug::DebugBreak(); |
| 170 } | 169 } |
| 171 #endif | 170 #endif |
| 172 } | 171 } |
| 173 | 172 |
| 174 // static | 173 // static |
| 175 void DebuggerAgentManager::OnV8DebugMessage(const v8::Debug::Message& message) { | 174 void DebuggerAgentManager::OnV8DebugMessage(const v8::Debug::Message& message) { |
| 176 v8::HandleScope scope; | 175 v8::HandleScope scope; |
| 177 v8::String::Utf8Value value(message.GetJSON()); | 176 v8::String::Value value(message.GetJSON()); |
| 178 std::string out(*value, value.length()); | 177 String out(reinterpret_cast<const UChar*>(*value), value.length()); |
| 179 | 178 |
| 180 // If caller_data is not NULL the message is a response to a debugger command. | 179 // If caller_data is not NULL the message is a response to a debugger command. |
| 181 if (v8::Debug::ClientData* caller_data = message.GetClientData()) { | 180 if (v8::Debug::ClientData* caller_data = message.GetClientData()) { |
| 182 CallerIdWrapper* wrapper = static_cast<CallerIdWrapper*>(caller_data); | 181 CallerIdWrapper* wrapper = static_cast<CallerIdWrapper*>(caller_data); |
| 183 if (wrapper->caller_is_mananager()) { | 182 if (wrapper->caller_is_mananager()) { |
| 184 // Just ignore messages sent by this manager. | 183 // Just ignore messages sent by this manager. |
| 185 return; | 184 return; |
| 186 } | 185 } |
| 187 DebuggerAgentImpl* debugger_agent = | 186 DebuggerAgentImpl* debugger_agent = |
| 188 DebuggerAgentForHostId(wrapper->caller_id()); | 187 DebuggerAgentForHostId(wrapper->caller_id()); |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 232 | 231 |
| 233 if (!message.WillStartRunning()) { | 232 if (!message.WillStartRunning()) { |
| 234 // Autocontinue execution on break and exception events if there is no | 233 // Autocontinue execution on break and exception events if there is no |
| 235 // handler. | 234 // handler. |
| 236 SendContinueCommandToV8(); | 235 SendContinueCommandToV8(); |
| 237 } | 236 } |
| 238 } | 237 } |
| 239 | 238 |
| 240 // static | 239 // static |
| 241 void DebuggerAgentManager::ExecuteDebuggerCommand( | 240 void DebuggerAgentManager::ExecuteDebuggerCommand( |
| 242 const std::string& command, | 241 const String& command, |
| 243 int caller_id) { | 242 int caller_id) { |
| 244 SendCommandToV8(UTF8ToUTF16(command), new CallerIdWrapper(caller_id)); | 243 SendCommandToV8(command, new CallerIdWrapper(caller_id)); |
| 245 } | 244 } |
| 246 | 245 |
| 247 // static | 246 // static |
| 248 void DebuggerAgentManager::SetMessageLoopDispatchHandler( | 247 void DebuggerAgentManager::SetMessageLoopDispatchHandler( |
| 249 WebDevToolsAgent::MessageLoopDispatchHandler handler) { | 248 WebDevToolsAgent::MessageLoopDispatchHandler handler) { |
| 250 message_loop_dispatch_handler_ = handler; | 249 message_loop_dispatch_handler_ = handler; |
| 251 } | 250 } |
| 252 | 251 |
| 253 // static | 252 // static |
| 254 void DebuggerAgentManager::SetHostId(WebFrameImpl* webframe, int host_id) { | 253 void DebuggerAgentManager::SetHostId(WebFrameImpl* webframe, int host_id) { |
| (...skipping 13 matching lines...) Expand all Loading... |
| 268 } | 267 } |
| 269 | 268 |
| 270 // static | 269 // static |
| 271 void DebuggerAgentManager::OnNavigate() { | 270 void DebuggerAgentManager::OnNavigate() { |
| 272 if (in_host_dispatch_handler_) { | 271 if (in_host_dispatch_handler_) { |
| 273 DebuggerAgentManager::SendContinueCommandToV8(); | 272 DebuggerAgentManager::SendContinueCommandToV8(); |
| 274 } | 273 } |
| 275 } | 274 } |
| 276 | 275 |
| 277 // static | 276 // static |
| 278 void DebuggerAgentManager::SendCommandToV8(const string16& cmd, | 277 void DebuggerAgentManager::SendCommandToV8(const String& cmd, |
| 279 v8::Debug::ClientData* data) { | 278 v8::Debug::ClientData* data) { |
| 280 #if USE(V8) | 279 #if USE(V8) |
| 281 v8::Debug::SendCommand(reinterpret_cast<const uint16_t*>(cmd.data()), | 280 v8::Debug::SendCommand(reinterpret_cast<const uint16_t*>(cmd.characters()), |
| 282 cmd.length(), | 281 cmd.length(), |
| 283 data); | 282 data); |
| 284 #endif | 283 #endif |
| 285 } | 284 } |
| 286 | 285 |
| 287 void DebuggerAgentManager::SendContinueCommandToV8() { | 286 void DebuggerAgentManager::SendContinueCommandToV8() { |
| 288 std::wstring continue_cmd( | 287 String continue_cmd( |
| 289 L"{\"seq\":1,\"type\":\"request\",\"command\":\"continue\"}"); | 288 "{\"seq\":1,\"type\":\"request\",\"command\":\"continue\"}"); |
| 290 SendCommandToV8(WideToUTF16(continue_cmd), new CallerIdWrapper()); | 289 SendCommandToV8(continue_cmd, new CallerIdWrapper()); |
| 291 } | 290 } |
| 292 | 291 |
| 293 // static | 292 // static |
| 294 DebuggerAgentImpl* DebuggerAgentManager::FindAgentForCurrentV8Context() { | 293 DebuggerAgentImpl* DebuggerAgentManager::FindAgentForCurrentV8Context() { |
| 295 if (!attached_agents_map_) { | 294 if (!attached_agents_map_) { |
| 296 return NULL; | 295 return NULL; |
| 297 } | 296 } |
| 298 DCHECK(!attached_agents_map_->isEmpty()); | 297 DCHECK(!attached_agents_map_->isEmpty()); |
| 299 | 298 |
| 300 WebCore::Frame* frame = WebCore::V8Proxy::retrieveFrameForEnteredContext(); | 299 WebCore::Frame* frame = WebCore::V8Proxy::retrieveFrameForEnteredContext(); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 311 return NULL; | 310 return NULL; |
| 312 } | 311 } |
| 313 | 312 |
| 314 // static | 313 // static |
| 315 DebuggerAgentImpl* DebuggerAgentManager::DebuggerAgentForHostId(int host_id) { | 314 DebuggerAgentImpl* DebuggerAgentManager::DebuggerAgentForHostId(int host_id) { |
| 316 if (!attached_agents_map_) { | 315 if (!attached_agents_map_) { |
| 317 return NULL; | 316 return NULL; |
| 318 } | 317 } |
| 319 return attached_agents_map_->get(host_id); | 318 return attached_agents_map_->get(host_id); |
| 320 } | 319 } |
| OLD | NEW |