| OLD | NEW |
| 1 // Copyright 2016 the V8 project authors. All rights reserved. | 1 // Copyright 2016 the V8 project 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 "src/inspector/v8-inspector-session-impl.h" | 5 #include "src/inspector/v8-inspector-session-impl.h" |
| 6 | 6 |
| 7 #include "src/inspector/injected-script.h" | 7 #include "src/inspector/injected-script.h" |
| 8 #include "src/inspector/inspected-context.h" | 8 #include "src/inspector/inspected-context.h" |
| 9 #include "src/inspector/protocol/Protocol.h" | 9 #include "src/inspector/protocol/Protocol.h" |
| 10 #include "src/inspector/remote-object-id.h" | 10 #include "src/inspector/remote-object-id.h" |
| (...skipping 22 matching lines...) Expand all Loading... |
| 33 method, protocol::HeapProfiler::Metainfo::commandPrefix) || | 33 method, protocol::HeapProfiler::Metainfo::commandPrefix) || |
| 34 stringViewStartsWith(method, | 34 stringViewStartsWith(method, |
| 35 protocol::Console::Metainfo::commandPrefix) || | 35 protocol::Console::Metainfo::commandPrefix) || |
| 36 stringViewStartsWith(method, | 36 stringViewStartsWith(method, |
| 37 protocol::Schema::Metainfo::commandPrefix); | 37 protocol::Schema::Metainfo::commandPrefix); |
| 38 } | 38 } |
| 39 | 39 |
| 40 std::unique_ptr<V8InspectorSessionImpl> V8InspectorSessionImpl::create( | 40 std::unique_ptr<V8InspectorSessionImpl> V8InspectorSessionImpl::create( |
| 41 V8InspectorImpl* inspector, int contextGroupId, | 41 V8InspectorImpl* inspector, int contextGroupId, |
| 42 V8Inspector::Channel* channel, const StringView& state) { | 42 V8Inspector::Channel* channel, const StringView& state) { |
| 43 return wrapUnique( | 43 return std::unique_ptr<V8InspectorSessionImpl>( |
| 44 new V8InspectorSessionImpl(inspector, contextGroupId, channel, state)); | 44 new V8InspectorSessionImpl(inspector, contextGroupId, channel, state)); |
| 45 } | 45 } |
| 46 | 46 |
| 47 V8InspectorSessionImpl::V8InspectorSessionImpl(V8InspectorImpl* inspector, | 47 V8InspectorSessionImpl::V8InspectorSessionImpl(V8InspectorImpl* inspector, |
| 48 int contextGroupId, | 48 int contextGroupId, |
| 49 V8Inspector::Channel* channel, | 49 V8Inspector::Channel* channel, |
| 50 const StringView& savedState) | 50 const StringView& savedState) |
| 51 : m_contextGroupId(contextGroupId), | 51 : m_contextGroupId(contextGroupId), |
| 52 m_inspector(inspector), | 52 m_inspector(inspector), |
| 53 m_channel(channel), | 53 m_channel(channel), |
| 54 m_customObjectFormatterEnabled(false), | 54 m_customObjectFormatterEnabled(false), |
| 55 m_dispatcher(this), | 55 m_dispatcher(this), |
| 56 m_state(nullptr), | 56 m_state(nullptr), |
| 57 m_runtimeAgent(nullptr), | 57 m_runtimeAgent(nullptr), |
| 58 m_debuggerAgent(nullptr), | 58 m_debuggerAgent(nullptr), |
| 59 m_heapProfilerAgent(nullptr), | 59 m_heapProfilerAgent(nullptr), |
| 60 m_profilerAgent(nullptr), | 60 m_profilerAgent(nullptr), |
| 61 m_consoleAgent(nullptr), | 61 m_consoleAgent(nullptr), |
| 62 m_schemaAgent(nullptr) { | 62 m_schemaAgent(nullptr) { |
| 63 if (savedState.length()) { | 63 if (savedState.length()) { |
| 64 std::unique_ptr<protocol::Value> state = | 64 std::unique_ptr<protocol::Value> state = |
| 65 protocol::parseJSON(toString16(savedState)); | 65 protocol::StringUtil::parseJSON(toString16(savedState)); |
| 66 if (state) m_state = protocol::DictionaryValue::cast(std::move(state)); | 66 if (state) m_state = protocol::DictionaryValue::cast(std::move(state)); |
| 67 if (!m_state) m_state = protocol::DictionaryValue::create(); | 67 if (!m_state) m_state = protocol::DictionaryValue::create(); |
| 68 } else { | 68 } else { |
| 69 m_state = protocol::DictionaryValue::create(); | 69 m_state = protocol::DictionaryValue::create(); |
| 70 } | 70 } |
| 71 | 71 |
| 72 m_runtimeAgent = wrapUnique(new V8RuntimeAgentImpl( | 72 m_runtimeAgent.reset(new V8RuntimeAgentImpl( |
| 73 this, this, agentState(protocol::Runtime::Metainfo::domainName))); | 73 this, this, agentState(protocol::Runtime::Metainfo::domainName))); |
| 74 protocol::Runtime::Dispatcher::wire(&m_dispatcher, m_runtimeAgent.get()); | 74 protocol::Runtime::Dispatcher::wire(&m_dispatcher, m_runtimeAgent.get()); |
| 75 | 75 |
| 76 m_debuggerAgent = wrapUnique(new V8DebuggerAgentImpl( | 76 m_debuggerAgent.reset(new V8DebuggerAgentImpl( |
| 77 this, this, agentState(protocol::Debugger::Metainfo::domainName))); | 77 this, this, agentState(protocol::Debugger::Metainfo::domainName))); |
| 78 protocol::Debugger::Dispatcher::wire(&m_dispatcher, m_debuggerAgent.get()); | 78 protocol::Debugger::Dispatcher::wire(&m_dispatcher, m_debuggerAgent.get()); |
| 79 | 79 |
| 80 m_profilerAgent = wrapUnique(new V8ProfilerAgentImpl( | 80 m_profilerAgent.reset(new V8ProfilerAgentImpl( |
| 81 this, this, agentState(protocol::Profiler::Metainfo::domainName))); | 81 this, this, agentState(protocol::Profiler::Metainfo::domainName))); |
| 82 protocol::Profiler::Dispatcher::wire(&m_dispatcher, m_profilerAgent.get()); | 82 protocol::Profiler::Dispatcher::wire(&m_dispatcher, m_profilerAgent.get()); |
| 83 | 83 |
| 84 m_heapProfilerAgent = wrapUnique(new V8HeapProfilerAgentImpl( | 84 m_heapProfilerAgent.reset(new V8HeapProfilerAgentImpl( |
| 85 this, this, agentState(protocol::HeapProfiler::Metainfo::domainName))); | 85 this, this, agentState(protocol::HeapProfiler::Metainfo::domainName))); |
| 86 protocol::HeapProfiler::Dispatcher::wire(&m_dispatcher, | 86 protocol::HeapProfiler::Dispatcher::wire(&m_dispatcher, |
| 87 m_heapProfilerAgent.get()); | 87 m_heapProfilerAgent.get()); |
| 88 | 88 |
| 89 m_consoleAgent = wrapUnique(new V8ConsoleAgentImpl( | 89 m_consoleAgent.reset(new V8ConsoleAgentImpl( |
| 90 this, this, agentState(protocol::Console::Metainfo::domainName))); | 90 this, this, agentState(protocol::Console::Metainfo::domainName))); |
| 91 protocol::Console::Dispatcher::wire(&m_dispatcher, m_consoleAgent.get()); | 91 protocol::Console::Dispatcher::wire(&m_dispatcher, m_consoleAgent.get()); |
| 92 | 92 |
| 93 m_schemaAgent = wrapUnique(new V8SchemaAgentImpl( | 93 m_schemaAgent.reset(new V8SchemaAgentImpl( |
| 94 this, this, agentState(protocol::Schema::Metainfo::domainName))); | 94 this, this, agentState(protocol::Schema::Metainfo::domainName))); |
| 95 protocol::Schema::Dispatcher::wire(&m_dispatcher, m_schemaAgent.get()); | 95 protocol::Schema::Dispatcher::wire(&m_dispatcher, m_schemaAgent.get()); |
| 96 | 96 |
| 97 if (savedState.length()) { | 97 if (savedState.length()) { |
| 98 m_runtimeAgent->restore(); | 98 m_runtimeAgent->restore(); |
| 99 m_debuggerAgent->restore(); | 99 m_debuggerAgent->restore(); |
| 100 m_heapProfilerAgent->restore(); | 100 m_heapProfilerAgent->restore(); |
| 101 m_profilerAgent->restore(); | 101 m_profilerAgent->restore(); |
| 102 m_consoleAgent->restore(); | 102 m_consoleAgent->restore(); |
| 103 } | 103 } |
| (...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 298 void V8InspectorSessionImpl::reportAllContexts(V8RuntimeAgentImpl* agent) { | 298 void V8InspectorSessionImpl::reportAllContexts(V8RuntimeAgentImpl* agent) { |
| 299 const V8InspectorImpl::ContextByIdMap* contexts = | 299 const V8InspectorImpl::ContextByIdMap* contexts = |
| 300 m_inspector->contextGroup(m_contextGroupId); | 300 m_inspector->contextGroup(m_contextGroupId); |
| 301 if (!contexts) return; | 301 if (!contexts) return; |
| 302 for (auto& idContext : *contexts) | 302 for (auto& idContext : *contexts) |
| 303 agent->reportExecutionContextCreated(idContext.second.get()); | 303 agent->reportExecutionContextCreated(idContext.second.get()); |
| 304 } | 304 } |
| 305 | 305 |
| 306 void V8InspectorSessionImpl::dispatchProtocolMessage( | 306 void V8InspectorSessionImpl::dispatchProtocolMessage( |
| 307 const StringView& message) { | 307 const StringView& message) { |
| 308 m_dispatcher.dispatch(protocol::parseJSON(message)); | 308 m_dispatcher.dispatch(protocol::StringUtil::parseJSON(message)); |
| 309 } | 309 } |
| 310 | 310 |
| 311 std::unique_ptr<StringBuffer> V8InspectorSessionImpl::stateJSON() { | 311 std::unique_ptr<StringBuffer> V8InspectorSessionImpl::stateJSON() { |
| 312 String16 json = m_state->toJSONString(); | 312 String16 json = m_state->toJSONString(); |
| 313 return StringBufferImpl::adopt(json); | 313 return StringBufferImpl::adopt(json); |
| 314 } | 314 } |
| 315 | 315 |
| 316 std::vector<std::unique_ptr<protocol::Schema::API::Domain>> | 316 std::vector<std::unique_ptr<protocol::Schema::API::Domain>> |
| 317 V8InspectorSessionImpl::supportedDomains() { | 317 V8InspectorSessionImpl::supportedDomains() { |
| 318 std::vector<std::unique_ptr<protocol::Schema::Domain>> domains = | 318 std::vector<std::unique_ptr<protocol::Schema::Domain>> domains = |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 359 V8InspectorSession::Inspectable* V8InspectorSessionImpl::inspectedObject( | 359 V8InspectorSession::Inspectable* V8InspectorSessionImpl::inspectedObject( |
| 360 unsigned num) { | 360 unsigned num) { |
| 361 if (num >= m_inspectedObjects.size()) return nullptr; | 361 if (num >= m_inspectedObjects.size()) return nullptr; |
| 362 return m_inspectedObjects[num].get(); | 362 return m_inspectedObjects[num].get(); |
| 363 } | 363 } |
| 364 | 364 |
| 365 void V8InspectorSessionImpl::schedulePauseOnNextStatement( | 365 void V8InspectorSessionImpl::schedulePauseOnNextStatement( |
| 366 const StringView& breakReason, const StringView& breakDetails) { | 366 const StringView& breakReason, const StringView& breakDetails) { |
| 367 m_debuggerAgent->schedulePauseOnNextStatement( | 367 m_debuggerAgent->schedulePauseOnNextStatement( |
| 368 toString16(breakReason), | 368 toString16(breakReason), |
| 369 protocol::DictionaryValue::cast(protocol::parseJSON(breakDetails))); | 369 protocol::DictionaryValue::cast( |
| 370 protocol::StringUtil::parseJSON(breakDetails))); |
| 370 } | 371 } |
| 371 | 372 |
| 372 void V8InspectorSessionImpl::cancelPauseOnNextStatement() { | 373 void V8InspectorSessionImpl::cancelPauseOnNextStatement() { |
| 373 m_debuggerAgent->cancelPauseOnNextStatement(); | 374 m_debuggerAgent->cancelPauseOnNextStatement(); |
| 374 } | 375 } |
| 375 | 376 |
| 376 void V8InspectorSessionImpl::breakProgram(const StringView& breakReason, | 377 void V8InspectorSessionImpl::breakProgram(const StringView& breakReason, |
| 377 const StringView& breakDetails) { | 378 const StringView& breakDetails) { |
| 378 m_debuggerAgent->breakProgram( | 379 m_debuggerAgent->breakProgram( |
| 379 toString16(breakReason), | 380 toString16(breakReason), |
| 380 protocol::DictionaryValue::cast(protocol::parseJSON(breakDetails))); | 381 protocol::DictionaryValue::cast( |
| 382 protocol::StringUtil::parseJSON(breakDetails))); |
| 381 } | 383 } |
| 382 | 384 |
| 383 void V8InspectorSessionImpl::setSkipAllPauses(bool skip) { | 385 void V8InspectorSessionImpl::setSkipAllPauses(bool skip) { |
| 384 m_debuggerAgent->setSkipAllPauses(skip); | 386 m_debuggerAgent->setSkipAllPauses(skip); |
| 385 } | 387 } |
| 386 | 388 |
| 387 void V8InspectorSessionImpl::resume() { m_debuggerAgent->resume(); } | 389 void V8InspectorSessionImpl::resume() { m_debuggerAgent->resume(); } |
| 388 | 390 |
| 389 void V8InspectorSessionImpl::stepOver() { m_debuggerAgent->stepOver(); } | 391 void V8InspectorSessionImpl::stepOver() { m_debuggerAgent->stepOver(); } |
| 390 | 392 |
| 391 std::vector<std::unique_ptr<protocol::Debugger::API::SearchMatch>> | 393 std::vector<std::unique_ptr<protocol::Debugger::API::SearchMatch>> |
| 392 V8InspectorSessionImpl::searchInTextByLines(const StringView& text, | 394 V8InspectorSessionImpl::searchInTextByLines(const StringView& text, |
| 393 const StringView& query, | 395 const StringView& query, |
| 394 bool caseSensitive, bool isRegex) { | 396 bool caseSensitive, bool isRegex) { |
| 395 // TODO(dgozman): search may operate on StringView and avoid copying |text|. | 397 // TODO(dgozman): search may operate on StringView and avoid copying |text|. |
| 396 std::vector<std::unique_ptr<protocol::Debugger::SearchMatch>> matches = | 398 std::vector<std::unique_ptr<protocol::Debugger::SearchMatch>> matches = |
| 397 searchInTextByLinesImpl(this, toString16(text), toString16(query), | 399 searchInTextByLinesImpl(this, toString16(text), toString16(query), |
| 398 caseSensitive, isRegex); | 400 caseSensitive, isRegex); |
| 399 std::vector<std::unique_ptr<protocol::Debugger::API::SearchMatch>> result; | 401 std::vector<std::unique_ptr<protocol::Debugger::API::SearchMatch>> result; |
| 400 for (size_t i = 0; i < matches.size(); ++i) | 402 for (size_t i = 0; i < matches.size(); ++i) |
| 401 result.push_back(std::move(matches[i])); | 403 result.push_back(std::move(matches[i])); |
| 402 return result; | 404 return result; |
| 403 } | 405 } |
| 404 | 406 |
| 405 } // namespace v8_inspector | 407 } // namespace v8_inspector |
| OLD | NEW |