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 17 matching lines...) Expand all Loading... |
28 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 28 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
29 */ | 29 */ |
30 | 30 |
31 #include "config.h" | 31 #include "config.h" |
32 | 32 |
33 | 33 |
34 #include "core/inspector/ConsoleMessage.h" | 34 #include "core/inspector/ConsoleMessage.h" |
35 | 35 |
36 #include "bindings/v8/ScriptCallStackFactory.h" | 36 #include "bindings/v8/ScriptCallStackFactory.h" |
37 #include "bindings/v8/ScriptValue.h" | 37 #include "bindings/v8/ScriptValue.h" |
| 38 #include "core/dom/ExecutionContext.h" |
38 #include "core/inspector/IdentifiersFactory.h" | 39 #include "core/inspector/IdentifiersFactory.h" |
39 #include "core/inspector/InjectedScript.h" | 40 #include "core/inspector/InjectedScript.h" |
40 #include "core/inspector/InjectedScriptManager.h" | 41 #include "core/inspector/InjectedScriptManager.h" |
41 #include "core/inspector/ScriptArguments.h" | 42 #include "core/inspector/ScriptArguments.h" |
42 #include "core/inspector/ScriptCallFrame.h" | 43 #include "core/inspector/ScriptCallFrame.h" |
43 #include "core/inspector/ScriptCallStack.h" | 44 #include "core/inspector/ScriptCallStack.h" |
44 #include "wtf/CurrentTime.h" | 45 #include "wtf/CurrentTime.h" |
45 | 46 |
46 namespace WebCore { | 47 namespace WebCore { |
47 | 48 |
48 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) |
49 : m_source(source) | 50 : m_source(source) |
50 , m_type(type) | 51 , m_type(type) |
51 , m_level(level) | 52 , m_level(level) |
52 , m_message(message) | 53 , m_message(message) |
53 , m_url() | 54 , m_url() |
54 , m_line(0) | 55 , m_line(0) |
55 , m_column(0) | 56 , m_column(0) |
56 , m_requestId(IdentifiersFactory::requestId(0)) | 57 , m_requestId(IdentifiersFactory::requestId(0)) |
57 , m_timestamp(WTF::currentTime()) | 58 , m_timestamp(WTF::currentTime()) |
58 { | 59 { |
59 autogenerateMetadata(canGenerateCallStack); | 60 autogenerateMetadata(canGenerateCallStack); |
60 } | 61 } |
61 | 62 |
62 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) | 63 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) |
63 : m_source(source) | 64 : m_source(source) |
64 , m_type(type) | 65 , m_type(type) |
65 , m_level(level) | 66 , m_level(level) |
66 , m_message(message) | 67 , m_message(message) |
| 68 , m_scriptState(state) |
67 , m_url(url) | 69 , m_url(url) |
68 , m_line(line) | 70 , m_line(line) |
69 , m_column(column) | 71 , m_column(column) |
70 , m_requestId(IdentifiersFactory::requestId(requestIdentifier)) | 72 , m_requestId(IdentifiersFactory::requestId(requestIdentifier)) |
71 , m_timestamp(WTF::currentTime()) | 73 , m_timestamp(WTF::currentTime()) |
72 { | 74 { |
73 autogenerateMetadata(canGenerateCallStack, state); | 75 autogenerateMetadata(canGenerateCallStack, state); |
74 } | 76 } |
75 | 77 |
76 ConsoleMessage::ConsoleMessage(bool, MessageSource source, MessageType type, Mes
sageLevel level, const String& message, PassRefPtr<ScriptCallStack> callStack, u
nsigned long requestIdentifier) | 78 ConsoleMessage::ConsoleMessage(bool, MessageSource source, MessageType type, Mes
sageLevel level, const String& message, PassRefPtr<ScriptCallStack> callStack, u
nsigned long requestIdentifier) |
77 : m_source(source) | 79 : m_source(source) |
78 , m_type(type) | 80 , m_type(type) |
79 , m_level(level) | 81 , m_level(level) |
80 , m_message(message) | 82 , m_message(message) |
| 83 , m_scriptState(0) |
81 , m_arguments(nullptr) | 84 , m_arguments(nullptr) |
82 , m_line(0) | 85 , m_line(0) |
83 , m_column(0) | 86 , m_column(0) |
84 , m_requestId(IdentifiersFactory::requestId(requestIdentifier)) | 87 , m_requestId(IdentifiersFactory::requestId(requestIdentifier)) |
85 , m_timestamp(WTF::currentTime()) | 88 , m_timestamp(WTF::currentTime()) |
86 { | 89 { |
87 if (callStack && callStack->size()) { | 90 if (callStack && callStack->size()) { |
88 const ScriptCallFrame& frame = callStack->at(0); | 91 const ScriptCallFrame& frame = callStack->at(0); |
89 m_url = frame.sourceURL(); | 92 m_url = frame.sourceURL(); |
90 m_line = frame.lineNumber(); | 93 m_line = frame.lineNumber(); |
91 m_column = frame.columnNumber(); | 94 m_column = frame.columnNumber(); |
92 } | 95 } |
93 m_callStack = callStack; | 96 m_callStack = callStack; |
94 } | 97 } |
95 | 98 |
96 ConsoleMessage::ConsoleMessage(bool canGenerateCallStack, MessageSource source,
MessageType type, MessageLevel level, const String& message, PassRefPtr<ScriptAr
guments> arguments, ScriptState* state, unsigned long requestIdentifier) | 99 ConsoleMessage::ConsoleMessage(bool canGenerateCallStack, MessageSource source,
MessageType type, MessageLevel level, const String& message, PassRefPtr<ScriptAr
guments> arguments, ScriptState* state, unsigned long requestIdentifier) |
97 : m_source(source) | 100 : m_source(source) |
98 , m_type(type) | 101 , m_type(type) |
99 , m_level(level) | 102 , m_level(level) |
100 , m_message(message) | 103 , m_message(message) |
| 104 , m_scriptState(state) |
101 , m_arguments(arguments) | 105 , m_arguments(arguments) |
102 , m_url() | 106 , m_url() |
103 , m_line(0) | 107 , m_line(0) |
104 , m_column(0) | 108 , m_column(0) |
105 , m_requestId(IdentifiersFactory::requestId(requestIdentifier)) | 109 , m_requestId(IdentifiersFactory::requestId(requestIdentifier)) |
106 , m_timestamp(WTF::currentTime()) | 110 , m_timestamp(WTF::currentTime()) |
107 { | 111 { |
108 autogenerateMetadata(canGenerateCallStack, state); | 112 autogenerateMetadata(canGenerateCallStack, state); |
109 } | 113 } |
110 | 114 |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
187 RefPtr<TypeBuilder::Console::ConsoleMessage> jsonObj = TypeBuilder::Console:
:ConsoleMessage::create() | 191 RefPtr<TypeBuilder::Console::ConsoleMessage> jsonObj = TypeBuilder::Console:
:ConsoleMessage::create() |
188 .setSource(messageSourceValue(m_source)) | 192 .setSource(messageSourceValue(m_source)) |
189 .setLevel(messageLevelValue(m_level)) | 193 .setLevel(messageLevelValue(m_level)) |
190 .setText(m_message) | 194 .setText(m_message) |
191 .setTimestamp(m_timestamp); | 195 .setTimestamp(m_timestamp); |
192 // FIXME: only send out type for ConsoleAPI source messages. | 196 // FIXME: only send out type for ConsoleAPI source messages. |
193 jsonObj->setType(messageTypeValue(m_type)); | 197 jsonObj->setType(messageTypeValue(m_type)); |
194 jsonObj->setLine(static_cast<int>(m_line)); | 198 jsonObj->setLine(static_cast<int>(m_line)); |
195 jsonObj->setColumn(static_cast<int>(m_column)); | 199 jsonObj->setColumn(static_cast<int>(m_column)); |
196 jsonObj->setUrl(m_url); | 200 jsonObj->setUrl(m_url); |
| 201 if (m_scriptState && m_scriptState->executionContext()->isDocument()) |
| 202 jsonObj->setExecutionContextId(injectedScriptManager->injectedScriptIdFo
r(m_scriptState)); |
197 if (m_source == NetworkMessageSource && !m_requestId.isEmpty()) | 203 if (m_source == NetworkMessageSource && !m_requestId.isEmpty()) |
198 jsonObj->setNetworkRequestId(m_requestId); | 204 jsonObj->setNetworkRequestId(m_requestId); |
199 if (m_arguments && m_arguments->argumentCount()) { | 205 if (m_arguments && m_arguments->argumentCount()) { |
200 InjectedScript injectedScript = injectedScriptManager->injectedScriptFor
(m_arguments->globalState()); | 206 InjectedScript injectedScript = injectedScriptManager->injectedScriptFor
(m_arguments->globalState()); |
201 if (!injectedScript.hasNoValue()) { | 207 if (!injectedScript.hasNoValue()) { |
202 RefPtr<TypeBuilder::Array<TypeBuilder::Runtime::RemoteObject> > json
Args = TypeBuilder::Array<TypeBuilder::Runtime::RemoteObject>::create(); | 208 RefPtr<TypeBuilder::Array<TypeBuilder::Runtime::RemoteObject> > json
Args = TypeBuilder::Array<TypeBuilder::Runtime::RemoteObject>::create(); |
203 if (m_type == TableMessageType && generatePreview && m_arguments->ar
gumentCount()) { | 209 if (m_type == TableMessageType && generatePreview && m_arguments->ar
gumentCount()) { |
204 ScriptValue table = m_arguments->argumentAt(0); | 210 ScriptValue table = m_arguments->argumentAt(0); |
205 ScriptValue columns = m_arguments->argumentCount() > 1 ? m_argum
ents->argumentAt(1) : ScriptValue(); | 211 ScriptValue columns = m_arguments->argumentCount() > 1 ? m_argum
ents->argumentAt(1) : ScriptValue(); |
206 RefPtr<TypeBuilder::Runtime::RemoteObject> inspectorValue = inje
ctedScript.wrapTable(table, columns); | 212 RefPtr<TypeBuilder::Runtime::RemoteObject> inspectorValue = inje
ctedScript.wrapTable(table, columns); |
(...skipping 15 matching lines...) Expand all Loading... |
222 jsonObj->setParameters(jsonArgs); | 228 jsonObj->setParameters(jsonArgs); |
223 } | 229 } |
224 } | 230 } |
225 if (m_callStack) | 231 if (m_callStack) |
226 jsonObj->setStackTrace(m_callStack->buildInspectorArray()); | 232 jsonObj->setStackTrace(m_callStack->buildInspectorArray()); |
227 frontend->messageAdded(jsonObj); | 233 frontend->messageAdded(jsonObj); |
228 } | 234 } |
229 | 235 |
230 void ConsoleMessage::windowCleared(DOMWindow* window) | 236 void ConsoleMessage::windowCleared(DOMWindow* window) |
231 { | 237 { |
| 238 if (m_scriptState && m_scriptState->domWindow() == window) |
| 239 m_scriptState = 0; |
| 240 |
232 if (!m_arguments) | 241 if (!m_arguments) |
233 return; | 242 return; |
234 if (m_arguments->globalState()->domWindow() != window) | 243 if (m_arguments->globalState()->domWindow() != window) |
235 return; | 244 return; |
236 if (!m_message) | 245 if (!m_message) |
237 m_message = "<message collected>"; | 246 m_message = "<message collected>"; |
238 m_arguments.clear(); | 247 m_arguments.clear(); |
239 } | 248 } |
240 | 249 |
241 unsigned ConsoleMessage::argumentCount() | 250 unsigned ConsoleMessage::argumentCount() |
242 { | 251 { |
243 if (m_arguments) | 252 if (m_arguments) |
244 return m_arguments->argumentCount(); | 253 return m_arguments->argumentCount(); |
245 return 0; | 254 return 0; |
246 } | 255 } |
247 | 256 |
248 } // namespace WebCore | 257 } // namespace WebCore |
249 | 258 |
OLD | NEW |