| 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 String messageSourceValue(MessageSource source) | 20 String16 messageSourceValue(MessageSource source) |
| 21 { | 21 { |
| 22 switch (source) { | 22 switch (source) { |
| 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 } | 33 } |
| 34 return protocol::Console::ConsoleMessage::SourceEnum::Other; | 34 return protocol::Console::ConsoleMessage::SourceEnum::Other; |
| 35 } | 35 } |
| 36 | 36 |
| 37 | 37 |
| 38 String messageTypeValue(MessageType type) | 38 String16 messageTypeValue(MessageType type) |
| 39 { | 39 { |
| 40 switch (type) { | 40 switch (type) { |
| 41 case LogMessageType: return protocol::Console::ConsoleMessage::TypeEnum::Log
; | 41 case LogMessageType: return protocol::Console::ConsoleMessage::TypeEnum::Log
; |
| 42 case ClearMessageType: return protocol::Console::ConsoleMessage::TypeEnum::C
lear; | 42 case ClearMessageType: return protocol::Console::ConsoleMessage::TypeEnum::C
lear; |
| 43 case DirMessageType: return protocol::Console::ConsoleMessage::TypeEnum::Dir
; | 43 case DirMessageType: return protocol::Console::ConsoleMessage::TypeEnum::Dir
; |
| 44 case DirXMLMessageType: return protocol::Console::ConsoleMessage::TypeEnum::
Dirxml; | 44 case DirXMLMessageType: return protocol::Console::ConsoleMessage::TypeEnum::
Dirxml; |
| 45 case TableMessageType: return protocol::Console::ConsoleMessage::TypeEnum::T
able; | 45 case TableMessageType: return protocol::Console::ConsoleMessage::TypeEnum::T
able; |
| 46 case TraceMessageType: return protocol::Console::ConsoleMessage::TypeEnum::T
race; | 46 case TraceMessageType: return protocol::Console::ConsoleMessage::TypeEnum::T
race; |
| 47 case StartGroupMessageType: return protocol::Console::ConsoleMessage::TypeEn
um::StartGroup; | 47 case StartGroupMessageType: return protocol::Console::ConsoleMessage::TypeEn
um::StartGroup; |
| 48 case StartGroupCollapsedMessageType: return protocol::Console::ConsoleMessag
e::TypeEnum::StartGroupCollapsed; | 48 case StartGroupCollapsedMessageType: return protocol::Console::ConsoleMessag
e::TypeEnum::StartGroupCollapsed; |
| 49 case EndGroupMessageType: return protocol::Console::ConsoleMessage::TypeEnum
::EndGroup; | 49 case EndGroupMessageType: return protocol::Console::ConsoleMessage::TypeEnum
::EndGroup; |
| 50 case AssertMessageType: return protocol::Console::ConsoleMessage::TypeEnum::
Assert; | 50 case AssertMessageType: return protocol::Console::ConsoleMessage::TypeEnum::
Assert; |
| 51 case TimeEndMessageType: return protocol::Console::ConsoleMessage::TypeEnum:
:Log; | 51 case TimeEndMessageType: return protocol::Console::ConsoleMessage::TypeEnum:
:Log; |
| 52 case CountMessageType: return protocol::Console::ConsoleMessage::TypeEnum::L
og; | 52 case CountMessageType: return protocol::Console::ConsoleMessage::TypeEnum::L
og; |
| 53 } | 53 } |
| 54 return protocol::Console::ConsoleMessage::TypeEnum::Log; | 54 return protocol::Console::ConsoleMessage::TypeEnum::Log; |
| 55 } | 55 } |
| 56 | 56 |
| 57 String messageLevelValue(MessageLevel level) | 57 String16 messageLevelValue(MessageLevel level) |
| 58 { | 58 { |
| 59 switch (level) { | 59 switch (level) { |
| 60 case DebugMessageLevel: return protocol::Console::ConsoleMessage::LevelEnum:
:Debug; | 60 case DebugMessageLevel: return protocol::Console::ConsoleMessage::LevelEnum:
:Debug; |
| 61 case LogMessageLevel: return protocol::Console::ConsoleMessage::LevelEnum::L
og; | 61 case LogMessageLevel: return protocol::Console::ConsoleMessage::LevelEnum::L
og; |
| 62 case WarningMessageLevel: return protocol::Console::ConsoleMessage::LevelEnu
m::Warning; | 62 case WarningMessageLevel: return protocol::Console::ConsoleMessage::LevelEnu
m::Warning; |
| 63 case ErrorMessageLevel: return protocol::Console::ConsoleMessage::LevelEnum:
:Error; | 63 case ErrorMessageLevel: return protocol::Console::ConsoleMessage::LevelEnum:
:Error; |
| 64 case InfoMessageLevel: return protocol::Console::ConsoleMessage::LevelEnum::
Info; | 64 case InfoMessageLevel: return protocol::Console::ConsoleMessage::LevelEnum::
Info; |
| 65 } | 65 } |
| 66 return protocol::Console::ConsoleMessage::LevelEnum::Log; | 66 return protocol::Console::ConsoleMessage::LevelEnum::Log; |
| 67 } | 67 } |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 134 return append(stringValue); | 134 return append(stringValue); |
| 135 } | 135 } |
| 136 v8::Local<v8::String> stringValue; | 136 v8::Local<v8::String> stringValue; |
| 137 if (!value->ToString(m_isolate->GetCurrentContext()).ToLocal(&stringValu
e)) | 137 if (!value->ToString(m_isolate->GetCurrentContext()).ToLocal(&stringValu
e)) |
| 138 return false; | 138 return false; |
| 139 return append(stringValue); | 139 return append(stringValue); |
| 140 } | 140 } |
| 141 | 141 |
| 142 bool append(v8::Local<v8::Array> array) | 142 bool append(v8::Local<v8::Array> array) |
| 143 { | 143 { |
| 144 if (m_visitedArrays.contains(array)) | 144 for (const auto& it : m_visitedArrays) { |
| 145 return true; | 145 if (it == array) |
| 146 return true; |
| 147 } |
| 146 uint32_t length = array->Length(); | 148 uint32_t length = array->Length(); |
| 147 if (length > m_arrayLimit) | 149 if (length > m_arrayLimit) |
| 148 return false; | 150 return false; |
| 149 if (m_visitedArrays.size() > maxStackDepthLimit) | 151 if (m_visitedArrays.size() > maxStackDepthLimit) |
| 150 return false; | 152 return false; |
| 151 | 153 |
| 152 bool result = true; | 154 bool result = true; |
| 153 m_arrayLimit -= length; | 155 m_arrayLimit -= length; |
| 154 m_visitedArrays.append(array); | 156 m_visitedArrays.push_back(array); |
| 155 for (uint32_t i = 0; i < length; ++i) { | 157 for (uint32_t i = 0; i < length; ++i) { |
| 156 if (i) | 158 if (i) |
| 157 m_builder.append(','); | 159 m_builder.append(','); |
| 158 if (!append(array->Get(i), IgnoreNull | IgnoreUndefined)) { | 160 if (!append(array->Get(i), IgnoreNull | IgnoreUndefined)) { |
| 159 result = false; | 161 result = false; |
| 160 break; | 162 break; |
| 161 } | 163 } |
| 162 } | 164 } |
| 163 m_visitedArrays.removeLast(); | 165 m_visitedArrays.pop_back(); |
| 164 return result; | 166 return result; |
| 165 } | 167 } |
| 166 | 168 |
| 167 bool append(v8::Local<v8::Symbol> symbol) | 169 bool append(v8::Local<v8::Symbol> symbol) |
| 168 { | 170 { |
| 169 m_builder.append("Symbol("); | 171 m_builder.append("Symbol("); |
| 170 bool result = append(symbol->Name(), IgnoreUndefined); | 172 bool result = append(symbol->Name(), IgnoreUndefined); |
| 171 m_builder.append(')'); | 173 m_builder.append(')'); |
| 172 return result; | 174 return result; |
| 173 } | 175 } |
| (...skipping 10 matching lines...) Expand all Loading... |
| 184 String16 toString() | 186 String16 toString() |
| 185 { | 187 { |
| 186 if (m_tryCatch.HasCaught()) | 188 if (m_tryCatch.HasCaught()) |
| 187 return String16(); | 189 return String16(); |
| 188 return m_builder.toString(); | 190 return m_builder.toString(); |
| 189 } | 191 } |
| 190 | 192 |
| 191 uint32_t m_arrayLimit; | 193 uint32_t m_arrayLimit; |
| 192 v8::Isolate* m_isolate; | 194 v8::Isolate* m_isolate; |
| 193 String16Builder m_builder; | 195 String16Builder m_builder; |
| 194 Vector<v8::Local<v8::Array>> m_visitedArrays; | 196 std::vector<v8::Local<v8::Array>> m_visitedArrays; |
| 195 v8::TryCatch m_tryCatch; | 197 v8::TryCatch m_tryCatch; |
| 196 }; | 198 }; |
| 197 | 199 |
| 198 } // namespace | 200 } // namespace |
| 199 | 201 |
| 200 V8ConsoleMessage::V8ConsoleMessage( | 202 V8ConsoleMessage::V8ConsoleMessage( |
| 201 double timestamp, | 203 double timestamp, |
| 202 MessageSource source, | 204 MessageSource source, |
| 203 MessageLevel level, | 205 MessageLevel level, |
| 204 const String16& message, | 206 const String16& message, |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 237 protocol::Console::ConsoleMessage::create() | 239 protocol::Console::ConsoleMessage::create() |
| 238 .setSource(messageSourceValue(m_source)) | 240 .setSource(messageSourceValue(m_source)) |
| 239 .setLevel(messageLevelValue(m_level)) | 241 .setLevel(messageLevelValue(m_level)) |
| 240 .setText(m_message) | 242 .setText(m_message) |
| 241 .setTimestamp(m_timestamp / 1000) // TODO(dgozman): migrate this to mill
iseconds. | 243 .setTimestamp(m_timestamp / 1000) // TODO(dgozman): migrate this to mill
iseconds. |
| 242 .build(); | 244 .build(); |
| 243 result->setType(messageTypeValue(m_type)); | 245 result->setType(messageTypeValue(m_type)); |
| 244 result->setLine(static_cast<int>(m_lineNumber)); | 246 result->setLine(static_cast<int>(m_lineNumber)); |
| 245 result->setColumn(static_cast<int>(m_columnNumber)); | 247 result->setColumn(static_cast<int>(m_columnNumber)); |
| 246 if (m_scriptId) | 248 if (m_scriptId) |
| 247 result->setScriptId(String::number(m_scriptId)); | 249 result->setScriptId(String16::number(m_scriptId)); |
| 248 result->setUrl(m_url); | 250 result->setUrl(m_url); |
| 249 if (m_source == NetworkMessageSource && !m_requestIdentifier.isEmpty()) | 251 if (m_source == NetworkMessageSource && !m_requestIdentifier.isEmpty()) |
| 250 result->setNetworkRequestId(m_requestIdentifier); | 252 result->setNetworkRequestId(m_requestIdentifier); |
| 251 if (m_contextId) | 253 if (m_contextId) |
| 252 result->setExecutionContextId(m_contextId); | 254 result->setExecutionContextId(m_contextId); |
| 253 std::unique_ptr<protocol::Array<protocol::Runtime::RemoteObject>> args = wra
pArguments(session, generatePreview); | 255 std::unique_ptr<protocol::Array<protocol::Runtime::RemoteObject>> args = wra
pArguments(session, generatePreview); |
| 254 if (args) | 256 if (args) |
| 255 result->setParameters(std::move(args)); | 257 result->setParameters(std::move(args)); |
| 256 if (m_stackTrace) | 258 if (m_stackTrace) |
| 257 result->setStack(m_stackTrace->buildInspectorObject()); | 259 result->setStack(m_stackTrace->buildInspectorObject()); |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 296 { | 298 { |
| 297 if (m_origin == V8MessageOrigin::kException) { | 299 if (m_origin == V8MessageOrigin::kException) { |
| 298 // TODO(dgozman): unify with InjectedScript::createExceptionDetails. | 300 // TODO(dgozman): unify with InjectedScript::createExceptionDetails. |
| 299 std::unique_ptr<protocol::Runtime::ExceptionDetails> details = protocol:
:Runtime::ExceptionDetails::create().setText(m_message).build(); | 301 std::unique_ptr<protocol::Runtime::ExceptionDetails> details = protocol:
:Runtime::ExceptionDetails::create().setText(m_message).build(); |
| 300 details->setUrl(m_url); | 302 details->setUrl(m_url); |
| 301 if (m_lineNumber) | 303 if (m_lineNumber) |
| 302 details->setLineNumber(static_cast<int>(m_lineNumber) - 1); | 304 details->setLineNumber(static_cast<int>(m_lineNumber) - 1); |
| 303 if (m_columnNumber) | 305 if (m_columnNumber) |
| 304 details->setColumnNumber(static_cast<int>(m_columnNumber) - 1); | 306 details->setColumnNumber(static_cast<int>(m_columnNumber) - 1); |
| 305 if (m_scriptId) | 307 if (m_scriptId) |
| 306 details->setScriptId(String::number(m_scriptId)); | 308 details->setScriptId(String16::number(m_scriptId)); |
| 307 if (m_stackTrace) | 309 if (m_stackTrace) |
| 308 details->setStack(m_stackTrace->buildInspectorObject()); | 310 details->setStack(m_stackTrace->buildInspectorObject()); |
| 309 | 311 |
| 310 std::unique_ptr<protocol::Runtime::RemoteObject> exception = wrapExcepti
on(session, generatePreview); | 312 std::unique_ptr<protocol::Runtime::RemoteObject> exception = wrapExcepti
on(session, generatePreview); |
| 311 | 313 |
| 312 if (exception) | 314 if (exception) |
| 313 frontend->exceptionThrown(m_exceptionId, m_timestamp, std::move(deta
ils), std::move(exception), m_contextId); | 315 frontend->exceptionThrown(m_exceptionId, m_timestamp, std::move(deta
ils), std::move(exception), m_contextId); |
| 314 else | 316 else |
| 315 frontend->exceptionThrown(m_exceptionId, m_timestamp, std::move(deta
ils)); | 317 frontend->exceptionThrown(m_exceptionId, m_timestamp, std::move(deta
ils)); |
| 316 return; | 318 return; |
| (...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 465 } | 467 } |
| 466 } | 468 } |
| 467 | 469 |
| 468 void V8ConsoleMessageStorage::contextDestroyed(int contextId) | 470 void V8ConsoleMessageStorage::contextDestroyed(int contextId) |
| 469 { | 471 { |
| 470 for (size_t i = 0; i < m_messages.size(); ++i) | 472 for (size_t i = 0; i < m_messages.size(); ++i) |
| 471 m_messages[i]->contextDestroyed(contextId); | 473 m_messages[i]->contextDestroyed(contextId); |
| 472 } | 474 } |
| 473 | 475 |
| 474 } // namespace blink | 476 } // namespace blink |
| OLD | NEW |