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/V8ConsoleMessage.h" | 5 #include "src/inspector/V8ConsoleMessage.h" |
6 | 6 |
7 #include "src/inspector/InspectedContext.h" | 7 #include "src/inspector/InspectedContext.h" |
8 #include "src/inspector/StringUtil.h" | 8 #include "src/inspector/StringUtil.h" |
9 #include "src/inspector/V8ConsoleAgentImpl.h" | 9 #include "src/inspector/V8ConsoleAgentImpl.h" |
10 #include "src/inspector/V8InspectorImpl.h" | 10 #include "src/inspector/V8InspectorImpl.h" |
(...skipping 319 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
330 | 330 |
331 V8MessageOrigin V8ConsoleMessage::origin() const { return m_origin; } | 331 V8MessageOrigin V8ConsoleMessage::origin() const { return m_origin; } |
332 | 332 |
333 ConsoleAPIType V8ConsoleMessage::type() const { return m_type; } | 333 ConsoleAPIType V8ConsoleMessage::type() const { return m_type; } |
334 | 334 |
335 // static | 335 // static |
336 std::unique_ptr<V8ConsoleMessage> V8ConsoleMessage::createForConsoleAPI( | 336 std::unique_ptr<V8ConsoleMessage> V8ConsoleMessage::createForConsoleAPI( |
337 double timestamp, ConsoleAPIType type, | 337 double timestamp, ConsoleAPIType type, |
338 const std::vector<v8::Local<v8::Value>>& arguments, | 338 const std::vector<v8::Local<v8::Value>>& arguments, |
339 std::unique_ptr<V8StackTraceImpl> stackTrace, InspectedContext* context) { | 339 std::unique_ptr<V8StackTraceImpl> stackTrace, InspectedContext* context) { |
| 340 v8::Isolate* isolate = context->isolate(); |
| 341 int contextId = context->contextId(); |
| 342 int contextGroupId = context->contextGroupId(); |
| 343 V8InspectorImpl* inspector = context->inspector(); |
| 344 |
340 std::unique_ptr<V8ConsoleMessage> message = wrapUnique( | 345 std::unique_ptr<V8ConsoleMessage> message = wrapUnique( |
341 new V8ConsoleMessage(V8MessageOrigin::kConsole, timestamp, String16())); | 346 new V8ConsoleMessage(V8MessageOrigin::kConsole, timestamp, String16())); |
342 if (stackTrace && !stackTrace->isEmpty()) { | 347 if (stackTrace && !stackTrace->isEmpty()) { |
343 message->m_url = toString16(stackTrace->topSourceURL()); | 348 message->m_url = toString16(stackTrace->topSourceURL()); |
344 message->m_lineNumber = stackTrace->topLineNumber(); | 349 message->m_lineNumber = stackTrace->topLineNumber(); |
345 message->m_columnNumber = stackTrace->topColumnNumber(); | 350 message->m_columnNumber = stackTrace->topColumnNumber(); |
346 } | 351 } |
347 message->m_stackTrace = std::move(stackTrace); | 352 message->m_stackTrace = std::move(stackTrace); |
348 message->m_type = type; | 353 message->m_type = type; |
349 message->m_contextId = context->contextId(); | 354 message->m_contextId = contextId; |
350 for (size_t i = 0; i < arguments.size(); ++i) | 355 for (size_t i = 0; i < arguments.size(); ++i) |
351 message->m_arguments.push_back(wrapUnique( | 356 message->m_arguments.push_back( |
352 new v8::Global<v8::Value>(context->isolate(), arguments.at(i)))); | 357 wrapUnique(new v8::Global<v8::Value>(isolate, arguments.at(i)))); |
353 if (arguments.size()) | 358 if (arguments.size()) |
354 message->m_message = | 359 message->m_message = V8ValueStringBuilder::toString(arguments[0], isolate); |
355 V8ValueStringBuilder::toString(arguments[0], context->isolate()); | |
356 | 360 |
357 V8ConsoleAPIType clientType = V8ConsoleAPIType::kLog; | 361 V8ConsoleAPIType clientType = V8ConsoleAPIType::kLog; |
358 if (type == ConsoleAPIType::kDebug || type == ConsoleAPIType::kCount || | 362 if (type == ConsoleAPIType::kDebug || type == ConsoleAPIType::kCount || |
359 type == ConsoleAPIType::kTimeEnd) | 363 type == ConsoleAPIType::kTimeEnd) |
360 clientType = V8ConsoleAPIType::kDebug; | 364 clientType = V8ConsoleAPIType::kDebug; |
361 else if (type == ConsoleAPIType::kError || type == ConsoleAPIType::kAssert) | 365 else if (type == ConsoleAPIType::kError || type == ConsoleAPIType::kAssert) |
362 clientType = V8ConsoleAPIType::kError; | 366 clientType = V8ConsoleAPIType::kError; |
363 else if (type == ConsoleAPIType::kWarning) | 367 else if (type == ConsoleAPIType::kWarning) |
364 clientType = V8ConsoleAPIType::kWarning; | 368 clientType = V8ConsoleAPIType::kWarning; |
365 else if (type == ConsoleAPIType::kInfo) | 369 else if (type == ConsoleAPIType::kInfo) |
366 clientType = V8ConsoleAPIType::kInfo; | 370 clientType = V8ConsoleAPIType::kInfo; |
367 else if (type == ConsoleAPIType::kClear) | 371 else if (type == ConsoleAPIType::kClear) |
368 clientType = V8ConsoleAPIType::kClear; | 372 clientType = V8ConsoleAPIType::kClear; |
369 context->inspector()->client()->consoleAPIMessage( | 373 inspector->client()->consoleAPIMessage( |
370 context->contextGroupId(), clientType, toStringView(message->m_message), | 374 contextGroupId, clientType, toStringView(message->m_message), |
371 toStringView(message->m_url), message->m_lineNumber, | 375 toStringView(message->m_url), message->m_lineNumber, |
372 message->m_columnNumber, message->m_stackTrace.get()); | 376 message->m_columnNumber, message->m_stackTrace.get()); |
373 | 377 |
374 return message; | 378 return message; |
375 } | 379 } |
376 | 380 |
377 // static | 381 // static |
378 std::unique_ptr<V8ConsoleMessage> V8ConsoleMessage::createForException( | 382 std::unique_ptr<V8ConsoleMessage> V8ConsoleMessage::createForException( |
379 double timestamp, const String16& detailedMessage, const String16& url, | 383 double timestamp, const String16& detailedMessage, const String16& url, |
380 unsigned lineNumber, unsigned columnNumber, | 384 unsigned lineNumber, unsigned columnNumber, |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
418 V8ConsoleMessageStorage::V8ConsoleMessageStorage(V8InspectorImpl* inspector, | 422 V8ConsoleMessageStorage::V8ConsoleMessageStorage(V8InspectorImpl* inspector, |
419 int contextGroupId) | 423 int contextGroupId) |
420 : m_inspector(inspector), | 424 : m_inspector(inspector), |
421 m_contextGroupId(contextGroupId), | 425 m_contextGroupId(contextGroupId), |
422 m_expiredCount(0) {} | 426 m_expiredCount(0) {} |
423 | 427 |
424 V8ConsoleMessageStorage::~V8ConsoleMessageStorage() { clear(); } | 428 V8ConsoleMessageStorage::~V8ConsoleMessageStorage() { clear(); } |
425 | 429 |
426 void V8ConsoleMessageStorage::addMessage( | 430 void V8ConsoleMessageStorage::addMessage( |
427 std::unique_ptr<V8ConsoleMessage> message) { | 431 std::unique_ptr<V8ConsoleMessage> message) { |
| 432 int contextGroupId = m_contextGroupId; |
| 433 V8InspectorImpl* inspector = m_inspector; |
428 if (message->type() == ConsoleAPIType::kClear) clear(); | 434 if (message->type() == ConsoleAPIType::kClear) clear(); |
429 | 435 |
430 V8InspectorSessionImpl* session = | 436 V8InspectorSessionImpl* session = |
431 m_inspector->sessionForContextGroup(m_contextGroupId); | 437 inspector->sessionForContextGroup(contextGroupId); |
432 if (session) { | 438 if (session) { |
433 if (message->origin() == V8MessageOrigin::kConsole) | 439 if (message->origin() == V8MessageOrigin::kConsole) |
434 session->consoleAgent()->messageAdded(message.get()); | 440 session->consoleAgent()->messageAdded(message.get()); |
435 session->runtimeAgent()->messageAdded(message.get()); | 441 session->runtimeAgent()->messageAdded(message.get()); |
436 } | 442 } |
| 443 if (!inspector->hasConsoleMessageStorage(contextGroupId)) return; |
437 | 444 |
438 DCHECK(m_messages.size() <= maxConsoleMessageCount); | 445 DCHECK(m_messages.size() <= maxConsoleMessageCount); |
439 if (m_messages.size() == maxConsoleMessageCount) { | 446 if (m_messages.size() == maxConsoleMessageCount) { |
440 ++m_expiredCount; | 447 ++m_expiredCount; |
441 m_messages.pop_front(); | 448 m_messages.pop_front(); |
442 } | 449 } |
443 m_messages.push_back(std::move(message)); | 450 m_messages.push_back(std::move(message)); |
444 } | 451 } |
445 | 452 |
446 void V8ConsoleMessageStorage::clear() { | 453 void V8ConsoleMessageStorage::clear() { |
447 m_messages.clear(); | 454 m_messages.clear(); |
448 m_expiredCount = 0; | 455 m_expiredCount = 0; |
449 if (V8InspectorSessionImpl* session = | 456 if (V8InspectorSessionImpl* session = |
450 m_inspector->sessionForContextGroup(m_contextGroupId)) | 457 m_inspector->sessionForContextGroup(m_contextGroupId)) |
451 session->releaseObjectGroup("console"); | 458 session->releaseObjectGroup("console"); |
452 } | 459 } |
453 | 460 |
454 void V8ConsoleMessageStorage::contextDestroyed(int contextId) { | 461 void V8ConsoleMessageStorage::contextDestroyed(int contextId) { |
455 for (size_t i = 0; i < m_messages.size(); ++i) | 462 for (size_t i = 0; i < m_messages.size(); ++i) |
456 m_messages[i]->contextDestroyed(contextId); | 463 m_messages[i]->contextDestroyed(contextId); |
457 } | 464 } |
458 | 465 |
459 } // namespace v8_inspector | 466 } // namespace v8_inspector |
OLD | NEW |