Index: src/inspector/v8-console.cc |
diff --git a/src/inspector/v8-console.cc b/src/inspector/v8-console.cc |
index 69e58dfabd03fd64fb8d4bd741bee9e62c36e5ab..6d0433a7a44f67ddf252622c05e9cd62c83ec669 100644 |
--- a/src/inspector/v8-console.cc |
+++ b/src/inspector/v8-console.cc |
@@ -23,137 +23,22 @@ namespace v8_inspector { |
namespace { |
-class ConsoleHelper { |
- public: |
- explicit ConsoleHelper(const v8::FunctionCallbackInfo<v8::Value>& info, |
- V8InspectorImpl* inspector) |
- : m_info(info), |
- m_isolate(info.GetIsolate()), |
- m_context(info.GetIsolate()->GetCurrentContext()), |
- m_inspector(inspector), |
- m_contextId(InspectedContext::contextId(m_context)), |
- m_groupId(m_inspector->contextGroupId(m_contextId)) {} |
- |
- int contextId() const { return m_contextId; } |
- int groupId() const { return m_groupId; } |
- |
- InjectedScript* injectedScript() { |
- InspectedContext* context = m_inspector->getContext(m_groupId, m_contextId); |
- if (!context) return nullptr; |
- return context->getInjectedScript(); |
- } |
- |
- V8ConsoleMessageStorage* consoleMessageStorage() { |
- return m_inspector->ensureConsoleMessageStorage(m_groupId); |
- } |
- |
- void reportCall(ConsoleAPIType type) { |
- if (!m_info.Length()) return; |
- std::vector<v8::Local<v8::Value>> arguments; |
- for (int i = 0; i < m_info.Length(); ++i) arguments.push_back(m_info[i]); |
- reportCall(type, arguments); |
- } |
- |
- void reportCallWithDefaultArgument(ConsoleAPIType type, |
- const String16& message) { |
- std::vector<v8::Local<v8::Value>> arguments; |
- for (int i = 0; i < m_info.Length(); ++i) arguments.push_back(m_info[i]); |
- if (!m_info.Length()) arguments.push_back(toV8String(m_isolate, message)); |
- reportCall(type, arguments); |
- } |
- |
- void reportCallWithArgument(ConsoleAPIType type, const String16& message) { |
- std::vector<v8::Local<v8::Value>> arguments(1, |
- toV8String(m_isolate, message)); |
- reportCall(type, arguments); |
- } |
- |
- void reportCall(ConsoleAPIType type, |
- const std::vector<v8::Local<v8::Value>>& arguments) { |
- if (!m_groupId) return; |
- std::unique_ptr<V8ConsoleMessage> message = |
- V8ConsoleMessage::createForConsoleAPI( |
- m_context, m_contextId, m_groupId, m_inspector, |
- m_inspector->client()->currentTimeMS(), type, arguments, |
- m_inspector->debugger()->captureStackTrace(false)); |
- consoleMessageStorage()->addMessage(std::move(message)); |
- } |
- |
- void reportDeprecatedCall(const char* id, const String16& message) { |
- if (!consoleMessageStorage()->shouldReportDeprecationMessage(m_contextId, |
- id)) { |
- return; |
- } |
- std::vector<v8::Local<v8::Value>> arguments(1, |
- toV8String(m_isolate, message)); |
- reportCall(ConsoleAPIType::kWarning, arguments); |
- } |
- |
- bool firstArgToBoolean(bool defaultValue) { |
- if (m_info.Length() < 1) return defaultValue; |
- if (m_info[0]->IsBoolean()) return m_info[0].As<v8::Boolean>()->Value(); |
- return m_info[0]->BooleanValue(m_context).FromMaybe(defaultValue); |
- } |
- |
- String16 firstArgToString(const String16& defaultValue) { |
- if (m_info.Length() < 1) return defaultValue; |
- v8::Local<v8::String> titleValue; |
- if (m_info[0]->IsObject()) { |
- if (!m_info[0].As<v8::Object>()->ObjectProtoToString(m_context).ToLocal( |
- &titleValue)) |
- return defaultValue; |
- } else { |
- if (!m_info[0]->ToString(m_context).ToLocal(&titleValue)) |
- return defaultValue; |
- } |
- return toProtocolString(titleValue); |
- } |
- |
- v8::MaybeLocal<v8::Object> firstArgAsObject() { |
- if (m_info.Length() < 1 || !m_info[0]->IsObject()) |
- return v8::MaybeLocal<v8::Object>(); |
- return m_info[0].As<v8::Object>(); |
- } |
- |
- v8::MaybeLocal<v8::Function> firstArgAsFunction() { |
- if (m_info.Length() < 1 || !m_info[0]->IsFunction()) |
- return v8::MaybeLocal<v8::Function>(); |
- v8::Local<v8::Function> func = m_info[0].As<v8::Function>(); |
- while (func->GetBoundFunction()->IsFunction()) |
- func = func->GetBoundFunction().As<v8::Function>(); |
- return func; |
- } |
- |
- V8ProfilerAgentImpl* profilerAgent() { |
- if (V8InspectorSessionImpl* session = currentSession()) { |
- if (session && session->profilerAgent()->enabled()) |
- return session->profilerAgent(); |
- } |
- return nullptr; |
- } |
- |
- V8DebuggerAgentImpl* debuggerAgent() { |
- if (V8InspectorSessionImpl* session = currentSession()) { |
- if (session && session->debuggerAgent()->enabled()) |
- return session->debuggerAgent(); |
- } |
- return nullptr; |
- } |
- |
- V8InspectorSessionImpl* currentSession() { |
- return m_inspector->sessionForContextGroup(m_groupId); |
- } |
- |
- private: |
- const v8::FunctionCallbackInfo<v8::Value>& m_info; |
- v8::Isolate* m_isolate; |
- v8::Local<v8::Context> m_context; |
- V8InspectorImpl* m_inspector = nullptr; |
- int m_contextId; |
- int m_groupId; |
+v8::MaybeLocal<v8::Function> firstArgAsFunction( |
+ const v8::FunctionCallbackInfo<v8::Value>& info) { |
+ if (info.Length() < 1 || !info[0]->IsFunction()) |
+ return v8::MaybeLocal<v8::Function>(); |
+ v8::Local<v8::Function> func = info[0].As<v8::Function>(); |
+ while (func->GetBoundFunction()->IsFunction()) |
+ func = func->GetBoundFunction().As<v8::Function>(); |
+ return func; |
+} |
- DISALLOW_COPY_AND_ASSIGN(ConsoleHelper); |
-}; |
+v8::MaybeLocal<v8::Object> firstArgAsObject( |
+ const v8::FunctionCallbackInfo<v8::Value>& info) { |
+ if (info.Length() < 1 || !info[0]->IsObject()) |
+ return v8::MaybeLocal<v8::Object>(); |
+ return info[0].As<v8::Object>(); |
+} |
void returnDataCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { |
info.GetReturnValue().Set(info.Data()); |
@@ -178,10 +63,11 @@ void createBoundFunctionProperty(v8::Local<v8::Context> context, |
v8::Local<v8::Function> toStringFunction; |
if (v8::Function::New(context, returnDataCallback, returnValue, 0, |
v8::ConstructorBehavior::kThrow) |
- .ToLocal(&toStringFunction)) |
+ .ToLocal(&toStringFunction)) { |
createDataProperty(context, func, toV8StringInternalized( |
context->GetIsolate(), "toString"), |
toStringFunction); |
+ } |
} |
createDataProperty(context, console, funcName, func); |
} |
@@ -190,76 +76,194 @@ void createBoundFunctionProperty(v8::Local<v8::Context> context, |
V8Console::V8Console(V8InspectorImpl* inspector) : m_inspector(inspector) {} |
+int V8Console::currentContextId() { |
+ return InspectedContext::contextId( |
+ m_inspector->isolate()->GetCurrentContext()); |
+} |
+ |
+V8InspectorSessionImpl* V8Console::currentSession() { |
+ int groupId = m_inspector->contextGroupId(currentContextId()); |
+ return groupId ? m_inspector->sessionForContextGroup(groupId) : nullptr; |
+} |
+ |
+V8ProfilerAgentImpl* V8Console::profilerAgent() { |
+ V8InspectorSessionImpl* session = currentSession(); |
+ if (!session) return nullptr; |
+ if (!session || !session->profilerAgent()->enabled()) return nullptr; |
+ return session->profilerAgent(); |
+} |
+ |
+V8DebuggerAgentImpl* V8Console::debuggerAgent() { |
+ V8InspectorSessionImpl* session = currentSession(); |
+ if (!session) return nullptr; |
+ if (!session || !session->debuggerAgent()->enabled()) return nullptr; |
+ return session->debuggerAgent(); |
+} |
+ |
+V8RuntimeAgentImpl* V8Console::runtimeAgent() { |
+ V8InspectorSessionImpl* session = currentSession(); |
+ if (!session) return nullptr; |
+ if (!session || !session->runtimeAgent()->enabled()) return nullptr; |
+ return session->runtimeAgent(); |
+} |
+ |
+InjectedScript* V8Console::injectedScript() { |
+ int contextId = currentContextId(); |
+ int groupId = m_inspector->contextGroupId(contextId); |
+ InspectedContext* context = m_inspector->getContext(groupId, contextId); |
+ if (!context) return nullptr; |
+ return context->getInjectedScript(); |
+} |
+ |
+V8ConsoleMessageStorage* V8Console::messageStorage() { |
+ int contextId = |
+ InspectedContext::contextId(m_inspector->isolate()->GetCurrentContext()); |
+ int groupId = m_inspector->contextGroupId(contextId); |
+ if (!groupId) return nullptr; |
+ return m_inspector->ensureConsoleMessageStorage(groupId); |
+} |
+ |
+void V8Console::reportCall(ConsoleAPIType type, |
+ const v8::FunctionCallbackInfo<v8::Value>& info) { |
+ if (!info.Length()) return; |
+ std::vector<v8::Local<v8::Value>> arguments; |
+ for (int i = 0; i < info.Length(); ++i) arguments.push_back(info[i]); |
+ reportCall(type, arguments); |
+} |
+ |
+void V8Console::reportCallWithDefaultArgument( |
+ ConsoleAPIType type, const v8::FunctionCallbackInfo<v8::Value>& info, |
+ const String16& message) { |
+ std::vector<v8::Local<v8::Value>> arguments; |
+ for (int i = 0; i < info.Length(); ++i) arguments.push_back(info[i]); |
+ if (!info.Length()) |
+ arguments.push_back(toV8String(m_inspector->isolate(), message)); |
+ reportCall(type, arguments); |
+} |
+ |
+void V8Console::reportCallWithArgument(ConsoleAPIType type, |
+ const String16& message) { |
+ std::vector<v8::Local<v8::Value>> arguments( |
+ 1, toV8String(m_inspector->isolate(), message)); |
+ reportCall(type, arguments); |
+} |
+ |
+void V8Console::reportDeprecatedCall(const char* id, const String16& message) { |
+ V8ConsoleMessageStorage* storage = messageStorage(); |
+ if (!storage) return; |
+ int contextId = currentContextId(); |
+ if (!contextId) return; |
+ if (!storage->shouldReportDeprecationMessage(contextId, id)) return; |
+ reportCallWithArgument(ConsoleAPIType::kWarning, message); |
+} |
+ |
+void V8Console::reportCall(ConsoleAPIType type, |
+ const std::vector<v8::Local<v8::Value>>& arguments) { |
+ int contextId = currentContextId(); |
+ if (!contextId) return; |
+ V8ConsoleMessageStorage* storage = messageStorage(); |
+ if (!storage) return; |
+ int groupId = m_inspector->contextGroupId(contextId); |
+ if (!groupId) return; |
+ if (type == ConsoleAPIType::kClear) { |
+ m_inspector->client()->consoleClear(groupId); |
+ } |
+ v8::Local<v8::Context> context = m_inspector->isolate()->GetCurrentContext(); |
+ std::unique_ptr<V8ConsoleMessage> message = |
+ V8ConsoleMessage::createForConsoleAPI( |
+ context, contextId, groupId, m_inspector, |
+ m_inspector->client()->currentTimeMS(), type, arguments, |
+ m_inspector->debugger()->captureStackTrace(false)); |
+ storage->addMessage(std::move(message)); |
+} |
+ |
+String16 V8Console::firstArgToString( |
+ const v8::FunctionCallbackInfo<v8::Value>& info, |
+ const String16& defaultValue) { |
+ if (info.Length() < 1) return defaultValue; |
+ v8::Local<v8::Context> context = m_inspector->isolate()->GetCurrentContext(); |
+ v8::Local<v8::String> titleValue; |
+ if (info[0]->IsObject()) { |
+ if (!info[0].As<v8::Object>()->ObjectProtoToString(context).ToLocal( |
+ &titleValue)) |
+ return defaultValue; |
+ } else { |
+ if (!info[0]->ToString(context).ToLocal(&titleValue)) return defaultValue; |
+ } |
+ return toProtocolString(titleValue); |
+} |
+ |
+bool V8Console::firstArgToBoolean( |
+ const v8::FunctionCallbackInfo<v8::Value>& info, bool defaultValue) { |
+ if (info.Length() < 1) return defaultValue; |
+ if (info[0]->IsBoolean()) return info[0].As<v8::Boolean>()->Value(); |
+ return info[0] |
+ ->BooleanValue(m_inspector->isolate()->GetCurrentContext()) |
+ .FromMaybe(defaultValue); |
+} |
+ |
void V8Console::debugCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { |
- ConsoleHelper(info, m_inspector).reportCall(ConsoleAPIType::kDebug); |
+ reportCall(ConsoleAPIType::kDebug, info); |
} |
void V8Console::errorCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { |
- ConsoleHelper(info, m_inspector).reportCall(ConsoleAPIType::kError); |
+ reportCall(ConsoleAPIType::kError, info); |
} |
void V8Console::infoCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { |
- ConsoleHelper(info, m_inspector).reportCall(ConsoleAPIType::kInfo); |
+ reportCall(ConsoleAPIType::kInfo, info); |
} |
void V8Console::logCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { |
- ConsoleHelper(info, m_inspector).reportCall(ConsoleAPIType::kLog); |
+ reportCall(ConsoleAPIType::kLog, info); |
} |
void V8Console::warnCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { |
- ConsoleHelper(info, m_inspector).reportCall(ConsoleAPIType::kWarning); |
+ reportCall(ConsoleAPIType::kWarning, info); |
} |
void V8Console::dirCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { |
- ConsoleHelper(info, m_inspector).reportCall(ConsoleAPIType::kDir); |
+ reportCall(ConsoleAPIType::kDir, info); |
} |
void V8Console::dirxmlCallback( |
const v8::FunctionCallbackInfo<v8::Value>& info) { |
- ConsoleHelper(info, m_inspector).reportCall(ConsoleAPIType::kDirXML); |
+ reportCall(ConsoleAPIType::kDirXML, info); |
} |
void V8Console::tableCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { |
- ConsoleHelper(info, m_inspector).reportCall(ConsoleAPIType::kTable); |
+ reportCall(ConsoleAPIType::kTable, info); |
} |
void V8Console::traceCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { |
- ConsoleHelper(info, m_inspector) |
- .reportCallWithDefaultArgument(ConsoleAPIType::kTrace, |
- String16("console.trace")); |
+ reportCallWithDefaultArgument(ConsoleAPIType::kTrace, info, |
+ String16("console.trace")); |
} |
void V8Console::groupCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { |
- ConsoleHelper(info, m_inspector) |
- .reportCallWithDefaultArgument(ConsoleAPIType::kStartGroup, |
- String16("console.group")); |
+ reportCallWithDefaultArgument(ConsoleAPIType::kStartGroup, info, |
+ String16("console.group")); |
} |
void V8Console::groupCollapsedCallback( |
const v8::FunctionCallbackInfo<v8::Value>& info) { |
- ConsoleHelper(info, m_inspector) |
- .reportCallWithDefaultArgument(ConsoleAPIType::kStartGroupCollapsed, |
- String16("console.groupCollapsed")); |
+ reportCallWithDefaultArgument(ConsoleAPIType::kStartGroupCollapsed, info, |
+ String16("console.groupCollapsed")); |
} |
void V8Console::groupEndCallback( |
const v8::FunctionCallbackInfo<v8::Value>& info) { |
- ConsoleHelper(info, m_inspector) |
- .reportCallWithDefaultArgument(ConsoleAPIType::kEndGroup, |
- String16("console.groupEnd")); |
+ reportCallWithDefaultArgument(ConsoleAPIType::kEndGroup, info, |
+ String16("console.groupEnd")); |
} |
void V8Console::clearCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { |
- ConsoleHelper helper(info, m_inspector); |
- if (!helper.groupId()) return; |
- m_inspector->client()->consoleClear(helper.groupId()); |
- helper.reportCallWithDefaultArgument(ConsoleAPIType::kClear, |
- String16("console.clear")); |
+ reportCallWithDefaultArgument(ConsoleAPIType::kClear, info, |
+ String16("console.clear")); |
} |
void V8Console::countCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { |
- ConsoleHelper helper(info, m_inspector); |
- String16 title = helper.firstArgToString(String16()); |
+ String16 title = firstArgToString(info, String16()); |
String16 identifier; |
if (title.isEmpty()) { |
std::unique_ptr<V8StackTraceImpl> stackTrace = |
@@ -272,109 +276,106 @@ void V8Console::countCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { |
identifier = title + "@"; |
} |
- int count = |
- helper.consoleMessageStorage()->count(helper.contextId(), identifier); |
+ V8ConsoleMessageStorage* storage = messageStorage(); |
+ if (!storage) return; |
+ int count = storage->count(currentContextId(), identifier); |
String16 countString = String16::fromInteger(count); |
- helper.reportCallWithArgument( |
+ reportCallWithArgument( |
ConsoleAPIType::kCount, |
title.isEmpty() ? countString : (title + ": " + countString)); |
} |
void V8Console::assertCallback( |
const v8::FunctionCallbackInfo<v8::Value>& info) { |
- ConsoleHelper helper(info, m_inspector); |
- if (helper.firstArgToBoolean(false)) return; |
+ if (firstArgToBoolean(info, false)) return; |
std::vector<v8::Local<v8::Value>> arguments; |
for (int i = 1; i < info.Length(); ++i) arguments.push_back(info[i]); |
if (info.Length() < 2) |
arguments.push_back( |
- toV8String(info.GetIsolate(), String16("console.assert"))); |
- helper.reportCall(ConsoleAPIType::kAssert, arguments); |
- |
- if (V8DebuggerAgentImpl* debuggerAgent = helper.debuggerAgent()) |
- debuggerAgent->breakProgramOnException( |
- protocol::Debugger::Paused::ReasonEnum::Assert, nullptr); |
+ toV8String(m_inspector->isolate(), String16("console.assert"))); |
+ reportCall(ConsoleAPIType::kAssert, arguments); |
+ V8DebuggerAgentImpl* agent = debuggerAgent(); |
+ if (!agent) return; |
+ agent->breakProgramOnException(protocol::Debugger::Paused::ReasonEnum::Assert, |
+ nullptr); |
} |
void V8Console::markTimelineCallback( |
const v8::FunctionCallbackInfo<v8::Value>& info) { |
- ConsoleHelper(info, m_inspector) |
- .reportDeprecatedCall("V8Console#markTimelineDeprecated", |
- "'console.markTimeline' is " |
- "deprecated. Please use " |
- "'console.timeStamp' instead."); |
+ reportDeprecatedCall("V8Console#markTimelineDeprecated", |
+ "'console.markTimeline' is " |
+ "deprecated. Please use " |
+ "'console.timeStamp' instead."); |
timeStampCallback(info); |
} |
void V8Console::profileCallback( |
const v8::FunctionCallbackInfo<v8::Value>& info) { |
- ConsoleHelper helper(info, m_inspector); |
- if (V8ProfilerAgentImpl* profilerAgent = helper.profilerAgent()) |
- profilerAgent->consoleProfile(helper.firstArgToString(String16())); |
+ if (V8ProfilerAgentImpl* agent = profilerAgent()) { |
+ agent->consoleProfile(firstArgToString(info, String16())); |
+ } |
} |
void V8Console::profileEndCallback( |
const v8::FunctionCallbackInfo<v8::Value>& info) { |
- ConsoleHelper helper(info, m_inspector); |
- if (V8ProfilerAgentImpl* profilerAgent = helper.profilerAgent()) |
- profilerAgent->consoleProfileEnd(helper.firstArgToString(String16())); |
+ if (V8ProfilerAgentImpl* agent = profilerAgent()) { |
+ agent->consoleProfileEnd(firstArgToString(info, String16())); |
+ } |
} |
-static void timeFunction(const v8::FunctionCallbackInfo<v8::Value>& info, |
- bool timelinePrefix, V8InspectorImpl* inspector) { |
- ConsoleHelper helper(info, inspector); |
- String16 protocolTitle = helper.firstArgToString("default"); |
+void V8Console::time(const v8::FunctionCallbackInfo<v8::Value>& info, |
+ bool timelinePrefix) { |
+ String16 protocolTitle = firstArgToString(info, "default"); |
if (timelinePrefix) protocolTitle = "Timeline '" + protocolTitle + "'"; |
- inspector->client()->consoleTime(toStringView(protocolTitle)); |
- helper.consoleMessageStorage()->time(helper.contextId(), protocolTitle); |
+ m_inspector->client()->consoleTime(toStringView(protocolTitle)); |
+ if (V8ConsoleMessageStorage* storage = messageStorage()) { |
+ storage->time(currentContextId(), protocolTitle); |
+ } |
} |
-static void timeEndFunction(const v8::FunctionCallbackInfo<v8::Value>& info, |
- bool timelinePrefix, V8InspectorImpl* inspector) { |
- ConsoleHelper helper(info, inspector); |
- String16 protocolTitle = helper.firstArgToString("default"); |
+void V8Console::timeEnd(const v8::FunctionCallbackInfo<v8::Value>& info, |
+ bool timelinePrefix) { |
+ String16 protocolTitle = firstArgToString(info, "default"); |
if (timelinePrefix) protocolTitle = "Timeline '" + protocolTitle + "'"; |
- inspector->client()->consoleTimeEnd(toStringView(protocolTitle)); |
- double elapsed = helper.consoleMessageStorage()->timeEnd(helper.contextId(), |
- protocolTitle); |
+ m_inspector->client()->consoleTimeEnd(toStringView(protocolTitle)); |
+ V8ConsoleMessageStorage* storage = messageStorage(); |
+ if (!storage) return; |
+ double elapsed = storage->timeEnd(currentContextId(), protocolTitle); |
String16 message = |
protocolTitle + ": " + String16::fromDouble(elapsed) + "ms"; |
- helper.reportCallWithArgument(ConsoleAPIType::kTimeEnd, message); |
+ reportCallWithArgument(ConsoleAPIType::kTimeEnd, message); |
} |
void V8Console::timelineCallback( |
const v8::FunctionCallbackInfo<v8::Value>& info) { |
- ConsoleHelper(info, m_inspector) |
- .reportDeprecatedCall("V8Console#timeline", |
- "'console.timeline' is deprecated. Please use " |
- "'console.time' instead."); |
- timeFunction(info, true, m_inspector); |
+ reportDeprecatedCall("V8Console#timeline", |
+ "'console.timeline' is deprecated. Please use " |
+ "'console.time' instead."); |
+ time(info, true); |
} |
void V8Console::timelineEndCallback( |
const v8::FunctionCallbackInfo<v8::Value>& info) { |
- ConsoleHelper(info, m_inspector) |
- .reportDeprecatedCall("V8Console#timelineEnd", |
- "'console.timelineEnd' is " |
- "deprecated. Please use " |
- "'console.timeEnd' instead."); |
- timeEndFunction(info, true, m_inspector); |
+ reportDeprecatedCall("V8Console#timelineEnd", |
+ "'console.timelineEnd' is " |
+ "deprecated. Please use " |
+ "'console.timeEnd' instead."); |
+ timeEnd(info, true); |
} |
void V8Console::timeCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { |
- timeFunction(info, false, m_inspector); |
+ time(info, false); |
} |
void V8Console::timeEndCallback( |
const v8::FunctionCallbackInfo<v8::Value>& info) { |
- timeEndFunction(info, false, m_inspector); |
+ timeEnd(info, false); |
} |
void V8Console::timeStampCallback( |
const v8::FunctionCallbackInfo<v8::Value>& info) { |
- ConsoleHelper helper(info, m_inspector); |
- String16 title = helper.firstArgToString(String16()); |
+ String16 title = firstArgToString(info, String16()); |
m_inspector->client()->consoleTimeStamp(toStringView(title)); |
} |
@@ -399,10 +400,8 @@ void V8Console::memorySetterCallback( |
void V8Console::keysCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { |
v8::Isolate* isolate = info.GetIsolate(); |
info.GetReturnValue().Set(v8::Array::New(isolate)); |
- |
- ConsoleHelper helper(info, m_inspector); |
v8::Local<v8::Object> obj; |
- if (!helper.firstArgAsObject().ToLocal(&obj)) return; |
+ if (!firstArgAsObject(info).ToLocal(&obj)) return; |
v8::Local<v8::Array> names; |
if (!obj->GetOwnPropertyNames(isolate->GetCurrentContext()).ToLocal(&names)) |
return; |
@@ -413,10 +412,8 @@ void V8Console::valuesCallback( |
const v8::FunctionCallbackInfo<v8::Value>& info) { |
v8::Isolate* isolate = info.GetIsolate(); |
info.GetReturnValue().Set(v8::Array::New(isolate)); |
- |
- ConsoleHelper helper(info, m_inspector); |
v8::Local<v8::Object> obj; |
- if (!helper.firstArgAsObject().ToLocal(&obj)) return; |
+ if (!firstArgAsObject(info).ToLocal(&obj)) return; |
v8::Local<v8::Array> names; |
v8::Local<v8::Context> context = isolate->GetCurrentContext(); |
if (!obj->GetOwnPropertyNames(context).ToLocal(&names)) return; |
@@ -431,12 +428,10 @@ void V8Console::valuesCallback( |
info.GetReturnValue().Set(values); |
} |
-static void setFunctionBreakpoint(ConsoleHelper& helper, |
+static void setFunctionBreakpoint(V8DebuggerAgentImpl* agent, |
v8::Local<v8::Function> function, |
V8DebuggerAgentImpl::BreakpointSource source, |
const String16& condition, bool enable) { |
- V8DebuggerAgentImpl* debuggerAgent = helper.debuggerAgent(); |
- if (!debuggerAgent) return; |
String16 scriptId = String16::fromInteger(function->ScriptId()); |
int lineNumber = function->GetScriptLineNumber(); |
int columnNumber = function->GetScriptColumnNumber(); |
@@ -444,38 +439,40 @@ static void setFunctionBreakpoint(ConsoleHelper& helper, |
columnNumber == v8::Function::kLineOffsetNotFound) |
return; |
if (enable) |
- debuggerAgent->setBreakpointAt(scriptId, lineNumber, columnNumber, source, |
- condition); |
+ agent->setBreakpointAt(scriptId, lineNumber, columnNumber, source, |
+ condition); |
else |
- debuggerAgent->removeBreakpointAt(scriptId, lineNumber, columnNumber, |
- source); |
+ agent->removeBreakpointAt(scriptId, lineNumber, columnNumber, source); |
} |
void V8Console::debugFunctionCallback( |
const v8::FunctionCallbackInfo<v8::Value>& info) { |
- ConsoleHelper helper(info, m_inspector); |
v8::Local<v8::Function> function; |
- if (!helper.firstArgAsFunction().ToLocal(&function)) return; |
- setFunctionBreakpoint(helper, function, |
+ if (!firstArgAsFunction(info).ToLocal(&function)) return; |
+ V8DebuggerAgentImpl* agent = debuggerAgent(); |
+ if (!agent) return; |
+ setFunctionBreakpoint(agent, function, |
V8DebuggerAgentImpl::DebugCommandBreakpointSource, |
String16(), true); |
} |
void V8Console::undebugFunctionCallback( |
const v8::FunctionCallbackInfo<v8::Value>& info) { |
- ConsoleHelper helper(info, m_inspector); |
v8::Local<v8::Function> function; |
- if (!helper.firstArgAsFunction().ToLocal(&function)) return; |
- setFunctionBreakpoint(helper, function, |
+ if (!firstArgAsFunction(info).ToLocal(&function)) return; |
+ V8DebuggerAgentImpl* agent = debuggerAgent(); |
+ if (!agent) return; |
+ setFunctionBreakpoint(agent, function, |
V8DebuggerAgentImpl::DebugCommandBreakpointSource, |
String16(), false); |
} |
void V8Console::monitorFunctionCallback( |
const v8::FunctionCallbackInfo<v8::Value>& info) { |
- ConsoleHelper helper(info, m_inspector); |
v8::Local<v8::Function> function; |
- if (!helper.firstArgAsFunction().ToLocal(&function)) return; |
+ if (!firstArgAsFunction(info).ToLocal(&function)) return; |
+ V8DebuggerAgentImpl* agent = debuggerAgent(); |
+ if (!agent) return; |
v8::Local<v8::Value> name = function->GetName(); |
if (!name->IsString() || !v8::Local<v8::String>::Cast(name)->Length()) |
name = function->GetInferredName(); |
@@ -489,37 +486,34 @@ void V8Console::monitorFunctionCallback( |
builder.append( |
" called\" + (arguments.length > 0 ? \" with arguments: \" + " |
"Array.prototype.join.call(arguments, \", \") : \"\")) && false"); |
- setFunctionBreakpoint(helper, function, |
+ setFunctionBreakpoint(agent, function, |
V8DebuggerAgentImpl::MonitorCommandBreakpointSource, |
builder.toString(), true); |
} |
void V8Console::unmonitorFunctionCallback( |
const v8::FunctionCallbackInfo<v8::Value>& info) { |
- ConsoleHelper helper(info, m_inspector); |
v8::Local<v8::Function> function; |
- if (!helper.firstArgAsFunction().ToLocal(&function)) return; |
- setFunctionBreakpoint(helper, function, |
+ if (!firstArgAsFunction(info).ToLocal(&function)) return; |
+ V8DebuggerAgentImpl* agent = debuggerAgent(); |
+ setFunctionBreakpoint(agent, function, |
V8DebuggerAgentImpl::MonitorCommandBreakpointSource, |
String16(), false); |
} |
void V8Console::lastEvaluationResultCallback( |
const v8::FunctionCallbackInfo<v8::Value>& info) { |
- ConsoleHelper helper(info, m_inspector); |
- InjectedScript* injectedScript = helper.injectedScript(); |
- if (!injectedScript) return; |
- info.GetReturnValue().Set(injectedScript->lastEvaluationResult()); |
+ InjectedScript* injected = injectedScript(); |
+ if (!injected) return; |
+ info.GetReturnValue().Set(injected->lastEvaluationResult()); |
} |
static void inspectImpl(const v8::FunctionCallbackInfo<v8::Value>& info, |
- bool copyToClipboard, V8InspectorImpl* inspector) { |
- if (info.Length() < 1) return; |
+ bool copyToClipboard, V8InspectorImpl* inspector, |
+ V8RuntimeAgentImpl* agent, |
+ InjectedScript* injectedScript) { |
if (!copyToClipboard) info.GetReturnValue().Set(info[0]); |
- ConsoleHelper helper(info, inspector); |
- InjectedScript* injectedScript = helper.injectedScript(); |
- if (!injectedScript) return; |
std::unique_ptr<protocol::Runtime::RemoteObject> wrappedObject; |
protocol::Response response = |
injectedScript->wrapObject(info[0], "", false /** forceValueType */, |
@@ -529,26 +523,32 @@ static void inspectImpl(const v8::FunctionCallbackInfo<v8::Value>& info, |
std::unique_ptr<protocol::DictionaryValue> hints = |
protocol::DictionaryValue::create(); |
if (copyToClipboard) hints->setBoolean("copyToClipboard", true); |
- if (V8InspectorSessionImpl* session = helper.currentSession()) { |
- session->runtimeAgent()->inspect(std::move(wrappedObject), |
- std::move(hints)); |
- } |
+ agent->inspect(std::move(wrappedObject), std::move(hints)); |
} |
void V8Console::inspectCallback( |
const v8::FunctionCallbackInfo<v8::Value>& info) { |
- inspectImpl(info, false, m_inspector); |
+ if (info.Length() < 1) return; |
+ V8RuntimeAgentImpl* agent = runtimeAgent(); |
+ if (!agent) return; |
+ InjectedScript* injected = injectedScript(); |
+ if (!injected) return; |
+ inspectImpl(info, false, m_inspector, agent, injected); |
} |
void V8Console::copyCallback(const v8::FunctionCallbackInfo<v8::Value>& info) { |
- inspectImpl(info, true, m_inspector); |
+ if (info.Length() < 1) return; |
+ V8RuntimeAgentImpl* agent = runtimeAgent(); |
+ if (!agent) return; |
+ InjectedScript* injected = injectedScript(); |
+ if (!injected) return; |
+ inspectImpl(info, true, m_inspector, agent, injected); |
} |
void V8Console::inspectedObject(const v8::FunctionCallbackInfo<v8::Value>& info, |
unsigned num) { |
DCHECK(num < V8InspectorSessionImpl::kInspectedObjectBufferSize); |
- ConsoleHelper helper(info, m_inspector); |
- if (V8InspectorSessionImpl* session = helper.currentSession()) { |
+ if (V8InspectorSessionImpl* session = currentSession()) { |
V8InspectorSession::Inspectable* object = session->inspectedObject(num); |
v8::Isolate* isolate = info.GetIsolate(); |
if (object) |