| Index: src/inspector/v8-debugger-agent-impl.cc
|
| diff --git a/src/inspector/v8-debugger-agent-impl.cc b/src/inspector/v8-debugger-agent-impl.cc
|
| index adf9169d303ab9dca493c6e4c35eeb2162ec6be2..8c9e9054a2143706c066d249d13c66b42ca9d7fa 100644
|
| --- a/src/inspector/v8-debugger-agent-impl.cc
|
| +++ b/src/inspector/v8-debugger-agent-impl.cc
|
| @@ -349,6 +349,48 @@ void V8DebuggerAgentImpl::removeBreakpointImpl(const String16& breakpointId) {
|
| m_breakpointIdToDebuggerBreakpointIds.erase(breakpointId);
|
| }
|
|
|
| +Response V8DebuggerAgentImpl::getPossibleBreakpoints(
|
| + std::unique_ptr<protocol::Debugger::Location> start,
|
| + Maybe<protocol::Debugger::Location> end,
|
| + std::unique_ptr<protocol::Array<protocol::Debugger::Location>>* locations) {
|
| + String16 scriptId = start->getScriptId();
|
| +
|
| + if (start->getLineNumber() < 0 || start->getColumnNumber(0) < 0)
|
| + return Response::Error(
|
| + "start.lineNumber and start.columnNumber should be >= 0");
|
| +
|
| + v8::DebugInterface::Location v8Start(start->getLineNumber(),
|
| + start->getColumnNumber(0));
|
| + v8::DebugInterface::Location v8End;
|
| + if (end.isJust()) {
|
| + if (end.fromJust()->getScriptId() != scriptId)
|
| + return Response::Error("Locations should contain the same scriptId");
|
| + int line = end.fromJust()->getLineNumber();
|
| + int column = end.fromJust()->getColumnNumber(0);
|
| + if (line < 0 || column < 0)
|
| + return Response::Error(
|
| + "end.lineNumber and end.columnNumber should be >= 0");
|
| + v8End = v8::DebugInterface::Location(line, column);
|
| + }
|
| + auto it = m_scripts.find(scriptId);
|
| + if (it == m_scripts.end()) return Response::Error("Script not found");
|
| +
|
| + std::vector<v8::DebugInterface::Location> v8Locations;
|
| + if (!it->second->getPossibleBreakpoints(v8Start, v8End, &v8Locations))
|
| + return Response::InternalError();
|
| +
|
| + *locations = protocol::Array<protocol::Debugger::Location>::create();
|
| + for (size_t i = 0; i < v8Locations.size(); ++i) {
|
| + (*locations)
|
| + ->addItem(protocol::Debugger::Location::create()
|
| + .setScriptId(scriptId)
|
| + .setLineNumber(v8Locations[i].GetLineNumber())
|
| + .setColumnNumber(v8Locations[i].GetColumnNumber())
|
| + .build());
|
| + }
|
| + return Response::OK();
|
| +}
|
| +
|
| Response V8DebuggerAgentImpl::continueToLocation(
|
| std::unique_ptr<protocol::Debugger::Location> location) {
|
| if (!enabled()) return Response::Error(kDebuggerNotEnabled);
|
| @@ -509,7 +551,7 @@ Response V8DebuggerAgentImpl::setScriptSource(
|
| if (!response.isSuccess() || compileError) return response;
|
|
|
| ScriptsMap::iterator it = m_scripts.find(scriptId);
|
| - if (it != m_scripts.end()) it->second->setSource(m_isolate, newSource);
|
| + if (it != m_scripts.end()) it->second->setSource(newSource);
|
|
|
| std::unique_ptr<Array<CallFrame>> callFrames;
|
| response = currentCallFrames(&callFrames);
|
|
|