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

Unified Diff: src/inspector/v8-console.cc

Issue 2916803005: [inspector] Create InjectedScript per session in each context (Closed)
Patch Set: rebased Created 3 years, 6 months 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/inspector/v8-console.h ('k') | src/inspector/v8-inspector-session-impl.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/inspector/v8-console.cc
diff --git a/src/inspector/v8-console.cc b/src/inspector/v8-console.cc
index 1ff4e5cebee6d61daf5a17d7eb91fa41d856a83f..8b1ab62c41c1437827c1d36b990a74223ef1f03c 100644
--- a/src/inspector/v8-console.cc
+++ b/src/inspector/v8-console.cc
@@ -37,10 +37,14 @@ class ConsoleHelper {
int contextId() const { return m_contextId; }
int groupId() const { return m_groupId; }
- InjectedScript* injectedScript() {
+ InjectedScript* injectedScript(int sessionId) {
InspectedContext* context = m_inspector->getContext(m_groupId, m_contextId);
if (!context) return nullptr;
- return context->getInjectedScript();
+ return context->getInjectedScript(sessionId);
+ }
+
+ V8InspectorSessionImpl* session(int sessionId) {
+ return m_inspector->sessionById(m_groupId, sessionId);
}
V8ConsoleMessageStorage* consoleMessageStorage() {
@@ -272,6 +276,7 @@ void V8Console::Assert(const v8::debug::ConsoleCallArguments& info) {
toV8String(m_inspector->isolate(), String16("console.assert")));
helper.reportCall(ConsoleAPIType::kAssert, arguments);
+ // TODO(dgozman): only break once, not per each session.
helper.forEachSession([](V8InspectorSessionImpl* session) {
if (session->debuggerAgent()->enabled()) {
session->debuggerAgent()->breakProgramOnException(
@@ -376,7 +381,8 @@ void V8Console::memorySetterCallback(
// setter just ignores the passed value. http://crbug.com/468611
}
-void V8Console::keysCallback(const v8::FunctionCallbackInfo<v8::Value>& info) {
+void V8Console::keysCallback(const v8::FunctionCallbackInfo<v8::Value>& info,
+ int sessionId) {
v8::Isolate* isolate = info.GetIsolate();
info.GetReturnValue().Set(v8::Array::New(isolate));
@@ -390,8 +396,8 @@ void V8Console::keysCallback(const v8::FunctionCallbackInfo<v8::Value>& info) {
info.GetReturnValue().Set(names);
}
-void V8Console::valuesCallback(
- const v8::FunctionCallbackInfo<v8::Value>& info) {
+void V8Console::valuesCallback(const v8::FunctionCallbackInfo<v8::Value>& info,
+ int sessionId) {
v8::Isolate* isolate = info.GetIsolate();
info.GetReturnValue().Set(v8::Array::New(isolate));
@@ -413,7 +419,7 @@ void V8Console::valuesCallback(
info.GetReturnValue().Set(values);
}
-static void setFunctionBreakpoint(ConsoleHelper& helper,
+static void setFunctionBreakpoint(ConsoleHelper& helper, int sessionId,
v8::Local<v8::Function> function,
V8DebuggerAgentImpl::BreakpointSource source,
const String16& condition, bool enable) {
@@ -424,8 +430,7 @@ static void setFunctionBreakpoint(ConsoleHelper& helper,
columnNumber == v8::Function::kLineOffsetNotFound)
return;
- helper.forEachSession([&enable, &scriptId, &lineNumber, &columnNumber,
- &source, &condition](V8InspectorSessionImpl* session) {
+ if (V8InspectorSessionImpl* session = helper.session(sessionId)) {
if (!session->debuggerAgent()->enabled()) return;
if (enable) {
session->debuggerAgent()->setBreakpointAt(
@@ -434,33 +439,33 @@ static void setFunctionBreakpoint(ConsoleHelper& helper,
session->debuggerAgent()->removeBreakpointAt(scriptId, lineNumber,
columnNumber, source);
}
- });
+ }
}
void V8Console::debugFunctionCallback(
- const v8::FunctionCallbackInfo<v8::Value>& info) {
+ const v8::FunctionCallbackInfo<v8::Value>& info, int sessionId) {
v8::debug::ConsoleCallArguments args(info);
ConsoleHelper helper(args, m_inspector);
v8::Local<v8::Function> function;
if (!helper.firstArgAsFunction().ToLocal(&function)) return;
- setFunctionBreakpoint(helper, function,
+ setFunctionBreakpoint(helper, sessionId, function,
V8DebuggerAgentImpl::DebugCommandBreakpointSource,
String16(), true);
}
void V8Console::undebugFunctionCallback(
- const v8::FunctionCallbackInfo<v8::Value>& info) {
+ const v8::FunctionCallbackInfo<v8::Value>& info, int sessionId) {
v8::debug::ConsoleCallArguments args(info);
ConsoleHelper helper(args, m_inspector);
v8::Local<v8::Function> function;
if (!helper.firstArgAsFunction().ToLocal(&function)) return;
- setFunctionBreakpoint(helper, function,
+ setFunctionBreakpoint(helper, sessionId, function,
V8DebuggerAgentImpl::DebugCommandBreakpointSource,
String16(), false);
}
void V8Console::monitorFunctionCallback(
- const v8::FunctionCallbackInfo<v8::Value>& info) {
+ const v8::FunctionCallbackInfo<v8::Value>& info, int sessionId) {
v8::debug::ConsoleCallArguments args(info);
ConsoleHelper helper(args, m_inspector);
v8::Local<v8::Function> function;
@@ -478,39 +483,40 @@ void V8Console::monitorFunctionCallback(
builder.append(
" called\" + (arguments.length > 0 ? \" with arguments: \" + "
"Array.prototype.join.call(arguments, \", \") : \"\")) && false");
- setFunctionBreakpoint(helper, function,
+ setFunctionBreakpoint(helper, sessionId, function,
V8DebuggerAgentImpl::MonitorCommandBreakpointSource,
builder.toString(), true);
}
void V8Console::unmonitorFunctionCallback(
- const v8::FunctionCallbackInfo<v8::Value>& info) {
+ const v8::FunctionCallbackInfo<v8::Value>& info, int sessionId) {
v8::debug::ConsoleCallArguments args(info);
ConsoleHelper helper(args, m_inspector);
v8::Local<v8::Function> function;
if (!helper.firstArgAsFunction().ToLocal(&function)) return;
- setFunctionBreakpoint(helper, function,
+ setFunctionBreakpoint(helper, sessionId, function,
V8DebuggerAgentImpl::MonitorCommandBreakpointSource,
String16(), false);
}
void V8Console::lastEvaluationResultCallback(
- const v8::FunctionCallbackInfo<v8::Value>& info) {
+ const v8::FunctionCallbackInfo<v8::Value>& info, int sessionId) {
v8::debug::ConsoleCallArguments args(info);
ConsoleHelper helper(args, m_inspector);
- InjectedScript* injectedScript = helper.injectedScript();
+ InjectedScript* injectedScript = helper.injectedScript(sessionId);
if (!injectedScript) return;
info.GetReturnValue().Set(injectedScript->lastEvaluationResult());
}
static void inspectImpl(const v8::FunctionCallbackInfo<v8::Value>& info,
- bool copyToClipboard, V8InspectorImpl* inspector) {
+ int sessionId, bool copyToClipboard,
+ V8InspectorImpl* inspector) {
if (info.Length() < 1) return;
if (!copyToClipboard) info.GetReturnValue().Set(info[0]);
v8::debug::ConsoleCallArguments args(info);
ConsoleHelper helper(args, inspector);
- InjectedScript* injectedScript = helper.injectedScript();
+ InjectedScript* injectedScript = helper.injectedScript(sessionId);
if (!injectedScript) return;
std::unique_ptr<protocol::Runtime::RemoteObject> wrappedObject;
protocol::Response response =
@@ -521,35 +527,35 @@ static void inspectImpl(const v8::FunctionCallbackInfo<v8::Value>& info,
std::unique_ptr<protocol::DictionaryValue> hints =
protocol::DictionaryValue::create();
if (copyToClipboard) hints->setBoolean("copyToClipboard", true);
- helper.forEachSession(
- [&wrappedObject, &hints](V8InspectorSessionImpl* session) {
- session->runtimeAgent()->inspect(std::move(wrappedObject),
- std::move(hints));
- });
+ if (V8InspectorSessionImpl* session = helper.session(sessionId)) {
+ session->runtimeAgent()->inspect(std::move(wrappedObject),
+ std::move(hints));
+ }
}
-void V8Console::inspectCallback(
- const v8::FunctionCallbackInfo<v8::Value>& info) {
- inspectImpl(info, false, m_inspector);
+void V8Console::inspectCallback(const v8::FunctionCallbackInfo<v8::Value>& info,
+ int sessionId) {
+ inspectImpl(info, sessionId, false, m_inspector);
}
-void V8Console::copyCallback(const v8::FunctionCallbackInfo<v8::Value>& info) {
- inspectImpl(info, true, m_inspector);
+void V8Console::copyCallback(const v8::FunctionCallbackInfo<v8::Value>& info,
+ int sessionId) {
+ inspectImpl(info, sessionId, true, m_inspector);
}
void V8Console::inspectedObject(const v8::FunctionCallbackInfo<v8::Value>& info,
- unsigned num) {
+ int sessionId, unsigned num) {
DCHECK(num < V8InspectorSessionImpl::kInspectedObjectBufferSize);
v8::debug::ConsoleCallArguments args(info);
ConsoleHelper helper(args, m_inspector);
- helper.forEachSession([&info, &num](V8InspectorSessionImpl* session) {
+ if (V8InspectorSessionImpl* session = helper.session(sessionId)) {
V8InspectorSession::Inspectable* object = session->inspectedObject(num);
v8::Isolate* isolate = info.GetIsolate();
if (object)
info.GetReturnValue().Set(object->get(isolate->GetCurrentContext()));
else
info.GetReturnValue().Set(v8::Undefined(isolate));
- });
+ }
}
void V8Console::installMemoryGetter(v8::Local<v8::Context> context,
@@ -570,7 +576,7 @@ void V8Console::installMemoryGetter(v8::Local<v8::Context> context,
}
v8::Local<v8::Object> V8Console::createCommandLineAPI(
- v8::Local<v8::Context> context) {
+ v8::Local<v8::Context> context, int sessionId) {
v8::Isolate* isolate = context->GetIsolate();
v8::MicrotasksScope microtasksScope(isolate,
v8::MicrotasksScope::kDoNotRunMicrotasks);
@@ -581,7 +587,9 @@ v8::Local<v8::Object> V8Console::createCommandLineAPI(
DCHECK(success);
USE(success);
- v8::Local<v8::External> data = v8::External::New(isolate, this);
+ // TODO(dgozman): this CommandLineAPIData instance leaks. Use PodArray maybe?
+ v8::Local<v8::External> data =
+ v8::External::New(isolate, new CommandLineAPIData(this, sessionId));
createBoundFunctionProperty(context, commandLineAPI, data, "dir",
&V8Console::call<&V8Console::Dir>,
"function dir(value) { [Command Line API] }");
« no previous file with comments | « src/inspector/v8-console.h ('k') | src/inspector/v8-inspector-session-impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698