Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1317)

Side by Side Diff: Source/core/inspector/ConsoleMessage.cpp

Issue 185713007: DevTools: Add timestamp support in the console (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Up for review Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
46 namespace WebCore { 46 namespace WebCore {
47 47
48 ConsoleMessage::ConsoleMessage(bool canGenerateCallStack, MessageSource source, MessageType type, MessageLevel level, const String& message) 48 ConsoleMessage::ConsoleMessage(bool canGenerateCallStack, MessageSource source, MessageType type, MessageLevel level, const String& message)
49 : m_source(source) 49 : m_source(source)
50 , m_type(type) 50 , m_type(type)
51 , m_level(level) 51 , m_level(level)
52 , m_message(message) 52 , m_message(message)
53 , m_url() 53 , m_url()
54 , m_line(0) 54 , m_line(0)
55 , m_column(0) 55 , m_column(0)
56 , m_repeatCount(1)
57 , m_requestId(IdentifiersFactory::requestId(0)) 56 , m_requestId(IdentifiersFactory::requestId(0))
58 , m_timestamp(WTF::currentTime()) 57 , m_timestamp(WTF::currentTime())
59 { 58 {
60 autogenerateMetadata(canGenerateCallStack); 59 autogenerateMetadata(canGenerateCallStack);
61 } 60 }
62 61
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) 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)
64 : m_source(source) 63 : m_source(source)
65 , m_type(type) 64 , m_type(type)
66 , m_level(level) 65 , m_level(level)
67 , m_message(message) 66 , m_message(message)
68 , m_url(url) 67 , m_url(url)
69 , m_line(line) 68 , m_line(line)
70 , m_column(column) 69 , m_column(column)
71 , m_repeatCount(1)
72 , m_requestId(IdentifiersFactory::requestId(requestIdentifier)) 70 , m_requestId(IdentifiersFactory::requestId(requestIdentifier))
73 , m_timestamp(WTF::currentTime()) 71 , m_timestamp(WTF::currentTime())
74 { 72 {
75 autogenerateMetadata(canGenerateCallStack, state); 73 autogenerateMetadata(canGenerateCallStack, state);
76 } 74 }
77 75
78 ConsoleMessage::ConsoleMessage(bool, MessageSource source, MessageType type, Mes sageLevel level, const String& message, PassRefPtr<ScriptCallStack> callStack, u nsigned long requestIdentifier) 76 ConsoleMessage::ConsoleMessage(bool, MessageSource source, MessageType type, Mes sageLevel level, const String& message, PassRefPtr<ScriptCallStack> callStack, u nsigned long requestIdentifier)
79 : m_source(source) 77 : m_source(source)
80 , m_type(type) 78 , m_type(type)
81 , m_level(level) 79 , m_level(level)
82 , m_message(message) 80 , m_message(message)
83 , m_arguments(nullptr) 81 , m_arguments(nullptr)
84 , m_line(0) 82 , m_line(0)
85 , m_column(0) 83 , m_column(0)
86 , m_repeatCount(1)
87 , m_requestId(IdentifiersFactory::requestId(requestIdentifier)) 84 , m_requestId(IdentifiersFactory::requestId(requestIdentifier))
88 , m_timestamp(WTF::currentTime()) 85 , m_timestamp(WTF::currentTime())
89 { 86 {
90 if (callStack && callStack->size()) { 87 if (callStack && callStack->size()) {
91 const ScriptCallFrame& frame = callStack->at(0); 88 const ScriptCallFrame& frame = callStack->at(0);
92 m_url = frame.sourceURL(); 89 m_url = frame.sourceURL();
93 m_line = frame.lineNumber(); 90 m_line = frame.lineNumber();
94 m_column = frame.columnNumber(); 91 m_column = frame.columnNumber();
95 } 92 }
96 m_callStack = callStack; 93 m_callStack = callStack;
97 } 94 }
98 95
99 ConsoleMessage::ConsoleMessage(bool canGenerateCallStack, MessageSource source, MessageType type, MessageLevel level, const String& message, PassRefPtr<ScriptAr guments> arguments, ScriptState* state, unsigned long requestIdentifier) 96 ConsoleMessage::ConsoleMessage(bool canGenerateCallStack, MessageSource source, MessageType type, MessageLevel level, const String& message, PassRefPtr<ScriptAr guments> arguments, ScriptState* state, unsigned long requestIdentifier)
100 : m_source(source) 97 : m_source(source)
101 , m_type(type) 98 , m_type(type)
102 , m_level(level) 99 , m_level(level)
103 , m_message(message) 100 , m_message(message)
104 , m_arguments(arguments) 101 , m_arguments(arguments)
105 , m_url() 102 , m_url()
106 , m_line(0) 103 , m_line(0)
107 , m_column(0) 104 , m_column(0)
108 , m_repeatCount(1)
109 , m_requestId(IdentifiersFactory::requestId(requestIdentifier)) 105 , m_requestId(IdentifiersFactory::requestId(requestIdentifier))
110 , m_timestamp(WTF::currentTime()) 106 , m_timestamp(WTF::currentTime())
111 { 107 {
112 autogenerateMetadata(canGenerateCallStack, state); 108 autogenerateMetadata(canGenerateCallStack, state);
113 } 109 }
114 110
115 ConsoleMessage::~ConsoleMessage() 111 ConsoleMessage::~ConsoleMessage()
116 { 112 {
117 } 113 }
118 114
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
191 RefPtr<TypeBuilder::Console::ConsoleMessage> jsonObj = TypeBuilder::Console: :ConsoleMessage::create() 187 RefPtr<TypeBuilder::Console::ConsoleMessage> jsonObj = TypeBuilder::Console: :ConsoleMessage::create()
192 .setSource(messageSourceValue(m_source)) 188 .setSource(messageSourceValue(m_source))
193 .setLevel(messageLevelValue(m_level)) 189 .setLevel(messageLevelValue(m_level))
194 .setText(m_message) 190 .setText(m_message)
195 .setTimestamp(m_timestamp); 191 .setTimestamp(m_timestamp);
196 // FIXME: only send out type for ConsoleAPI source messages. 192 // FIXME: only send out type for ConsoleAPI source messages.
197 jsonObj->setType(messageTypeValue(m_type)); 193 jsonObj->setType(messageTypeValue(m_type));
198 jsonObj->setLine(static_cast<int>(m_line)); 194 jsonObj->setLine(static_cast<int>(m_line));
199 jsonObj->setColumn(static_cast<int>(m_column)); 195 jsonObj->setColumn(static_cast<int>(m_column));
200 jsonObj->setUrl(m_url); 196 jsonObj->setUrl(m_url);
201 jsonObj->setRepeatCount(static_cast<int>(m_repeatCount));
202 if (m_source == NetworkMessageSource && !m_requestId.isEmpty()) 197 if (m_source == NetworkMessageSource && !m_requestId.isEmpty())
203 jsonObj->setNetworkRequestId(m_requestId); 198 jsonObj->setNetworkRequestId(m_requestId);
204 if (m_arguments && m_arguments->argumentCount()) { 199 if (m_arguments && m_arguments->argumentCount()) {
205 InjectedScript injectedScript = injectedScriptManager->injectedScriptFor (m_arguments->globalState()); 200 InjectedScript injectedScript = injectedScriptManager->injectedScriptFor (m_arguments->globalState());
206 if (!injectedScript.hasNoValue()) { 201 if (!injectedScript.hasNoValue()) {
207 RefPtr<TypeBuilder::Array<TypeBuilder::Runtime::RemoteObject> > json Args = TypeBuilder::Array<TypeBuilder::Runtime::RemoteObject>::create(); 202 RefPtr<TypeBuilder::Array<TypeBuilder::Runtime::RemoteObject> > json Args = TypeBuilder::Array<TypeBuilder::Runtime::RemoteObject>::create();
208 if (m_type == TableMessageType && generatePreview && m_arguments->ar gumentCount()) { 203 if (m_type == TableMessageType && generatePreview && m_arguments->ar gumentCount()) {
209 ScriptValue table = m_arguments->argumentAt(0); 204 ScriptValue table = m_arguments->argumentAt(0);
210 ScriptValue columns = m_arguments->argumentCount() > 1 ? m_argum ents->argumentAt(1) : ScriptValue(); 205 ScriptValue columns = m_arguments->argumentCount() > 1 ? m_argum ents->argumentAt(1) : ScriptValue();
211 RefPtr<TypeBuilder::Runtime::RemoteObject> inspectorValue = inje ctedScript.wrapTable(table, columns); 206 RefPtr<TypeBuilder::Runtime::RemoteObject> inspectorValue = inje ctedScript.wrapTable(table, columns);
(...skipping 13 matching lines...) Expand all
225 } 220 }
226 } 221 }
227 jsonObj->setParameters(jsonArgs); 222 jsonObj->setParameters(jsonArgs);
228 } 223 }
229 } 224 }
230 if (m_callStack) 225 if (m_callStack)
231 jsonObj->setStackTrace(m_callStack->buildInspectorArray()); 226 jsonObj->setStackTrace(m_callStack->buildInspectorArray());
232 frontend->messageAdded(jsonObj); 227 frontend->messageAdded(jsonObj);
233 } 228 }
234 229
235 void ConsoleMessage::incrementCount()
236 {
237 m_timestamp = WTF::currentTime();
238 ++m_repeatCount;
239 }
240
241 void ConsoleMessage::updateRepeatCountInConsole(InspectorFrontend::Console* fron tend)
242 {
243 frontend->messageRepeatCountUpdated(m_repeatCount, m_timestamp);
244 }
245
246 bool ConsoleMessage::isEqual(ConsoleMessage* msg) const
247 {
248 if (m_arguments) {
249 if (!m_arguments->isEqual(msg->m_arguments.get()))
250 return false;
251 // Never treat objects as equal - their properties might change over tim e.
252 for (size_t i = 0; i < m_arguments->argumentCount(); ++i) {
253 if (m_arguments->argumentAt(i).isObject())
254 return false;
255 }
256 } else if (msg->m_arguments)
257 return false;
258
259 if (m_callStack) {
260 if (!m_callStack->isEqual(msg->m_callStack.get()))
261 return false;
262 } else if (msg->m_callStack)
263 return false;
264
265 return msg->m_source == m_source
266 && msg->m_type == m_type
267 && msg->m_level == m_level
268 && msg->m_message == m_message
269 && msg->m_line == m_line
270 && msg->m_column == m_column
271 && msg->m_url == m_url
272 && msg->m_requestId == m_requestId;
273 }
274
275 void ConsoleMessage::windowCleared(DOMWindow* window) 230 void ConsoleMessage::windowCleared(DOMWindow* window)
276 { 231 {
277 if (!m_arguments) 232 if (!m_arguments)
278 return; 233 return;
279 if (m_arguments->globalState()->domWindow() != window) 234 if (m_arguments->globalState()->domWindow() != window)
280 return; 235 return;
281 if (!m_message) 236 if (!m_message)
282 m_message = "<message collected>"; 237 m_message = "<message collected>";
283 m_arguments.clear(); 238 m_arguments.clear();
284 } 239 }
285 240
286 unsigned ConsoleMessage::argumentCount() 241 unsigned ConsoleMessage::argumentCount()
287 { 242 {
288 if (m_arguments) 243 if (m_arguments)
289 return m_arguments->argumentCount(); 244 return m_arguments->argumentCount();
290 return 0; 245 return 0;
291 } 246 }
292 247
293 } // namespace WebCore 248 } // namespace WebCore
294 249
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698