Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright (C) 2007, 2008 Apple Inc. All rights reserved. | 2 * Copyright (C) 2007, 2008 Apple Inc. All rights reserved. |
| 3 * Copyright (C) 2008 Matt Lilek <webkit@mattlilek.com> | 3 * Copyright (C) 2008 Matt Lilek <webkit@mattlilek.com> |
| 4 * Copyright (C) 2009, 2010 Google Inc. All rights reserved. | 4 * Copyright (C) 2009, 2010 Google Inc. All rights reserved. |
| 5 * | 5 * |
| 6 * Redistribution and use in source and binary forms, with or without | 6 * Redistribution and use in source and binary forms, with or without |
| 7 * modification, are permitted provided that the following conditions | 7 * modification, are permitted provided that the following conditions |
| 8 * are met: | 8 * are met: |
| 9 * | 9 * |
| 10 * 1. Redistributions of source code must retain the above copyright | 10 * 1. Redistributions of source code must retain the above copyright |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 44 #include "core/inspector/ScriptCallStack.h" | 44 #include "core/inspector/ScriptCallStack.h" |
| 45 #include "wtf/CurrentTime.h" | 45 #include "wtf/CurrentTime.h" |
| 46 | 46 |
| 47 namespace WebCore { | 47 namespace WebCore { |
| 48 | 48 |
| 49 ConsoleMessage::ConsoleMessage(bool canGenerateCallStack, MessageSource source, MessageType type, MessageLevel level, const String& message) | 49 ConsoleMessage::ConsoleMessage(bool canGenerateCallStack, MessageSource source, MessageType type, MessageLevel level, const String& message) |
| 50 : m_source(source) | 50 : m_source(source) |
| 51 , m_type(type) | 51 , m_type(type) |
| 52 , m_level(level) | 52 , m_level(level) |
| 53 , m_message(message) | 53 , m_message(message) |
| 54 , m_executionContextURL() | |
|
abarth-chromium
2013/07/24 23:59:09
There's no need to call the default constructor ex
Devlin
2013/07/25 00:10:46
Yeah, I was just wondering if it was Blink style (
| |
| 54 , m_url() | 55 , m_url() |
| 55 , m_line(0) | 56 , m_line(0) |
| 56 , m_column(0) | 57 , m_column(0) |
| 57 , m_repeatCount(1) | 58 , m_repeatCount(1) |
| 58 , m_requestId(IdentifiersFactory::requestId(0)) | 59 , m_requestId(IdentifiersFactory::requestId(0)) |
| 59 , m_timestamp(WTF::currentTime()) | 60 , m_timestamp(WTF::currentTime()) |
| 60 { | 61 { |
| 61 autogenerateMetadata(canGenerateCallStack); | 62 autogenerateMetadata(canGenerateCallStack); |
| 62 } | 63 } |
| 63 | 64 |
| 64 ConsoleMessage::ConsoleMessage(bool canGenerateCallStack, MessageSource source, MessageType type, MessageLevel level, const String& message, const String& url, unsigned line, unsigned column, ScriptState* state, unsigned long requestIdentif ier) | 65 ConsoleMessage::ConsoleMessage(bool canGenerateCallStack, MessageSource source, MessageType type, MessageLevel level, const String& message, const String& execu tionContextURL, const String& url, unsigned line, unsigned column, ScriptState* state, unsigned long requestIdentifier) |
| 65 : m_source(source) | 66 : m_source(source) |
| 66 , m_type(type) | 67 , m_type(type) |
| 67 , m_level(level) | 68 , m_level(level) |
| 68 , m_message(message) | 69 , m_message(message) |
| 70 , m_executionContextURL(executionContextURL) | |
| 69 , m_url(url) | 71 , m_url(url) |
| 70 , m_line(line) | 72 , m_line(line) |
| 71 , m_column(column) | 73 , m_column(column) |
| 72 , m_repeatCount(1) | 74 , m_repeatCount(1) |
| 73 , m_requestId(IdentifiersFactory::requestId(requestIdentifier)) | 75 , m_requestId(IdentifiersFactory::requestId(requestIdentifier)) |
| 74 , m_timestamp(WTF::currentTime()) | 76 , m_timestamp(WTF::currentTime()) |
| 75 { | 77 { |
| 76 autogenerateMetadata(canGenerateCallStack, state); | 78 autogenerateMetadata(canGenerateCallStack, state); |
| 77 } | 79 } |
| 78 | 80 |
| 79 ConsoleMessage::ConsoleMessage(bool, MessageSource source, MessageType type, Mes sageLevel level, const String& message, PassRefPtr<ScriptCallStack> callStack, u nsigned long requestIdentifier) | 81 ConsoleMessage::ConsoleMessage(bool, MessageSource source, MessageType type, Mes sageLevel level, const String& message, const String& executionContextURL, PassR efPtr<ScriptCallStack> callStack, unsigned long requestIdentifier) |
| 80 : m_source(source) | 82 : m_source(source) |
| 81 , m_type(type) | 83 , m_type(type) |
| 82 , m_level(level) | 84 , m_level(level) |
| 83 , m_message(message) | 85 , m_message(message) |
| 86 , m_executionContextURL(executionContextURL) | |
| 84 , m_arguments(0) | 87 , m_arguments(0) |
| 85 , m_line(0) | 88 , m_line(0) |
| 86 , m_column(0) | 89 , m_column(0) |
| 87 , m_repeatCount(1) | 90 , m_repeatCount(1) |
| 88 , m_requestId(IdentifiersFactory::requestId(requestIdentifier)) | 91 , m_requestId(IdentifiersFactory::requestId(requestIdentifier)) |
| 89 , m_timestamp(WTF::currentTime()) | 92 , m_timestamp(WTF::currentTime()) |
| 90 { | 93 { |
| 91 if (callStack && callStack->size()) { | 94 if (callStack && callStack->size()) { |
| 92 const ScriptCallFrame& frame = callStack->at(0); | 95 const ScriptCallFrame& frame = callStack->at(0); |
| 93 m_url = frame.sourceURL(); | 96 m_url = frame.sourceURL(); |
| 94 m_line = frame.lineNumber(); | 97 m_line = frame.lineNumber(); |
| 95 m_column = frame.columnNumber(); | 98 m_column = frame.columnNumber(); |
| 96 } | 99 } |
| 97 m_callStack = callStack; | 100 m_callStack = callStack; |
| 98 } | 101 } |
| 99 | 102 |
| 100 ConsoleMessage::ConsoleMessage(bool canGenerateCallStack, MessageSource source, MessageType type, MessageLevel level, const String& message, PassRefPtr<ScriptAr guments> arguments, ScriptState* state, unsigned long requestIdentifier) | 103 ConsoleMessage::ConsoleMessage(bool canGenerateCallStack, MessageSource source, MessageType type, MessageLevel level, const String& message, const String& execu tionContextURL, PassRefPtr<ScriptArguments> arguments, ScriptState* state, unsig ned long requestIdentifier) |
| 101 : m_source(source) | 104 : m_source(source) |
| 102 , m_type(type) | 105 , m_type(type) |
| 103 , m_level(level) | 106 , m_level(level) |
| 104 , m_message(message) | 107 , m_message(message) |
| 108 , m_executionContextURL(executionContextURL) | |
| 105 , m_arguments(arguments) | 109 , m_arguments(arguments) |
| 106 , m_url() | 110 , m_url() |
| 107 , m_line(0) | 111 , m_line(0) |
| 108 , m_column(0) | 112 , m_column(0) |
| 109 , m_repeatCount(1) | 113 , m_repeatCount(1) |
| 110 , m_requestId(IdentifiersFactory::requestId(requestIdentifier)) | 114 , m_requestId(IdentifiersFactory::requestId(requestIdentifier)) |
| 111 , m_timestamp(WTF::currentTime()) | 115 , m_timestamp(WTF::currentTime()) |
| 112 { | 116 { |
| 113 autogenerateMetadata(canGenerateCallStack, state); | 117 autogenerateMetadata(canGenerateCallStack, state); |
| 114 } | 118 } |
| 115 | 119 |
| 116 ConsoleMessage::~ConsoleMessage() | 120 ConsoleMessage::~ConsoleMessage() |
| 117 { | 121 { |
| 118 } | 122 } |
| 119 | 123 |
| 120 void ConsoleMessage::autogenerateMetadata(bool canGenerateCallStack, ScriptState * state) | 124 void ConsoleMessage::autogenerateMetadata(bool canGenerateCallStack, ScriptState * state) |
| 121 { | 125 { |
| 122 if (m_type == EndGroupMessageType) | 126 if (m_type == EndGroupMessageType) |
| 123 return; | 127 return; |
| 124 | 128 |
| 125 if (state) | 129 if (canGenerateCallStack) |
| 130 generateCallStack(ScriptCallStack::maxCallStackSizeToCapture); | |
| 131 else if (state) | |
| 126 m_callStack = createScriptCallStackForConsole(state); | 132 m_callStack = createScriptCallStackForConsole(state); |
| 127 else if (canGenerateCallStack) | |
| 128 m_callStack = createScriptCallStack(ScriptCallStack::maxCallStackSizeToC apture, true); | |
| 129 else | 133 else |
| 130 return; | 134 return; |
| 131 | 135 |
| 132 if (m_callStack && m_callStack->size()) { | 136 if (m_callStack && m_callStack->size()) { |
| 133 const ScriptCallFrame& frame = m_callStack->at(0); | 137 const ScriptCallFrame& frame = m_callStack->at(0); |
| 134 m_url = frame.sourceURL(); | 138 m_url = frame.sourceURL(); |
| 135 m_line = frame.lineNumber(); | 139 m_line = frame.lineNumber(); |
| 136 m_column = frame.columnNumber(); | 140 m_column = frame.columnNumber(); |
| 137 return; | 141 return; |
| 138 } | 142 } |
| 139 | 143 |
| 140 m_callStack.clear(); | 144 m_callStack.clear(); |
| 141 } | 145 } |
| 142 | 146 |
| 147 void ConsoleMessage::generateCallStack(size_t maxSizeToCapture) | |
| 148 { | |
| 149 m_callStack = createScriptCallStack(maxSizeToCapture, true); | |
| 150 } | |
| 151 | |
| 143 static TypeBuilder::Console::ConsoleMessage::Source::Enum messageSourceValue(Mes sageSource source) | 152 static TypeBuilder::Console::ConsoleMessage::Source::Enum messageSourceValue(Mes sageSource source) |
| 144 { | 153 { |
| 145 switch (source) { | 154 switch (source) { |
| 146 case XMLMessageSource: return TypeBuilder::Console::ConsoleMessage::Source:: Xml; | 155 case XMLMessageSource: return TypeBuilder::Console::ConsoleMessage::Source:: Xml; |
| 147 case JSMessageSource: return TypeBuilder::Console::ConsoleMessage::Source::J avascript; | 156 case JSMessageSource: return TypeBuilder::Console::ConsoleMessage::Source::J avascript; |
| 148 case NetworkMessageSource: return TypeBuilder::Console::ConsoleMessage::Sour ce::Network; | 157 case NetworkMessageSource: return TypeBuilder::Console::ConsoleMessage::Sour ce::Network; |
| 149 case ConsoleAPIMessageSource: return TypeBuilder::Console::ConsoleMessage::S ource::Console_api; | 158 case ConsoleAPIMessageSource: return TypeBuilder::Console::ConsoleMessage::S ource::Console_api; |
| 150 case StorageMessageSource: return TypeBuilder::Console::ConsoleMessage::Sour ce::Storage; | 159 case StorageMessageSource: return TypeBuilder::Console::ConsoleMessage::Sour ce::Storage; |
| 151 case AppCacheMessageSource: return TypeBuilder::Console::ConsoleMessage::Sou rce::Appcache; | 160 case AppCacheMessageSource: return TypeBuilder::Console::ConsoleMessage::Sou rce::Appcache; |
| 152 case RenderingMessageSource: return TypeBuilder::Console::ConsoleMessage::So urce::Rendering; | 161 case RenderingMessageSource: return TypeBuilder::Console::ConsoleMessage::So urce::Rendering; |
| (...skipping 29 matching lines...) Expand all Loading... | |
| 182 { | 191 { |
| 183 switch (level) { | 192 switch (level) { |
| 184 case DebugMessageLevel: return TypeBuilder::Console::ConsoleMessage::Level:: Debug; | 193 case DebugMessageLevel: return TypeBuilder::Console::ConsoleMessage::Level:: Debug; |
| 185 case LogMessageLevel: return TypeBuilder::Console::ConsoleMessage::Level::Lo g; | 194 case LogMessageLevel: return TypeBuilder::Console::ConsoleMessage::Level::Lo g; |
| 186 case WarningMessageLevel: return TypeBuilder::Console::ConsoleMessage::Level ::Warning; | 195 case WarningMessageLevel: return TypeBuilder::Console::ConsoleMessage::Level ::Warning; |
| 187 case ErrorMessageLevel: return TypeBuilder::Console::ConsoleMessage::Level:: Error; | 196 case ErrorMessageLevel: return TypeBuilder::Console::ConsoleMessage::Level:: Error; |
| 188 } | 197 } |
| 189 return TypeBuilder::Console::ConsoleMessage::Level::Log; | 198 return TypeBuilder::Console::ConsoleMessage::Level::Log; |
| 190 } | 199 } |
| 191 | 200 |
| 192 void ConsoleMessage::addToFrontend(InspectorFrontend::Console* frontend, Injecte dScriptManager* injectedScriptManager, bool generatePreview) | 201 PassRefPtr<TypeBuilder::Console::ConsoleMessage> ConsoleMessage::generateJSONWit houtArguments() const |
| 193 { | 202 { |
| 194 RefPtr<TypeBuilder::Console::ConsoleMessage> jsonObj = TypeBuilder::Console: :ConsoleMessage::create() | 203 RefPtr<TypeBuilder::Console::ConsoleMessage> jsonObj = TypeBuilder::Console: :ConsoleMessage::create() |
| 195 .setSource(messageSourceValue(m_source)) | 204 .setSource(messageSourceValue(m_source)) |
| 196 .setLevel(messageLevelValue(m_level)) | 205 .setLevel(messageLevelValue(m_level)) |
| 197 .setText(m_message) | 206 .setText(m_message) |
| 198 .setTimestamp(m_timestamp); | 207 .setTimestamp(m_timestamp); |
| 199 // FIXME: only send out type for ConsoleAPI source messages. | 208 // FIXME: only send out type for ConsoleAPI source messages. |
| 200 jsonObj->setType(messageTypeValue(m_type)); | 209 jsonObj->setType(messageTypeValue(m_type)); |
| 201 jsonObj->setLine(static_cast<int>(m_line)); | 210 jsonObj->setLine(static_cast<int>(m_line)); |
| 202 jsonObj->setColumn(static_cast<int>(m_column)); | 211 jsonObj->setColumn(static_cast<int>(m_column)); |
| 203 jsonObj->setUrl(m_url); | 212 jsonObj->setUrl(m_url); |
| 213 jsonObj->setExecutionContextURL(m_executionContextURL); | |
| 204 jsonObj->setRepeatCount(static_cast<int>(m_repeatCount)); | 214 jsonObj->setRepeatCount(static_cast<int>(m_repeatCount)); |
| 205 if (m_source == NetworkMessageSource && !m_requestId.isEmpty()) | 215 if (m_source == NetworkMessageSource && !m_requestId.isEmpty()) |
| 206 jsonObj->setNetworkRequestId(m_requestId); | 216 jsonObj->setNetworkRequestId(m_requestId); |
| 217 if (m_callStack) | |
| 218 jsonObj->setStackTrace(m_callStack->buildInspectorArray()); | |
| 219 return jsonObj; | |
| 220 } | |
| 221 | |
| 222 void ConsoleMessage::addToFrontend(InspectorFrontend::Console* frontend, Injecte dScriptManager* injectedScriptManager, bool generatePreview) | |
| 223 { | |
| 224 RefPtr<TypeBuilder::Console::ConsoleMessage> jsonObj = generateJSONWithoutAr guments(); | |
| 207 if (m_arguments && m_arguments->argumentCount()) { | 225 if (m_arguments && m_arguments->argumentCount()) { |
| 208 InjectedScript injectedScript = injectedScriptManager->injectedScriptFor (m_arguments->globalState()); | 226 InjectedScript injectedScript = injectedScriptManager->injectedScriptFor (m_arguments->globalState()); |
| 209 if (!injectedScript.hasNoValue()) { | 227 if (!injectedScript.hasNoValue()) { |
| 210 RefPtr<TypeBuilder::Array<TypeBuilder::Runtime::RemoteObject> > json Args = TypeBuilder::Array<TypeBuilder::Runtime::RemoteObject>::create(); | 228 RefPtr<TypeBuilder::Array<TypeBuilder::Runtime::RemoteObject> > json Args = TypeBuilder::Array<TypeBuilder::Runtime::RemoteObject>::create(); |
| 211 if (m_type == TableMessageType && generatePreview && m_arguments->ar gumentCount()) { | 229 if (m_type == TableMessageType && generatePreview && m_arguments->ar gumentCount()) { |
| 212 ScriptValue table = m_arguments->argumentAt(0); | 230 ScriptValue table = m_arguments->argumentAt(0); |
| 213 ScriptValue columns = m_arguments->argumentCount() > 1 ? m_argum ents->argumentAt(1) : ScriptValue(); | 231 ScriptValue columns = m_arguments->argumentCount() > 1 ? m_argum ents->argumentAt(1) : ScriptValue(); |
| 214 RefPtr<TypeBuilder::Runtime::RemoteObject> inspectorValue = inje ctedScript.wrapTable(table, columns); | 232 RefPtr<TypeBuilder::Runtime::RemoteObject> inspectorValue = inje ctedScript.wrapTable(table, columns); |
| 215 if (!inspectorValue) { | 233 if (!inspectorValue) { |
| 216 ASSERT_NOT_REACHED(); | 234 ASSERT_NOT_REACHED(); |
| 217 return; | 235 return; |
| 218 } | 236 } |
| 219 jsonArgs->addItem(inspectorValue); | 237 jsonArgs->addItem(inspectorValue); |
| 220 } else { | 238 } else { |
| 221 for (unsigned i = 0; i < m_arguments->argumentCount(); ++i) { | 239 for (unsigned i = 0; i < m_arguments->argumentCount(); ++i) { |
| 222 RefPtr<TypeBuilder::Runtime::RemoteObject> inspectorValue = injectedScript.wrapObject(m_arguments->argumentAt(i), "console", generatePreview ); | 240 RefPtr<TypeBuilder::Runtime::RemoteObject> inspectorValue = injectedScript.wrapObject(m_arguments->argumentAt(i), "console", generatePreview ); |
| 223 if (!inspectorValue) { | 241 if (!inspectorValue) { |
| 224 ASSERT_NOT_REACHED(); | 242 ASSERT_NOT_REACHED(); |
| 225 return; | 243 return; |
| 226 } | 244 } |
| 227 jsonArgs->addItem(inspectorValue); | 245 jsonArgs->addItem(inspectorValue); |
| 228 } | 246 } |
| 229 } | 247 } |
| 230 jsonObj->setParameters(jsonArgs); | 248 jsonObj->setParameters(jsonArgs); |
| 231 } | 249 } |
| 232 } | 250 } |
| 233 if (m_callStack) | |
| 234 jsonObj->setStackTrace(m_callStack->buildInspectorArray()); | |
| 235 frontend->messageAdded(jsonObj); | 251 frontend->messageAdded(jsonObj); |
| 236 } | 252 } |
| 237 | 253 |
| 238 void ConsoleMessage::incrementCount() | 254 void ConsoleMessage::incrementCount() |
| 239 { | 255 { |
| 240 m_timestamp = WTF::currentTime(); | 256 m_timestamp = WTF::currentTime(); |
| 241 ++m_repeatCount; | 257 ++m_repeatCount; |
| 242 } | 258 } |
| 243 | 259 |
| 244 void ConsoleMessage::updateRepeatCountInConsole(InspectorFrontend::Console* fron tend) | 260 void ConsoleMessage::updateRepeatCountInConsole(InspectorFrontend::Console* fron tend) |
| (...skipping 23 matching lines...) Expand all Loading... | |
| 268 return msg->m_source == m_source | 284 return msg->m_source == m_source |
| 269 && msg->m_type == m_type | 285 && msg->m_type == m_type |
| 270 && msg->m_level == m_level | 286 && msg->m_level == m_level |
| 271 && msg->m_message == m_message | 287 && msg->m_message == m_message |
| 272 && msg->m_line == m_line | 288 && msg->m_line == m_line |
| 273 && msg->m_column == m_column | 289 && msg->m_column == m_column |
| 274 && msg->m_url == m_url | 290 && msg->m_url == m_url |
| 275 && msg->m_requestId == m_requestId; | 291 && msg->m_requestId == m_requestId; |
| 276 } | 292 } |
| 277 | 293 |
| 294 bool ConsoleMessage::hasGeneratedCallStack() const | |
| 295 { | |
| 296 return m_callStack; | |
| 297 } | |
| 298 | |
| 278 void ConsoleMessage::windowCleared(DOMWindow* window) | 299 void ConsoleMessage::windowCleared(DOMWindow* window) |
| 279 { | 300 { |
| 280 if (!m_arguments) | 301 if (!m_arguments) |
| 281 return; | 302 return; |
| 282 if (m_arguments->globalState()->domWindow() != window) | 303 if (m_arguments->globalState()->domWindow() != window) |
| 283 return; | 304 return; |
| 284 if (!m_message) | 305 if (!m_message) |
| 285 m_message = "<message collected>"; | 306 m_message = "<message collected>"; |
| 286 m_arguments.clear(); | 307 m_arguments.clear(); |
| 287 } | 308 } |
| 288 | 309 |
| 289 unsigned ConsoleMessage::argumentCount() | 310 unsigned ConsoleMessage::argumentCount() |
| 290 { | 311 { |
| 291 if (m_arguments) | 312 if (m_arguments) |
| 292 return m_arguments->argumentCount(); | 313 return m_arguments->argumentCount(); |
| 293 return 0; | 314 return 0; |
| 294 } | 315 } |
| 295 | 316 |
| 296 } // namespace WebCore | 317 } // namespace WebCore |
| 297 | 318 |
| OLD | NEW |