OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 "platform/v8_inspector/V8ConsoleMessage.h" | 5 #include "platform/v8_inspector/V8ConsoleMessage.h" |
6 | 6 |
7 #include "platform/v8_inspector/InspectedContext.h" | 7 #include "platform/v8_inspector/InspectedContext.h" |
8 #include "platform/v8_inspector/V8ConsoleAgentImpl.h" | 8 #include "platform/v8_inspector/V8ConsoleAgentImpl.h" |
9 #include "platform/v8_inspector/V8DebuggerImpl.h" | 9 #include "platform/v8_inspector/V8DebuggerImpl.h" |
10 #include "platform/v8_inspector/V8InspectorSessionImpl.h" | 10 #include "platform/v8_inspector/V8InspectorSessionImpl.h" |
(...skipping 12 matching lines...) Expand all Loading... |
23 case XMLMessageSource: return protocol::Console::ConsoleMessage::SourceEnum:
:Xml; | 23 case XMLMessageSource: return protocol::Console::ConsoleMessage::SourceEnum:
:Xml; |
24 case JSMessageSource: return protocol::Console::ConsoleMessage::SourceEnum::
Javascript; | 24 case JSMessageSource: return protocol::Console::ConsoleMessage::SourceEnum::
Javascript; |
25 case NetworkMessageSource: return protocol::Console::ConsoleMessage::SourceE
num::Network; | 25 case NetworkMessageSource: return protocol::Console::ConsoleMessage::SourceE
num::Network; |
26 case ConsoleAPIMessageSource: return protocol::Console::ConsoleMessage::Sour
ceEnum::ConsoleApi; | 26 case ConsoleAPIMessageSource: return protocol::Console::ConsoleMessage::Sour
ceEnum::ConsoleApi; |
27 case StorageMessageSource: return protocol::Console::ConsoleMessage::SourceE
num::Storage; | 27 case StorageMessageSource: return protocol::Console::ConsoleMessage::SourceE
num::Storage; |
28 case AppCacheMessageSource: return protocol::Console::ConsoleMessage::Source
Enum::Appcache; | 28 case AppCacheMessageSource: return protocol::Console::ConsoleMessage::Source
Enum::Appcache; |
29 case RenderingMessageSource: return protocol::Console::ConsoleMessage::Sourc
eEnum::Rendering; | 29 case RenderingMessageSource: return protocol::Console::ConsoleMessage::Sourc
eEnum::Rendering; |
30 case SecurityMessageSource: return protocol::Console::ConsoleMessage::Source
Enum::Security; | 30 case SecurityMessageSource: return protocol::Console::ConsoleMessage::Source
Enum::Security; |
31 case OtherMessageSource: return protocol::Console::ConsoleMessage::SourceEnu
m::Other; | 31 case OtherMessageSource: return protocol::Console::ConsoleMessage::SourceEnu
m::Other; |
32 case DeprecationMessageSource: return protocol::Console::ConsoleMessage::Sou
rceEnum::Deprecation; | 32 case DeprecationMessageSource: return protocol::Console::ConsoleMessage::Sou
rceEnum::Deprecation; |
| 33 case WorkerMessageSource: return protocol::Console::ConsoleMessage::SourceEn
um::Worker; |
33 } | 34 } |
34 return protocol::Console::ConsoleMessage::SourceEnum::Other; | 35 return protocol::Console::ConsoleMessage::SourceEnum::Other; |
35 } | 36 } |
36 | 37 |
37 | 38 |
38 String messageTypeValue(MessageType type) | 39 String messageTypeValue(MessageType type) |
39 { | 40 { |
40 switch (type) { | 41 switch (type) { |
41 case LogMessageType: return protocol::Console::ConsoleMessage::TypeEnum::Log
; | 42 case LogMessageType: return protocol::Console::ConsoleMessage::TypeEnum::Log
; |
42 case ClearMessageType: return protocol::Console::ConsoleMessage::TypeEnum::C
lear; | 43 case ClearMessageType: return protocol::Console::ConsoleMessage::TypeEnum::C
lear; |
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
190 | 191 |
191 uint32_t m_arrayLimit; | 192 uint32_t m_arrayLimit; |
192 v8::Isolate* m_isolate; | 193 v8::Isolate* m_isolate; |
193 String16Builder m_builder; | 194 String16Builder m_builder; |
194 Vector<v8::Local<v8::Array>> m_visitedArrays; | 195 Vector<v8::Local<v8::Array>> m_visitedArrays; |
195 v8::TryCatch m_tryCatch; | 196 v8::TryCatch m_tryCatch; |
196 }; | 197 }; |
197 | 198 |
198 } // namespace | 199 } // namespace |
199 | 200 |
200 V8ConsoleMessage::V8ConsoleMessage( | 201 V8ConsoleMessage::V8ConsoleMessage(V8MessageOrigin origin, double timestamp, Mes
sageSource source, MessageLevel level, const String16& message) |
201 double timestamp, | 202 : m_origin(origin) |
202 MessageSource source, | |
203 MessageLevel level, | |
204 const String16& message, | |
205 const String16& url, | |
206 unsigned lineNumber, | |
207 unsigned columnNumber, | |
208 std::unique_ptr<V8StackTrace> stackTrace, | |
209 int scriptId, | |
210 const String16& requestIdentifier) | |
211 : m_origin(V8MessageOrigin::kConsole) | |
212 , m_timestamp(timestamp) | 203 , m_timestamp(timestamp) |
213 , m_source(source) | 204 , m_source(source) |
214 , m_level(level) | 205 , m_level(level) |
215 , m_message(message) | 206 , m_message(message) |
216 , m_url(url) | 207 , m_lineNumber(0) |
217 , m_lineNumber(lineNumber) | 208 , m_columnNumber(0) |
218 , m_columnNumber(columnNumber) | 209 , m_scriptId(0) |
219 , m_stackTrace(std::move(stackTrace)) | |
220 , m_scriptId(scriptId) | |
221 , m_requestIdentifier(requestIdentifier) | |
222 , m_contextId(0) | 210 , m_contextId(0) |
223 , m_type(LogMessageType) | 211 , m_type(LogMessageType) |
224 , m_exceptionId(0) | 212 , m_exceptionId(0) |
225 , m_revokedExceptionId(0) | 213 , m_revokedExceptionId(0) |
226 { | 214 { |
227 } | 215 } |
228 | 216 |
229 V8ConsoleMessage::~V8ConsoleMessage() | 217 V8ConsoleMessage::~V8ConsoleMessage() |
230 { | 218 { |
231 } | 219 } |
232 | 220 |
| 221 void V8ConsoleMessage::setLocation(const String16& url, unsigned lineNumber, uns
igned columnNumber, std::unique_ptr<V8StackTrace> stackTrace, int scriptId) |
| 222 { |
| 223 m_url = url; |
| 224 m_lineNumber = lineNumber; |
| 225 m_columnNumber = columnNumber; |
| 226 m_stackTrace = std::move(stackTrace); |
| 227 m_scriptId = scriptId; |
| 228 } |
| 229 |
233 void V8ConsoleMessage::reportToFrontend(protocol::Console::Frontend* frontend, V
8InspectorSessionImpl* session, bool generatePreview) const | 230 void V8ConsoleMessage::reportToFrontend(protocol::Console::Frontend* frontend, V
8InspectorSessionImpl* session, bool generatePreview) const |
234 { | 231 { |
235 DCHECK_EQ(V8MessageOrigin::kConsole, m_origin); | 232 DCHECK_EQ(V8MessageOrigin::kConsole, m_origin); |
236 std::unique_ptr<protocol::Console::ConsoleMessage> result = | 233 std::unique_ptr<protocol::Console::ConsoleMessage> result = |
237 protocol::Console::ConsoleMessage::create() | 234 protocol::Console::ConsoleMessage::create() |
238 .setSource(messageSourceValue(m_source)) | 235 .setSource(messageSourceValue(m_source)) |
239 .setLevel(messageLevelValue(m_level)) | 236 .setLevel(messageLevelValue(m_level)) |
240 .setText(m_message) | 237 .setText(m_message) |
241 .setTimestamp(m_timestamp / 1000) // TODO(dgozman): migrate this to mill
iseconds. | 238 .setTimestamp(m_timestamp / 1000) // TODO(dgozman): migrate this to mill
iseconds. |
242 .build(); | 239 .build(); |
243 result->setType(messageTypeValue(m_type)); | 240 result->setType(messageTypeValue(m_type)); |
244 result->setLine(static_cast<int>(m_lineNumber)); | 241 result->setLine(static_cast<int>(m_lineNumber)); |
245 result->setColumn(static_cast<int>(m_columnNumber)); | 242 result->setColumn(static_cast<int>(m_columnNumber)); |
246 if (m_scriptId) | 243 if (m_scriptId) |
247 result->setScriptId(String::number(m_scriptId)); | 244 result->setScriptId(String::number(m_scriptId)); |
248 result->setUrl(m_url); | 245 result->setUrl(m_url); |
249 if (m_source == NetworkMessageSource && !m_requestIdentifier.isEmpty()) | 246 if (m_source == NetworkMessageSource && !m_requestIdentifier.isEmpty()) |
250 result->setNetworkRequestId(m_requestIdentifier); | 247 result->setNetworkRequestId(m_requestIdentifier); |
251 if (m_contextId) | 248 if (m_contextId) |
252 result->setExecutionContextId(m_contextId); | 249 result->setExecutionContextId(m_contextId); |
253 std::unique_ptr<protocol::Array<protocol::Runtime::RemoteObject>> args = wra
pArguments(session, generatePreview); | 250 std::unique_ptr<protocol::Array<protocol::Runtime::RemoteObject>> args = wra
pArguments(session, generatePreview); |
254 if (args) | 251 if (args) |
255 result->setParameters(std::move(args)); | 252 result->setParameters(std::move(args)); |
256 if (m_stackTrace) | 253 if (m_stackTrace) |
257 result->setStack(m_stackTrace->buildInspectorObject()); | 254 result->setStack(m_stackTrace->buildInspectorObject()); |
| 255 if (m_source == WorkerMessageSource && !m_workerId.isEmpty()) |
| 256 result->setWorkerId(m_workerId); |
258 frontend->messageAdded(std::move(result)); | 257 frontend->messageAdded(std::move(result)); |
259 } | 258 } |
260 | 259 |
261 std::unique_ptr<protocol::Array<protocol::Runtime::RemoteObject>> V8ConsoleMessa
ge::wrapArguments(V8InspectorSessionImpl* session, bool generatePreview) const | 260 std::unique_ptr<protocol::Array<protocol::Runtime::RemoteObject>> V8ConsoleMessa
ge::wrapArguments(V8InspectorSessionImpl* session, bool generatePreview) const |
262 { | 261 { |
263 if (!m_arguments.size() || !m_contextId) | 262 if (!m_arguments.size() || !m_contextId) |
264 return nullptr; | 263 return nullptr; |
265 InspectedContext* inspectedContext = session->debugger()->getContext(session
->contextGroupId(), m_contextId); | 264 InspectedContext* inspectedContext = session->debugger()->getContext(session
->contextGroupId(), m_contextId); |
266 if (!inspectedContext) | 265 if (!inspectedContext) |
267 return nullptr; | 266 return nullptr; |
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
367 String16 actualMessage = messageText; | 366 String16 actualMessage = messageText; |
368 | 367 |
369 Arguments messageArguments; | 368 Arguments messageArguments; |
370 if (arguments && arguments->size()) { | 369 if (arguments && arguments->size()) { |
371 for (size_t i = 0; i < arguments->size(); ++i) | 370 for (size_t i = 0; i < arguments->size(); ++i) |
372 messageArguments.push_back(wrapUnique(new v8::Global<v8::Value>(cont
ext->isolate(), arguments->at(i)))); | 371 messageArguments.push_back(wrapUnique(new v8::Global<v8::Value>(cont
ext->isolate(), arguments->at(i)))); |
373 if (actualMessage.isEmpty()) | 372 if (actualMessage.isEmpty()) |
374 actualMessage = V8ValueStringBuilder::toString(messageArguments.at(0
)->Get(context->isolate()), context->isolate()); | 373 actualMessage = V8ValueStringBuilder::toString(messageArguments.at(0
)->Get(context->isolate()), context->isolate()); |
375 } | 374 } |
376 | 375 |
377 std::unique_ptr<V8ConsoleMessage> message = wrapUnique(new V8ConsoleMessage(
timestamp, ConsoleAPIMessageSource, level, actualMessage, url, lineNumber, colum
nNumber, std::move(stackTrace), 0 /* scriptId */, String16() /* requestIdentifie
r */)); | 376 std::unique_ptr<V8ConsoleMessage> message = wrapUnique(new V8ConsoleMessage(
V8MessageOrigin::kConsole, timestamp, ConsoleAPIMessageSource, level, actualMess
age)); |
| 377 message->setLocation(url, lineNumber, columnNumber, std::move(stackTrace), 0
); |
378 message->m_type = type; | 378 message->m_type = type; |
379 if (messageArguments.size()) { | 379 if (messageArguments.size()) { |
380 message->m_contextId = context->contextId(); | 380 message->m_contextId = context->contextId(); |
381 message->m_arguments.swap(messageArguments); | 381 message->m_arguments.swap(messageArguments); |
382 } | 382 } |
383 | 383 |
384 context->debugger()->client()->messageAddedToConsole(context->contextGroupId
(), message->m_source, message->m_level, message->m_message, message->m_url, mes
sage->m_lineNumber, message->m_columnNumber, message->m_stackTrace.get()); | 384 context->debugger()->client()->messageAddedToConsole(context->contextGroupId
(), message->m_source, message->m_level, message->m_message, message->m_url, mes
sage->m_lineNumber, message->m_columnNumber, message->m_stackTrace.get()); |
385 return message; | 385 return message; |
386 } | 386 } |
387 | 387 |
388 // static | 388 // static |
389 std::unique_ptr<V8ConsoleMessage> V8ConsoleMessage::createForException(double ti
mestamp, const String16& messageText, const String16& url, unsigned lineNumber,
unsigned columnNumber, std::unique_ptr<V8StackTrace> stackTrace, int scriptId, v
8::Isolate* isolate, int contextId, v8::Local<v8::Value> exception, unsigned exc
eptionId) | 389 std::unique_ptr<V8ConsoleMessage> V8ConsoleMessage::createForException(double ti
mestamp, const String16& messageText, const String16& url, unsigned lineNumber,
unsigned columnNumber, std::unique_ptr<V8StackTrace> stackTrace, int scriptId, v
8::Isolate* isolate, int contextId, v8::Local<v8::Value> exception, unsigned exc
eptionId) |
390 { | 390 { |
391 std::unique_ptr<V8ConsoleMessage> message = wrapUnique(new V8ConsoleMessage(
timestamp, JSMessageSource, ErrorMessageLevel, messageText, url, lineNumber, col
umnNumber, std::move(stackTrace), scriptId, String16() /* requestIdentifier */))
; | 391 std::unique_ptr<V8ConsoleMessage> message = wrapUnique(new V8ConsoleMessage(
V8MessageOrigin::kException, timestamp, JSMessageSource, ErrorMessageLevel, mess
ageText)); |
| 392 message->setLocation(url, lineNumber, columnNumber, std::move(stackTrace), s
criptId); |
392 message->m_exceptionId = exceptionId; | 393 message->m_exceptionId = exceptionId; |
393 message->m_origin = V8MessageOrigin::kException; | |
394 if (contextId && !exception.IsEmpty()) { | 394 if (contextId && !exception.IsEmpty()) { |
395 message->m_contextId = contextId; | 395 message->m_contextId = contextId; |
396 message->m_arguments.push_back(wrapUnique(new v8::Global<v8::Value>(isol
ate, exception))); | 396 message->m_arguments.push_back(wrapUnique(new v8::Global<v8::Value>(isol
ate, exception))); |
397 } | 397 } |
398 return message; | 398 return message; |
399 } | 399 } |
400 | 400 |
401 // static | 401 // static |
402 std::unique_ptr<V8ConsoleMessage> V8ConsoleMessage::createForRevokedException(do
uble timestamp, const String16& messageText, unsigned revokedExceptionId) | 402 std::unique_ptr<V8ConsoleMessage> V8ConsoleMessage::createForRevokedException(do
uble timestamp, const String16& messageText, unsigned revokedExceptionId) |
403 { | 403 { |
404 std::unique_ptr<V8ConsoleMessage> message = wrapUnique(new V8ConsoleMessage(
timestamp, JSMessageSource, ErrorMessageLevel, messageText, String16(), 0, 0, nu
llptr, 0, String16())); | 404 std::unique_ptr<V8ConsoleMessage> message = wrapUnique(new V8ConsoleMessage(
V8MessageOrigin::kRevokedException, timestamp, JSMessageSource, ErrorMessageLeve
l, messageText)); |
405 message->m_origin = V8MessageOrigin::kRevokedException; | |
406 message->m_revokedExceptionId = revokedExceptionId; | 405 message->m_revokedExceptionId = revokedExceptionId; |
407 return message; | 406 return message; |
408 } | 407 } |
409 | 408 |
| 409 // static |
| 410 std::unique_ptr<V8ConsoleMessage> V8ConsoleMessage::createExternal(double timest
amp, MessageSource source, MessageLevel level, const String16& messageText, cons
t String16& url, unsigned lineNumber, unsigned columnNumber, std::unique_ptr<V8S
tackTrace> stackTrace, int scriptId, const String16& requestIdentifier, const St
ring16& workerId) |
| 411 { |
| 412 std::unique_ptr<V8ConsoleMessage> message = wrapUnique(new V8ConsoleMessage(
V8MessageOrigin::kConsole, timestamp, source, level, messageText)); |
| 413 message->setLocation(url, lineNumber, columnNumber, std::move(stackTrace), s
criptId); |
| 414 message->m_requestIdentifier = requestIdentifier; |
| 415 message->m_workerId = workerId; |
| 416 return message; |
| 417 } |
| 418 |
410 void V8ConsoleMessage::contextDestroyed(int contextId) | 419 void V8ConsoleMessage::contextDestroyed(int contextId) |
411 { | 420 { |
412 if (contextId != m_contextId) | 421 if (contextId != m_contextId) |
413 return; | 422 return; |
414 m_contextId = 0; | 423 m_contextId = 0; |
415 if (m_message.isEmpty()) | 424 if (m_message.isEmpty()) |
416 m_message = "<message collected>"; | 425 m_message = "<message collected>"; |
417 Arguments empty; | 426 Arguments empty; |
418 m_arguments.swap(empty); | 427 m_arguments.swap(empty); |
419 } | 428 } |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
465 } | 474 } |
466 } | 475 } |
467 | 476 |
468 void V8ConsoleMessageStorage::contextDestroyed(int contextId) | 477 void V8ConsoleMessageStorage::contextDestroyed(int contextId) |
469 { | 478 { |
470 for (size_t i = 0; i < m_messages.size(); ++i) | 479 for (size_t i = 0; i < m_messages.size(); ++i) |
471 m_messages[i]->contextDestroyed(contextId); | 480 m_messages[i]->contextDestroyed(contextId); |
472 } | 481 } |
473 | 482 |
474 } // namespace blink | 483 } // namespace blink |
OLD | NEW |