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 |