| 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" |
| 11 #include "platform/v8_inspector/V8RuntimeAgentImpl.h" | 11 #include "platform/v8_inspector/V8RuntimeAgentImpl.h" |
| 12 #include "platform/v8_inspector/V8StackTraceImpl.h" | 12 #include "platform/v8_inspector/V8StackTraceImpl.h" |
| 13 #include "platform/v8_inspector/V8StringUtil.h" | 13 #include "platform/v8_inspector/V8StringUtil.h" |
| 14 #include "platform/v8_inspector/public/V8DebuggerClient.h" | 14 #include "platform/v8_inspector/public/V8DebuggerClient.h" |
| 15 | 15 |
| 16 namespace blink { | 16 namespace blink { |
| 17 | 17 |
| 18 namespace { | 18 namespace { |
| 19 | 19 |
| 20 String16 messageSourceValue(MessageSource source) | |
| 21 { | |
| 22 switch (source) { | |
| 23 case XMLMessageSource: return protocol::Console::ConsoleMessage::SourceEnum:
:Xml; | |
| 24 case JSMessageSource: return protocol::Console::ConsoleMessage::SourceEnum::
Javascript; | |
| 25 case NetworkMessageSource: return protocol::Console::ConsoleMessage::SourceE
num::Network; | |
| 26 case ConsoleAPIMessageSource: return protocol::Console::ConsoleMessage::Sour
ceEnum::ConsoleApi; | |
| 27 case StorageMessageSource: return protocol::Console::ConsoleMessage::SourceE
num::Storage; | |
| 28 case AppCacheMessageSource: return protocol::Console::ConsoleMessage::Source
Enum::Appcache; | |
| 29 case RenderingMessageSource: return protocol::Console::ConsoleMessage::Sourc
eEnum::Rendering; | |
| 30 case SecurityMessageSource: return protocol::Console::ConsoleMessage::Source
Enum::Security; | |
| 31 case OtherMessageSource: return protocol::Console::ConsoleMessage::SourceEnu
m::Other; | |
| 32 case DeprecationMessageSource: return protocol::Console::ConsoleMessage::Sou
rceEnum::Deprecation; | |
| 33 case WorkerMessageSource: return protocol::Console::ConsoleMessage::SourceEn
um::Worker; | |
| 34 } | |
| 35 return protocol::Console::ConsoleMessage::SourceEnum::Other; | |
| 36 } | |
| 37 | |
| 38 | |
| 39 String16 consoleAPITypeValue(ConsoleAPIType type) | 20 String16 consoleAPITypeValue(ConsoleAPIType type) |
| 40 { | 21 { |
| 41 switch (type) { | 22 switch (type) { |
| 42 case ConsoleAPIType::kLog: return protocol::Runtime::ConsoleAPICalled::TypeE
num::Log; | 23 case ConsoleAPIType::kLog: return protocol::Runtime::ConsoleAPICalled::TypeE
num::Log; |
| 43 case ConsoleAPIType::kDebug: return protocol::Runtime::ConsoleAPICalled::Typ
eEnum::Debug; | 24 case ConsoleAPIType::kDebug: return protocol::Runtime::ConsoleAPICalled::Typ
eEnum::Debug; |
| 44 case ConsoleAPIType::kInfo: return protocol::Runtime::ConsoleAPICalled::Type
Enum::Info; | 25 case ConsoleAPIType::kInfo: return protocol::Runtime::ConsoleAPICalled::Type
Enum::Info; |
| 45 case ConsoleAPIType::kError: return protocol::Runtime::ConsoleAPICalled::Typ
eEnum::Error; | 26 case ConsoleAPIType::kError: return protocol::Runtime::ConsoleAPICalled::Typ
eEnum::Error; |
| 46 case ConsoleAPIType::kWarning: return protocol::Runtime::ConsoleAPICalled::T
ypeEnum::Warning; | 27 case ConsoleAPIType::kWarning: return protocol::Runtime::ConsoleAPICalled::T
ypeEnum::Warning; |
| 47 case ConsoleAPIType::kClear: return protocol::Runtime::ConsoleAPICalled::Typ
eEnum::Clear; | 28 case ConsoleAPIType::kClear: return protocol::Runtime::ConsoleAPICalled::Typ
eEnum::Clear; |
| 48 case ConsoleAPIType::kDir: return protocol::Runtime::ConsoleAPICalled::TypeE
num::Dir; | 29 case ConsoleAPIType::kDir: return protocol::Runtime::ConsoleAPICalled::TypeE
num::Dir; |
| 49 case ConsoleAPIType::kDirXML: return protocol::Runtime::ConsoleAPICalled::Ty
peEnum::Dirxml; | 30 case ConsoleAPIType::kDirXML: return protocol::Runtime::ConsoleAPICalled::Ty
peEnum::Dirxml; |
| 50 case ConsoleAPIType::kTable: return protocol::Runtime::ConsoleAPICalled::Typ
eEnum::Table; | 31 case ConsoleAPIType::kTable: return protocol::Runtime::ConsoleAPICalled::Typ
eEnum::Table; |
| 51 case ConsoleAPIType::kTrace: return protocol::Runtime::ConsoleAPICalled::Typ
eEnum::Trace; | 32 case ConsoleAPIType::kTrace: return protocol::Runtime::ConsoleAPICalled::Typ
eEnum::Trace; |
| 52 case ConsoleAPIType::kStartGroup: return protocol::Runtime::ConsoleAPICalled
::TypeEnum::StartGroup; | 33 case ConsoleAPIType::kStartGroup: return protocol::Runtime::ConsoleAPICalled
::TypeEnum::StartGroup; |
| 53 case ConsoleAPIType::kStartGroupCollapsed: return protocol::Runtime::Console
APICalled::TypeEnum::StartGroupCollapsed; | 34 case ConsoleAPIType::kStartGroupCollapsed: return protocol::Runtime::Console
APICalled::TypeEnum::StartGroupCollapsed; |
| 54 case ConsoleAPIType::kEndGroup: return protocol::Runtime::ConsoleAPICalled::
TypeEnum::EndGroup; | 35 case ConsoleAPIType::kEndGroup: return protocol::Runtime::ConsoleAPICalled::
TypeEnum::EndGroup; |
| 55 case ConsoleAPIType::kAssert: return protocol::Runtime::ConsoleAPICalled::Ty
peEnum::Assert; | 36 case ConsoleAPIType::kAssert: return protocol::Runtime::ConsoleAPICalled::Ty
peEnum::Assert; |
| 56 case ConsoleAPIType::kTimeEnd: return protocol::Runtime::ConsoleAPICalled::T
ypeEnum::Debug; | 37 case ConsoleAPIType::kTimeEnd: return protocol::Runtime::ConsoleAPICalled::T
ypeEnum::Debug; |
| 57 case ConsoleAPIType::kCount: return protocol::Runtime::ConsoleAPICalled::Typ
eEnum::Debug; | 38 case ConsoleAPIType::kCount: return protocol::Runtime::ConsoleAPICalled::Typ
eEnum::Debug; |
| 58 } | 39 } |
| 59 return protocol::Runtime::ConsoleAPICalled::TypeEnum::Log; | 40 return protocol::Runtime::ConsoleAPICalled::TypeEnum::Log; |
| 60 } | 41 } |
| 61 | 42 |
| 62 String16 messageLevelValue(MessageLevel level) | |
| 63 { | |
| 64 switch (level) { | |
| 65 case DebugMessageLevel: return protocol::Console::ConsoleMessage::LevelEnum:
:Debug; | |
| 66 case LogMessageLevel: return protocol::Console::ConsoleMessage::LevelEnum::L
og; | |
| 67 case WarningMessageLevel: return protocol::Console::ConsoleMessage::LevelEnu
m::Warning; | |
| 68 case ErrorMessageLevel: return protocol::Console::ConsoleMessage::LevelEnum:
:Error; | |
| 69 case InfoMessageLevel: return protocol::Console::ConsoleMessage::LevelEnum::
Info; | |
| 70 } | |
| 71 return protocol::Console::ConsoleMessage::LevelEnum::Log; | |
| 72 } | |
| 73 | |
| 74 const unsigned maxConsoleMessageCount = 1000; | 43 const unsigned maxConsoleMessageCount = 1000; |
| 75 const unsigned maxArrayItemsLimit = 10000; | 44 const unsigned maxArrayItemsLimit = 10000; |
| 76 const unsigned maxStackDepthLimit = 32; | 45 const unsigned maxStackDepthLimit = 32; |
| 77 | 46 |
| 78 class V8ValueStringBuilder { | 47 class V8ValueStringBuilder { |
| 79 public: | 48 public: |
| 80 static String16 toString(v8::Local<v8::Value> value, v8::Isolate* isolate) | 49 static String16 toString(v8::Local<v8::Value> value, v8::Isolate* isolate) |
| 81 { | 50 { |
| 82 V8ValueStringBuilder builder(isolate); | 51 V8ValueStringBuilder builder(isolate); |
| 83 if (!builder.append(value)) | 52 if (!builder.append(value)) |
| (...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 197 | 166 |
| 198 uint32_t m_arrayLimit; | 167 uint32_t m_arrayLimit; |
| 199 v8::Isolate* m_isolate; | 168 v8::Isolate* m_isolate; |
| 200 String16Builder m_builder; | 169 String16Builder m_builder; |
| 201 std::vector<v8::Local<v8::Array>> m_visitedArrays; | 170 std::vector<v8::Local<v8::Array>> m_visitedArrays; |
| 202 v8::TryCatch m_tryCatch; | 171 v8::TryCatch m_tryCatch; |
| 203 }; | 172 }; |
| 204 | 173 |
| 205 } // namespace | 174 } // namespace |
| 206 | 175 |
| 207 V8ConsoleMessage::V8ConsoleMessage(V8MessageOrigin origin, double timestamp, Mes
sageSource source, MessageLevel level, const String16& message) | 176 V8ConsoleMessage::V8ConsoleMessage(V8MessageOrigin origin, double timestamp, con
st String16& message) |
| 208 : m_origin(origin) | 177 : m_origin(origin) |
| 209 , m_timestamp(timestamp) | 178 , m_timestamp(timestamp) |
| 210 , m_source(source) | |
| 211 , m_level(level) | |
| 212 , m_message(message) | 179 , m_message(message) |
| 213 , m_lineNumber(0) | 180 , m_lineNumber(0) |
| 214 , m_columnNumber(0) | 181 , m_columnNumber(0) |
| 215 , m_scriptId(0) | 182 , m_scriptId(0) |
| 216 , m_contextId(0) | 183 , m_contextId(0) |
| 217 , m_type(ConsoleAPIType::kLog) | 184 , m_type(ConsoleAPIType::kLog) |
| 218 , m_exceptionId(0) | 185 , m_exceptionId(0) |
| 219 , m_revokedExceptionId(0) | 186 , m_revokedExceptionId(0) |
| 220 { | 187 { |
| 221 } | 188 } |
| 222 | 189 |
| 223 V8ConsoleMessage::~V8ConsoleMessage() | 190 V8ConsoleMessage::~V8ConsoleMessage() |
| 224 { | 191 { |
| 225 } | 192 } |
| 226 | 193 |
| 227 void V8ConsoleMessage::setLocation(const String16& url, unsigned lineNumber, uns
igned columnNumber, std::unique_ptr<V8StackTrace> stackTrace, int scriptId) | 194 void V8ConsoleMessage::setLocation(const String16& url, unsigned lineNumber, uns
igned columnNumber, std::unique_ptr<V8StackTrace> stackTrace, int scriptId) |
| 228 { | 195 { |
| 229 m_url = url; | 196 m_url = url; |
| 230 m_lineNumber = lineNumber; | 197 m_lineNumber = lineNumber; |
| 231 m_columnNumber = columnNumber; | 198 m_columnNumber = columnNumber; |
| 232 m_stackTrace = std::move(stackTrace); | 199 m_stackTrace = std::move(stackTrace); |
| 233 m_scriptId = scriptId; | 200 m_scriptId = scriptId; |
| 234 } | 201 } |
| 235 | 202 |
| 236 void V8ConsoleMessage::reportToFrontend(protocol::Console::Frontend* frontend, V
8InspectorSessionImpl* session, bool generatePreview) const | 203 void V8ConsoleMessage::reportToFrontend(protocol::Console::Frontend* frontend) c
onst |
| 237 { | 204 { |
| 238 DCHECK(m_origin == V8MessageOrigin::kExternalConsole || m_origin == V8Messag
eOrigin::kConsole); | 205 DCHECK(m_origin == V8MessageOrigin::kConsole); |
| 239 std::unique_ptr<protocol::Console::ConsoleMessage> result = | 206 std::unique_ptr<protocol::Console::ConsoleMessage> result = |
| 240 protocol::Console::ConsoleMessage::create() | 207 protocol::Console::ConsoleMessage::create() |
| 241 .setSource(messageSourceValue(m_source)) | 208 .setSource(protocol::Console::ConsoleMessage::SourceEnum::ConsoleApi) |
| 242 .setLevel(messageLevelValue(m_level)) | 209 .setLevel(protocol::Console::ConsoleMessage::LevelEnum::Log) |
| 243 .setText(m_message) | 210 .setText(m_message) |
| 244 .setTimestamp(m_timestamp) | |
| 245 .build(); | 211 .build(); |
| 246 result->setLine(static_cast<int>(m_lineNumber)); | 212 result->setLine(static_cast<int>(m_lineNumber)); |
| 247 result->setColumn(static_cast<int>(m_columnNumber)); | 213 result->setColumn(static_cast<int>(m_columnNumber)); |
| 248 if (m_scriptId) | |
| 249 result->setScriptId(String16::fromInteger(m_scriptId)); | |
| 250 result->setUrl(m_url); | 214 result->setUrl(m_url); |
| 251 if (m_source == NetworkMessageSource && !m_requestIdentifier.isEmpty()) | |
| 252 result->setNetworkRequestId(m_requestIdentifier); | |
| 253 if (m_contextId) | |
| 254 result->setExecutionContextId(m_contextId); | |
| 255 if (m_stackTrace) | |
| 256 result->setStack(m_stackTrace->buildInspectorObject()); | |
| 257 if (m_source == WorkerMessageSource && !m_workerId.isEmpty()) | |
| 258 result->setWorkerId(m_workerId); | |
| 259 frontend->messageAdded(std::move(result)); | 215 frontend->messageAdded(std::move(result)); |
| 260 } | 216 } |
| 261 | 217 |
| 262 std::unique_ptr<protocol::Array<protocol::Runtime::RemoteObject>> V8ConsoleMessa
ge::wrapArguments(V8InspectorSessionImpl* session, bool generatePreview) const | 218 std::unique_ptr<protocol::Array<protocol::Runtime::RemoteObject>> V8ConsoleMessa
ge::wrapArguments(V8InspectorSessionImpl* session, bool generatePreview) const |
| 263 { | 219 { |
| 264 if (!m_arguments.size() || !m_contextId) | 220 if (!m_arguments.size() || !m_contextId) |
| 265 return nullptr; | 221 return nullptr; |
| 266 InspectedContext* inspectedContext = session->debugger()->getContext(session
->contextGroupId(), m_contextId); | 222 InspectedContext* inspectedContext = session->debugger()->getContext(session
->contextGroupId(), m_contextId); |
| 267 if (!inspectedContext) | 223 if (!inspectedContext) |
| 268 return nullptr; | 224 return nullptr; |
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 357 } | 313 } |
| 358 | 314 |
| 359 ConsoleAPIType V8ConsoleMessage::type() const | 315 ConsoleAPIType V8ConsoleMessage::type() const |
| 360 { | 316 { |
| 361 return m_type; | 317 return m_type; |
| 362 } | 318 } |
| 363 | 319 |
| 364 // static | 320 // static |
| 365 std::unique_ptr<V8ConsoleMessage> V8ConsoleMessage::createForConsoleAPI(double t
imestamp, ConsoleAPIType type, const std::vector<v8::Local<v8::Value>>& argument
s, std::unique_ptr<V8StackTrace> stackTrace, InspectedContext* context) | 321 std::unique_ptr<V8ConsoleMessage> V8ConsoleMessage::createForConsoleAPI(double t
imestamp, ConsoleAPIType type, const std::vector<v8::Local<v8::Value>>& argument
s, std::unique_ptr<V8StackTrace> stackTrace, InspectedContext* context) |
| 366 { | 322 { |
| 367 std::unique_ptr<V8ConsoleMessage> message = wrapUnique(new V8ConsoleMessage(
V8MessageOrigin::kConsole, timestamp, ConsoleAPIMessageSource, LogMessageLevel,
String16())); | 323 std::unique_ptr<V8ConsoleMessage> message = wrapUnique(new V8ConsoleMessage(
V8MessageOrigin::kConsole, timestamp, String16())); |
| 368 if (stackTrace && !stackTrace->isEmpty()) { | 324 if (stackTrace && !stackTrace->isEmpty()) { |
| 369 message->m_url = stackTrace->topSourceURL(); | 325 message->m_url = stackTrace->topSourceURL(); |
| 370 message->m_lineNumber = stackTrace->topLineNumber(); | 326 message->m_lineNumber = stackTrace->topLineNumber(); |
| 371 message->m_columnNumber = stackTrace->topColumnNumber(); | 327 message->m_columnNumber = stackTrace->topColumnNumber(); |
| 372 } | 328 } |
| 373 message->m_stackTrace = std::move(stackTrace); | 329 message->m_stackTrace = std::move(stackTrace); |
| 374 message->m_type = type; | 330 message->m_type = type; |
| 375 message->m_contextId = context->contextId(); | 331 message->m_contextId = context->contextId(); |
| 376 for (size_t i = 0; i < arguments.size(); ++i) | 332 for (size_t i = 0; i < arguments.size(); ++i) |
| 377 message->m_arguments.push_back(wrapUnique(new v8::Global<v8::Value>(cont
ext->isolate(), arguments.at(i)))); | 333 message->m_arguments.push_back(wrapUnique(new v8::Global<v8::Value>(cont
ext->isolate(), arguments.at(i)))); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 388 if (type == ConsoleAPIType::kInfo) | 344 if (type == ConsoleAPIType::kInfo) |
| 389 level = InfoMessageLevel; | 345 level = InfoMessageLevel; |
| 390 context->debugger()->client()->consoleAPIMessage(context->contextGroupId(),
level, message->m_message, message->m_url, message->m_lineNumber, message->m_col
umnNumber, message->m_stackTrace.get()); | 346 context->debugger()->client()->consoleAPIMessage(context->contextGroupId(),
level, message->m_message, message->m_url, message->m_lineNumber, message->m_col
umnNumber, message->m_stackTrace.get()); |
| 391 | 347 |
| 392 return message; | 348 return message; |
| 393 } | 349 } |
| 394 | 350 |
| 395 // static | 351 // static |
| 396 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) | 352 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) |
| 397 { | 353 { |
| 398 std::unique_ptr<V8ConsoleMessage> message = wrapUnique(new V8ConsoleMessage(
V8MessageOrigin::kException, timestamp, JSMessageSource, ErrorMessageLevel, mess
ageText)); | 354 std::unique_ptr<V8ConsoleMessage> message = wrapUnique(new V8ConsoleMessage(
V8MessageOrigin::kException, timestamp, messageText)); |
| 399 message->setLocation(url, lineNumber, columnNumber, std::move(stackTrace), s
criptId); | 355 message->setLocation(url, lineNumber, columnNumber, std::move(stackTrace), s
criptId); |
| 400 message->m_exceptionId = exceptionId; | 356 message->m_exceptionId = exceptionId; |
| 401 if (contextId && !exception.IsEmpty()) { | 357 if (contextId && !exception.IsEmpty()) { |
| 402 message->m_contextId = contextId; | 358 message->m_contextId = contextId; |
| 403 message->m_arguments.push_back(wrapUnique(new v8::Global<v8::Value>(isol
ate, exception))); | 359 message->m_arguments.push_back(wrapUnique(new v8::Global<v8::Value>(isol
ate, exception))); |
| 404 } | 360 } |
| 405 return message; | 361 return message; |
| 406 } | 362 } |
| 407 | 363 |
| 408 // static | 364 // static |
| 409 std::unique_ptr<V8ConsoleMessage> V8ConsoleMessage::createForRevokedException(do
uble timestamp, const String16& messageText, unsigned revokedExceptionId) | 365 std::unique_ptr<V8ConsoleMessage> V8ConsoleMessage::createForRevokedException(do
uble timestamp, const String16& messageText, unsigned revokedExceptionId) |
| 410 { | 366 { |
| 411 std::unique_ptr<V8ConsoleMessage> message = wrapUnique(new V8ConsoleMessage(
V8MessageOrigin::kRevokedException, timestamp, JSMessageSource, ErrorMessageLeve
l, messageText)); | 367 std::unique_ptr<V8ConsoleMessage> message = wrapUnique(new V8ConsoleMessage(
V8MessageOrigin::kRevokedException, timestamp, messageText)); |
| 412 message->m_revokedExceptionId = revokedExceptionId; | 368 message->m_revokedExceptionId = revokedExceptionId; |
| 413 return message; | 369 return message; |
| 414 } | 370 } |
| 415 | 371 |
| 416 // static | |
| 417 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) | |
| 418 { | |
| 419 std::unique_ptr<V8ConsoleMessage> message = wrapUnique(new V8ConsoleMessage(
V8MessageOrigin::kExternalConsole, timestamp, source, level, messageText)); | |
| 420 message->setLocation(url, lineNumber, columnNumber, std::move(stackTrace), s
criptId); | |
| 421 message->m_requestIdentifier = requestIdentifier; | |
| 422 message->m_workerId = workerId; | |
| 423 return message; | |
| 424 } | |
| 425 | |
| 426 void V8ConsoleMessage::contextDestroyed(int contextId) | 372 void V8ConsoleMessage::contextDestroyed(int contextId) |
| 427 { | 373 { |
| 428 if (contextId != m_contextId) | 374 if (contextId != m_contextId) |
| 429 return; | 375 return; |
| 430 m_contextId = 0; | 376 m_contextId = 0; |
| 431 if (m_message.isEmpty()) | 377 if (m_message.isEmpty()) |
| 432 m_message = "<message collected>"; | 378 m_message = "<message collected>"; |
| 433 Arguments empty; | 379 Arguments empty; |
| 434 m_arguments.swap(empty); | 380 m_arguments.swap(empty); |
| 435 } | 381 } |
| 436 | 382 |
| 437 // ------------------------ V8ConsoleMessageStorage ---------------------------- | 383 // ------------------------ V8ConsoleMessageStorage ---------------------------- |
| 438 | 384 |
| 439 V8ConsoleMessageStorage::V8ConsoleMessageStorage(V8DebuggerImpl* debugger, int c
ontextGroupId) | 385 V8ConsoleMessageStorage::V8ConsoleMessageStorage(V8DebuggerImpl* debugger, int c
ontextGroupId) |
| 440 : m_debugger(debugger) | 386 : m_debugger(debugger) |
| 441 , m_contextGroupId(contextGroupId) | 387 , m_contextGroupId(contextGroupId) |
| 442 , m_expiredCount(0) | 388 , m_expiredCount(0) |
| 443 { | 389 { |
| 444 } | 390 } |
| 445 | 391 |
| 446 V8ConsoleMessageStorage::~V8ConsoleMessageStorage() | 392 V8ConsoleMessageStorage::~V8ConsoleMessageStorage() |
| 447 { | 393 { |
| 448 clear(); | 394 clear(); |
| 395 notifyClear(); |
| 449 } | 396 } |
| 450 | 397 |
| 451 void V8ConsoleMessageStorage::addMessage(std::unique_ptr<V8ConsoleMessage> messa
ge) | 398 void V8ConsoleMessageStorage::addMessage(std::unique_ptr<V8ConsoleMessage> messa
ge) |
| 452 { | 399 { |
| 453 if (message->type() == ConsoleAPIType::kClear) | 400 if (message->type() == ConsoleAPIType::kClear) { |
| 454 clear(); | 401 clear(); |
| 402 notifyClear(); |
| 403 } |
| 455 | 404 |
| 456 V8InspectorSessionImpl* session = m_debugger->sessionForContextGroup(m_conte
xtGroupId); | 405 V8InspectorSessionImpl* session = m_debugger->sessionForContextGroup(m_conte
xtGroupId); |
| 457 if (session) { | 406 if (session) { |
| 458 if (message->origin() == V8MessageOrigin::kExternalConsole || message->o
rigin() == V8MessageOrigin::kConsole) | 407 if (message->origin() == V8MessageOrigin::kConsole) |
| 459 session->consoleAgent()->messageAdded(message.get()); | 408 session->consoleAgent()->messageAdded(message.get()); |
| 460 if (message->origin() != V8MessageOrigin::kExternalConsole) | 409 session->runtimeAgent()->messageAdded(message.get()); |
| 461 session->runtimeAgent()->messageAdded(message.get()); | |
| 462 } | 410 } |
| 463 | 411 |
| 464 DCHECK(m_messages.size() <= maxConsoleMessageCount); | 412 DCHECK(m_messages.size() <= maxConsoleMessageCount); |
| 465 if (m_messages.size() == maxConsoleMessageCount) { | 413 if (m_messages.size() == maxConsoleMessageCount) { |
| 466 ++m_expiredCount; | 414 ++m_expiredCount; |
| 467 m_messages.pop_front(); | 415 m_messages.pop_front(); |
| 468 } | 416 } |
| 469 m_messages.push_back(std::move(message)); | 417 m_messages.push_back(std::move(message)); |
| 470 } | 418 } |
| 471 | 419 |
| 472 void V8ConsoleMessageStorage::clear() | 420 void V8ConsoleMessageStorage::clear() |
| 473 { | 421 { |
| 474 m_messages.clear(); | 422 m_messages.clear(); |
| 475 m_expiredCount = 0; | 423 m_expiredCount = 0; |
| 476 V8InspectorSessionImpl* session = m_debugger->sessionForContextGroup(m_conte
xtGroupId); | 424 if (V8InspectorSessionImpl* session = m_debugger->sessionForContextGroup(m_c
ontextGroupId)) |
| 477 if (session) { | |
| 478 session->releaseObjectGroup("console"); | 425 session->releaseObjectGroup("console"); |
| 479 session->client()->consoleCleared(); | |
| 480 } | |
| 481 } | 426 } |
| 482 | 427 |
| 483 void V8ConsoleMessageStorage::contextDestroyed(int contextId) | 428 void V8ConsoleMessageStorage::contextDestroyed(int contextId) |
| 484 { | 429 { |
| 485 for (size_t i = 0; i < m_messages.size(); ++i) | 430 for (size_t i = 0; i < m_messages.size(); ++i) |
| 486 m_messages[i]->contextDestroyed(contextId); | 431 m_messages[i]->contextDestroyed(contextId); |
| 487 } | 432 } |
| 488 | 433 |
| 434 void V8ConsoleMessageStorage::notifyClear() |
| 435 { |
| 436 if (V8InspectorSessionImpl* session = m_debugger->sessionForContextGroup(m_c
ontextGroupId)) |
| 437 session->client()->consoleCleared(); |
| 438 } |
| 439 |
| 489 } // namespace blink | 440 } // namespace blink |
| OLD | NEW |