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 21 matching lines...) Expand all Loading... |
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 case WorkerMessageSource: return protocol::Console::ConsoleMessage::SourceEn
um::Worker; |
34 } | 34 } |
35 return protocol::Console::ConsoleMessage::SourceEnum::Other; | 35 return protocol::Console::ConsoleMessage::SourceEnum::Other; |
36 } | 36 } |
37 | 37 |
38 | 38 |
39 String consoleAPITypeValue(ConsoleAPIType type) | 39 String consoleAPITypeValue(ConsoleAPIType type) |
40 { | 40 { |
41 switch (type) { | 41 switch (type) { |
42 case ConsoleAPIType::kLog: return protocol::Console::ConsoleMessage::TypeEnu
m::Log; | 42 case ConsoleAPIType::kLog: return protocol::Runtime::ConsoleAPICall::TypeEnu
m::Log; |
43 case ConsoleAPIType::kClear: return protocol::Console::ConsoleMessage::TypeE
num::Clear; | 43 case ConsoleAPIType::kDebug: return protocol::Runtime::ConsoleAPICall::TypeE
num::Debug; |
44 case ConsoleAPIType::kDir: return protocol::Console::ConsoleMessage::TypeEnu
m::Dir; | 44 case ConsoleAPIType::kInfo: return protocol::Runtime::ConsoleAPICall::TypeEn
um::Info; |
45 case ConsoleAPIType::kDirXML: return protocol::Console::ConsoleMessage::Type
Enum::Dirxml; | 45 case ConsoleAPIType::kError: return protocol::Runtime::ConsoleAPICall::TypeE
num::Error; |
46 case ConsoleAPIType::kTable: return protocol::Console::ConsoleMessage::TypeE
num::Table; | 46 case ConsoleAPIType::kWarning: return protocol::Runtime::ConsoleAPICall::Typ
eEnum::Warning; |
47 case ConsoleAPIType::kTrace: return protocol::Console::ConsoleMessage::TypeE
num::Trace; | 47 case ConsoleAPIType::kClear: return protocol::Runtime::ConsoleAPICall::TypeE
num::Clear; |
48 case ConsoleAPIType::kStartGroup: return protocol::Console::ConsoleMessage::
TypeEnum::StartGroup; | 48 case ConsoleAPIType::kDir: return protocol::Runtime::ConsoleAPICall::TypeEnu
m::Dir; |
49 case ConsoleAPIType::kStartGroupCollapsed: return protocol::Console::Console
Message::TypeEnum::StartGroupCollapsed; | 49 case ConsoleAPIType::kDirXML: return protocol::Runtime::ConsoleAPICall::Type
Enum::Dirxml; |
50 case ConsoleAPIType::kEndGroup: return protocol::Console::ConsoleMessage::Ty
peEnum::EndGroup; | 50 case ConsoleAPIType::kTable: return protocol::Runtime::ConsoleAPICall::TypeE
num::Table; |
51 case ConsoleAPIType::kAssert: return protocol::Console::ConsoleMessage::Type
Enum::Assert; | 51 case ConsoleAPIType::kTrace: return protocol::Runtime::ConsoleAPICall::TypeE
num::Trace; |
52 case ConsoleAPIType::kTimeEnd: return protocol::Console::ConsoleMessage::Typ
eEnum::Log; | 52 case ConsoleAPIType::kStartGroup: return protocol::Runtime::ConsoleAPICall::
TypeEnum::StartGroup; |
53 case ConsoleAPIType::kCount: return protocol::Console::ConsoleMessage::TypeE
num::Log; | 53 case ConsoleAPIType::kStartGroupCollapsed: return protocol::Runtime::Console
APICall::TypeEnum::StartGroupCollapsed; |
| 54 case ConsoleAPIType::kEndGroup: return protocol::Runtime::ConsoleAPICall::Ty
peEnum::EndGroup; |
| 55 case ConsoleAPIType::kAssert: return protocol::Runtime::ConsoleAPICall::Type
Enum::Assert; |
| 56 case ConsoleAPIType::kTimeEnd: return protocol::Runtime::ConsoleAPICall::Typ
eEnum::Debug; |
| 57 case ConsoleAPIType::kCount: return protocol::Runtime::ConsoleAPICall::TypeE
num::Debug; |
54 } | 58 } |
55 return protocol::Console::ConsoleMessage::TypeEnum::Log; | 59 return protocol::Runtime::ConsoleAPICall::TypeEnum::Log; |
56 } | 60 } |
57 | 61 |
58 String messageLevelValue(MessageLevel level) | 62 String messageLevelValue(MessageLevel level) |
59 { | 63 { |
60 switch (level) { | 64 switch (level) { |
61 case DebugMessageLevel: return protocol::Console::ConsoleMessage::LevelEnum:
:Debug; | 65 case DebugMessageLevel: return protocol::Console::ConsoleMessage::LevelEnum:
:Debug; |
62 case LogMessageLevel: return protocol::Console::ConsoleMessage::LevelEnum::L
og; | 66 case LogMessageLevel: return protocol::Console::ConsoleMessage::LevelEnum::L
og; |
63 case WarningMessageLevel: return protocol::Console::ConsoleMessage::LevelEnu
m::Warning; | 67 case WarningMessageLevel: return protocol::Console::ConsoleMessage::LevelEnu
m::Warning; |
64 case ErrorMessageLevel: return protocol::Console::ConsoleMessage::LevelEnum:
:Error; | 68 case ErrorMessageLevel: return protocol::Console::ConsoleMessage::LevelEnum:
:Error; |
65 case InfoMessageLevel: return protocol::Console::ConsoleMessage::LevelEnum::
Info; | 69 case InfoMessageLevel: return protocol::Console::ConsoleMessage::LevelEnum::
Info; |
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
222 { | 226 { |
223 m_url = url; | 227 m_url = url; |
224 m_lineNumber = lineNumber; | 228 m_lineNumber = lineNumber; |
225 m_columnNumber = columnNumber; | 229 m_columnNumber = columnNumber; |
226 m_stackTrace = std::move(stackTrace); | 230 m_stackTrace = std::move(stackTrace); |
227 m_scriptId = scriptId; | 231 m_scriptId = scriptId; |
228 } | 232 } |
229 | 233 |
230 void V8ConsoleMessage::reportToFrontend(protocol::Console::Frontend* frontend, V
8InspectorSessionImpl* session, bool generatePreview) const | 234 void V8ConsoleMessage::reportToFrontend(protocol::Console::Frontend* frontend, V
8InspectorSessionImpl* session, bool generatePreview) const |
231 { | 235 { |
232 DCHECK_EQ(V8MessageOrigin::kConsole, m_origin); | 236 DCHECK_EQ(V8MessageOrigin::kExternalConsole, m_origin); |
233 std::unique_ptr<protocol::Console::ConsoleMessage> result = | 237 std::unique_ptr<protocol::Console::ConsoleMessage> result = |
234 protocol::Console::ConsoleMessage::create() | 238 protocol::Console::ConsoleMessage::create() |
235 .setSource(messageSourceValue(m_source)) | 239 .setSource(messageSourceValue(m_source)) |
236 .setLevel(messageLevelValue(m_level)) | 240 .setLevel(messageLevelValue(m_level)) |
237 .setText(m_message) | 241 .setText(m_message) |
238 .setTimestamp(m_timestamp / 1000) // TODO(dgozman): migrate this to mill
iseconds. | 242 .setTimestamp(m_timestamp / 1000) // TODO(dgozman): migrate this to mill
iseconds. |
239 .build(); | 243 .build(); |
240 result->setType(consoleAPITypeValue(m_type)); | 244 result->setType(consoleAPITypeValue(m_type)); |
241 result->setLine(static_cast<int>(m_lineNumber)); | 245 result->setLine(static_cast<int>(m_lineNumber)); |
242 result->setColumn(static_cast<int>(m_columnNumber)); | 246 result->setColumn(static_cast<int>(m_columnNumber)); |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
311 if (exception) | 315 if (exception) |
312 frontend->exceptionThrown(m_exceptionId, m_timestamp, std::move(deta
ils), std::move(exception), m_contextId); | 316 frontend->exceptionThrown(m_exceptionId, m_timestamp, std::move(deta
ils), std::move(exception), m_contextId); |
313 else | 317 else |
314 frontend->exceptionThrown(m_exceptionId, m_timestamp, std::move(deta
ils)); | 318 frontend->exceptionThrown(m_exceptionId, m_timestamp, std::move(deta
ils)); |
315 return; | 319 return; |
316 } | 320 } |
317 if (m_origin == V8MessageOrigin::kRevokedException) { | 321 if (m_origin == V8MessageOrigin::kRevokedException) { |
318 frontend->exceptionRevoked(m_timestamp, m_message, m_revokedExceptionId)
; | 322 frontend->exceptionRevoked(m_timestamp, m_message, m_revokedExceptionId)
; |
319 return; | 323 return; |
320 } | 324 } |
| 325 if (m_origin == V8MessageOrigin::kConsole) { |
| 326 std::unique_ptr<protocol::Array<protocol::Runtime::RemoteObject>> argume
nts = wrapArguments(session, generatePreview); |
| 327 if (!arguments) { |
| 328 arguments = protocol::Array<protocol::Runtime::RemoteObject>::create
(); |
| 329 if (!m_message.isEmpty()) { |
| 330 std::unique_ptr<protocol::Runtime::RemoteObject> messageArg = pr
otocol::Runtime::RemoteObject::create().setType(protocol::Runtime::RemoteObject:
:TypeEnum::String).build(); |
| 331 messageArg->setValue(protocol::StringValue::create(m_message)); |
| 332 arguments->addItem(std::move(messageArg)); |
| 333 } |
| 334 } |
| 335 if (m_stackTrace) |
| 336 frontend->consoleAPICall(m_timestamp, consoleAPITypeValue(m_type), s
td::move(arguments), m_contextId, m_stackTrace->buildInspectorObject()); |
| 337 else |
| 338 frontend->consoleAPICall(m_timestamp, consoleAPITypeValue(m_type), s
td::move(arguments), m_contextId); |
| 339 return; |
| 340 } |
321 NOTREACHED(); | 341 NOTREACHED(); |
322 } | 342 } |
323 | 343 |
324 std::unique_ptr<protocol::Runtime::RemoteObject> V8ConsoleMessage::wrapException
(V8InspectorSessionImpl* session, bool generatePreview) const | 344 std::unique_ptr<protocol::Runtime::RemoteObject> V8ConsoleMessage::wrapException
(V8InspectorSessionImpl* session, bool generatePreview) const |
325 { | 345 { |
326 if (!m_arguments.size() || !m_contextId) | 346 if (!m_arguments.size() || !m_contextId) |
327 return nullptr; | 347 return nullptr; |
328 DCHECK_EQ(1u, m_arguments.size()); | 348 DCHECK_EQ(1u, m_arguments.size()); |
329 InspectedContext* inspectedContext = session->debugger()->getContext(session
->contextGroupId(), m_contextId); | 349 InspectedContext* inspectedContext = session->debugger()->getContext(session
->contextGroupId(), m_contextId); |
330 if (!inspectedContext) | 350 if (!inspectedContext) |
(...skipping 14 matching lines...) Expand all Loading... |
345 { | 365 { |
346 return m_arguments.size(); | 366 return m_arguments.size(); |
347 } | 367 } |
348 | 368 |
349 ConsoleAPIType V8ConsoleMessage::type() const | 369 ConsoleAPIType V8ConsoleMessage::type() const |
350 { | 370 { |
351 return m_type; | 371 return m_type; |
352 } | 372 } |
353 | 373 |
354 // static | 374 // static |
355 std::unique_ptr<V8ConsoleMessage> V8ConsoleMessage::createForConsoleAPI(double t
imestamp, ConsoleAPIType type, MessageLevel level, const String16& messageText,
std::vector<v8::Local<v8::Value>>* arguments, std::unique_ptr<V8StackTrace> stac
kTrace, InspectedContext* context) | 375 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) |
356 { | 376 { |
| 377 std::unique_ptr<V8ConsoleMessage> message = wrapUnique(new V8ConsoleMessage(
V8MessageOrigin::kConsole, timestamp, ConsoleAPIMessageSource, LogMessageLevel,
String16())); |
| 378 message->m_stackTrace = std::move(stackTrace); |
| 379 message->m_type = type; |
| 380 message->m_contextId = context->contextId(); |
| 381 for (size_t i = 0; i < arguments.size(); ++i) |
| 382 message->m_arguments.push_back(wrapUnique(new v8::Global<v8::Value>(cont
ext->isolate(), arguments.at(i)))); |
| 383 if (arguments.size()) |
| 384 message->m_message = V8ValueStringBuilder::toString(arguments[0], contex
t->isolate()); |
| 385 |
| 386 MessageLevel level = LogMessageLevel; |
| 387 if (type == ConsoleAPIType::kDebug || type == ConsoleAPIType::kCount || type
== ConsoleAPIType::kTimeEnd) |
| 388 level = DebugMessageLevel; |
| 389 if (type == ConsoleAPIType::kError || type == ConsoleAPIType::kAssert) |
| 390 level = ErrorMessageLevel; |
| 391 if (type == ConsoleAPIType::kWarning) |
| 392 level = WarningMessageLevel; |
| 393 if (type == ConsoleAPIType::kInfo) |
| 394 level = InfoMessageLevel; |
357 String16 url; | 395 String16 url; |
358 unsigned lineNumber = 0; | 396 unsigned lineNumber = 0; |
359 unsigned columnNumber = 0; | 397 unsigned columnNumber = 0; |
360 if (stackTrace && !stackTrace->isEmpty()) { | 398 if (message->m_stackTrace && !message->m_stackTrace->isEmpty()) { |
361 url = stackTrace->topSourceURL(); | 399 url = message->m_stackTrace->topSourceURL(); |
362 lineNumber = stackTrace->topLineNumber(); | 400 lineNumber = message->m_stackTrace->topLineNumber(); |
363 columnNumber = stackTrace->topColumnNumber(); | 401 columnNumber = message->m_stackTrace->topColumnNumber(); |
364 } | 402 } |
| 403 context->debugger()->client()->consoleAPIMessage(context->contextGroupId(),
level, message->m_message, url, lineNumber, columnNumber, message->m_stackTrace.
get()); |
365 | 404 |
366 String16 actualMessage = messageText; | |
367 | |
368 Arguments messageArguments; | |
369 if (arguments && arguments->size()) { | |
370 for (size_t i = 0; i < arguments->size(); ++i) | |
371 messageArguments.push_back(wrapUnique(new v8::Global<v8::Value>(cont
ext->isolate(), arguments->at(i)))); | |
372 if (actualMessage.isEmpty()) | |
373 actualMessage = V8ValueStringBuilder::toString(messageArguments.at(0
)->Get(context->isolate()), context->isolate()); | |
374 } | |
375 | |
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; | |
379 if (messageArguments.size()) { | |
380 message->m_contextId = context->contextId(); | |
381 message->m_arguments.swap(messageArguments); | |
382 } | |
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()); | |
385 return message; | 405 return message; |
386 } | 406 } |
387 | 407 |
388 // static | 408 // 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) | 409 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 { | 410 { |
391 std::unique_ptr<V8ConsoleMessage> message = wrapUnique(new V8ConsoleMessage(
V8MessageOrigin::kException, timestamp, JSMessageSource, ErrorMessageLevel, mess
ageText)); | 411 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); | 412 message->setLocation(url, lineNumber, columnNumber, std::move(stackTrace), s
criptId); |
393 message->m_exceptionId = exceptionId; | 413 message->m_exceptionId = exceptionId; |
394 if (contextId && !exception.IsEmpty()) { | 414 if (contextId && !exception.IsEmpty()) { |
395 message->m_contextId = contextId; | 415 message->m_contextId = contextId; |
396 message->m_arguments.push_back(wrapUnique(new v8::Global<v8::Value>(isol
ate, exception))); | 416 message->m_arguments.push_back(wrapUnique(new v8::Global<v8::Value>(isol
ate, exception))); |
397 } | 417 } |
398 return message; | 418 return message; |
399 } | 419 } |
400 | 420 |
401 // static | 421 // static |
402 std::unique_ptr<V8ConsoleMessage> V8ConsoleMessage::createForRevokedException(do
uble timestamp, const String16& messageText, unsigned revokedExceptionId) | 422 std::unique_ptr<V8ConsoleMessage> V8ConsoleMessage::createForRevokedException(do
uble timestamp, const String16& messageText, unsigned revokedExceptionId) |
403 { | 423 { |
404 std::unique_ptr<V8ConsoleMessage> message = wrapUnique(new V8ConsoleMessage(
V8MessageOrigin::kRevokedException, timestamp, JSMessageSource, ErrorMessageLeve
l, messageText)); | 424 std::unique_ptr<V8ConsoleMessage> message = wrapUnique(new V8ConsoleMessage(
V8MessageOrigin::kRevokedException, timestamp, JSMessageSource, ErrorMessageLeve
l, messageText)); |
405 message->m_revokedExceptionId = revokedExceptionId; | 425 message->m_revokedExceptionId = revokedExceptionId; |
406 return message; | 426 return message; |
407 } | 427 } |
408 | 428 |
409 // static | 429 // 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) | 430 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 { | 431 { |
412 std::unique_ptr<V8ConsoleMessage> message = wrapUnique(new V8ConsoleMessage(
V8MessageOrigin::kConsole, timestamp, source, level, messageText)); | 432 std::unique_ptr<V8ConsoleMessage> message = wrapUnique(new V8ConsoleMessage(
V8MessageOrigin::kExternalConsole, timestamp, source, level, messageText)); |
413 message->setLocation(url, lineNumber, columnNumber, std::move(stackTrace), s
criptId); | 433 message->setLocation(url, lineNumber, columnNumber, std::move(stackTrace), s
criptId); |
414 message->m_requestIdentifier = requestIdentifier; | 434 message->m_requestIdentifier = requestIdentifier; |
415 message->m_workerId = workerId; | 435 message->m_workerId = workerId; |
416 return message; | 436 return message; |
417 } | 437 } |
418 | 438 |
419 void V8ConsoleMessage::contextDestroyed(int contextId) | 439 void V8ConsoleMessage::contextDestroyed(int contextId) |
420 { | 440 { |
421 if (contextId != m_contextId) | 441 if (contextId != m_contextId) |
422 return; | 442 return; |
(...skipping 18 matching lines...) Expand all Loading... |
441 clear(); | 461 clear(); |
442 } | 462 } |
443 | 463 |
444 void V8ConsoleMessageStorage::addMessage(std::unique_ptr<V8ConsoleMessage> messa
ge) | 464 void V8ConsoleMessageStorage::addMessage(std::unique_ptr<V8ConsoleMessage> messa
ge) |
445 { | 465 { |
446 if (message->type() == ConsoleAPIType::kClear) | 466 if (message->type() == ConsoleAPIType::kClear) |
447 clear(); | 467 clear(); |
448 | 468 |
449 V8InspectorSessionImpl* session = m_debugger->sessionForContextGroup(m_conte
xtGroupId); | 469 V8InspectorSessionImpl* session = m_debugger->sessionForContextGroup(m_conte
xtGroupId); |
450 if (session) { | 470 if (session) { |
451 if (message->origin() == V8MessageOrigin::kConsole) | 471 if (message->origin() == V8MessageOrigin::kExternalConsole) |
452 session->consoleAgent()->messageAdded(message.get()); | 472 session->consoleAgent()->messageAdded(message.get()); |
453 else | 473 else |
454 session->runtimeAgent()->exceptionMessageAdded(message.get()); | 474 session->runtimeAgent()->messageAdded(message.get()); |
455 } | 475 } |
456 | 476 |
457 DCHECK(m_messages.size() <= maxConsoleMessageCount); | 477 DCHECK(m_messages.size() <= maxConsoleMessageCount); |
458 if (m_messages.size() == maxConsoleMessageCount) { | 478 if (m_messages.size() == maxConsoleMessageCount) { |
459 ++m_expiredCount; | 479 ++m_expiredCount; |
460 m_messages.pop_front(); | 480 m_messages.pop_front(); |
461 } | 481 } |
462 m_messages.push_back(std::move(message)); | 482 m_messages.push_back(std::move(message)); |
463 } | 483 } |
464 | 484 |
465 void V8ConsoleMessageStorage::clear() | 485 void V8ConsoleMessageStorage::clear() |
466 { | 486 { |
467 m_messages.clear(); | 487 m_messages.clear(); |
468 m_expiredCount = 0; | 488 m_expiredCount = 0; |
469 V8InspectorSessionImpl* session = m_debugger->sessionForContextGroup(m_conte
xtGroupId); | 489 V8InspectorSessionImpl* session = m_debugger->sessionForContextGroup(m_conte
xtGroupId); |
470 if (session) { | 490 if (session) { |
471 session->consoleAgent()->reset(); | 491 session->consoleAgent()->reset(); |
472 session->releaseObjectGroup("console"); | 492 session->releaseObjectGroup("console"); |
473 session->client()->consoleCleared(); | 493 session->client()->consoleCleared(); |
474 } | 494 } |
475 } | 495 } |
476 | 496 |
477 void V8ConsoleMessageStorage::contextDestroyed(int contextId) | 497 void V8ConsoleMessageStorage::contextDestroyed(int contextId) |
478 { | 498 { |
479 for (size_t i = 0; i < m_messages.size(); ++i) | 499 for (size_t i = 0; i < m_messages.size(); ++i) |
480 m_messages[i]->contextDestroyed(contextId); | 500 m_messages[i]->contextDestroyed(contextId); |
481 } | 501 } |
482 | 502 |
483 } // namespace blink | 503 } // namespace blink |
OLD | NEW |