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

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

Issue 464293002: [DevTools] ConsoleMessage storage moved from ConsoleAgent (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@remove-can-generate
Patch Set: Rebased Created 6 years, 4 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
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2011 Google Inc. All rights reserved. 2 * Copyright (C) 2011 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 1. Redistributions of source code must retain the above copyright 7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer. 8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright 9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the 10 * notice, this list of conditions and the following disclaimer in the
(...skipping 11 matching lines...) Expand all
22 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 22 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23 */ 23 */
24 24
25 25
26 #include "config.h" 26 #include "config.h"
27 #include "core/inspector/InspectorConsoleAgent.h" 27 #include "core/inspector/InspectorConsoleAgent.h"
28 28
29 #include "bindings/core/v8/ScriptCallStackFactory.h" 29 #include "bindings/core/v8/ScriptCallStackFactory.h"
30 #include "bindings/core/v8/ScriptController.h" 30 #include "bindings/core/v8/ScriptController.h"
31 #include "bindings/core/v8/ScriptProfiler.h" 31 #include "bindings/core/v8/ScriptProfiler.h"
32 #include "core/frame/FrameConsole.h"
32 #include "core/frame/LocalFrame.h" 33 #include "core/frame/LocalFrame.h"
33 #include "core/frame/UseCounter.h" 34 #include "core/frame/UseCounter.h"
34 #include "core/inspector/ConsoleMessage.h" 35 #include "core/inspector/ConsoleMessage.h"
36 #include "core/inspector/ConsoleMessageStorage.h"
37 #include "core/inspector/IdentifiersFactory.h"
38 #include "core/inspector/InjectedScript.h"
35 #include "core/inspector/InjectedScriptHost.h" 39 #include "core/inspector/InjectedScriptHost.h"
36 #include "core/inspector/InjectedScriptManager.h" 40 #include "core/inspector/InjectedScriptManager.h"
37 #include "core/inspector/InspectorConsoleMessage.h"
38 #include "core/inspector/InspectorState.h" 41 #include "core/inspector/InspectorState.h"
39 #include "core/inspector/InspectorTimelineAgent.h" 42 #include "core/inspector/InspectorTimelineAgent.h"
40 #include "core/inspector/InspectorTracingAgent.h" 43 #include "core/inspector/InspectorTracingAgent.h"
41 #include "core/inspector/InstrumentingAgents.h" 44 #include "core/inspector/InstrumentingAgents.h"
42 #include "core/inspector/ScriptArguments.h" 45 #include "core/inspector/ScriptArguments.h"
46 #include "core/inspector/ScriptAsyncCallStack.h"
43 #include "core/inspector/ScriptCallFrame.h" 47 #include "core/inspector/ScriptCallFrame.h"
44 #include "core/inspector/ScriptCallStack.h" 48 #include "core/inspector/ScriptCallStack.h"
45 #include "core/loader/DocumentLoader.h" 49 #include "core/loader/DocumentLoader.h"
46 #include "core/page/Page.h" 50 #include "core/page/Page.h"
47 #include "core/workers/WorkerGlobalScopeProxy.h" 51 #include "core/workers/WorkerGlobalScopeProxy.h"
48 #include "platform/network/ResourceError.h" 52 #include "platform/network/ResourceError.h"
49 #include "platform/network/ResourceResponse.h" 53 #include "platform/network/ResourceResponse.h"
50 #include "wtf/CurrentTime.h" 54 #include "wtf/CurrentTime.h"
51 #include "wtf/OwnPtr.h" 55 #include "wtf/OwnPtr.h"
52 #include "wtf/PassOwnPtr.h" 56 #include "wtf/PassOwnPtr.h"
53 #include "wtf/text/StringBuilder.h" 57 #include "wtf/text/StringBuilder.h"
54 #include "wtf/text/WTFString.h" 58 #include "wtf/text/WTFString.h"
55 59
56 namespace blink { 60 namespace blink {
57 61
58 static const unsigned maximumConsoleMessages = 1000;
59 static const int expireConsoleMessagesStep = 100;
60
61 namespace ConsoleAgentState { 62 namespace ConsoleAgentState {
62 static const char monitoringXHR[] = "monitoringXHR"; 63 static const char monitoringXHR[] = "monitoringXHR";
63 static const char consoleMessagesEnabled[] = "consoleMessagesEnabled"; 64 static const char consoleMessagesEnabled[] = "consoleMessagesEnabled";
64 static const char tracingBasedTimeline[] = "tracingBasedTimeline"; 65 static const char tracingBasedTimeline[] = "tracingBasedTimeline";
65 } 66 }
66 67
67 int InspectorConsoleAgent::s_enabledAgentCount = 0; 68 int InspectorConsoleAgent::s_enabledAgentCount = 0;
68 69
69 InspectorConsoleAgent::InspectorConsoleAgent(InspectorTimelineAgent* timelineAge nt, InspectorTracingAgent* tracingAgent, InjectedScriptManager* injectedScriptMa nager) 70 InspectorConsoleAgent::InspectorConsoleAgent(InspectorTimelineAgent* timelineAge nt, InspectorTracingAgent* tracingAgent, InjectedScriptManager* injectedScriptMa nager)
70 : InspectorBaseAgent<InspectorConsoleAgent>("Console") 71 : InspectorBaseAgent<InspectorConsoleAgent>("Console")
71 , m_timelineAgent(timelineAgent) 72 , m_timelineAgent(timelineAgent)
72 , m_tracingAgent(tracingAgent) 73 , m_tracingAgent(tracingAgent)
73 , m_injectedScriptManager(injectedScriptManager) 74 , m_injectedScriptManager(injectedScriptManager)
74 , m_frontend(0) 75 , m_frontend(0)
75 , m_expiredConsoleMessageCount(0)
76 , m_enabled(false) 76 , m_enabled(false)
77 { 77 {
78 } 78 }
79 79
80 InspectorConsoleAgent::~InspectorConsoleAgent() 80 InspectorConsoleAgent::~InspectorConsoleAgent()
81 { 81 {
82 #if !ENABLE(OILPAN) 82 #if !ENABLE(OILPAN)
83 m_instrumentingAgents->setInspectorConsoleAgent(0); 83 m_instrumentingAgents->setInspectorConsoleAgent(0);
84 #endif 84 #endif
85 } 85 }
(...skipping 15 matching lines...) Expand all
101 { 101 {
102 if (m_enabled) 102 if (m_enabled)
103 return; 103 return;
104 m_enabled = true; 104 m_enabled = true;
105 if (!s_enabledAgentCount) 105 if (!s_enabledAgentCount)
106 ScriptController::setCaptureCallStackForUncaughtExceptions(true); 106 ScriptController::setCaptureCallStackForUncaughtExceptions(true);
107 ++s_enabledAgentCount; 107 ++s_enabledAgentCount;
108 108
109 m_state->setBoolean(ConsoleAgentState::consoleMessagesEnabled, true); 109 m_state->setBoolean(ConsoleAgentState::consoleMessagesEnabled, true);
110 110
111 if (m_expiredConsoleMessageCount) { 111 ConsoleMessageStorage* storage = messageStorage();
112 InspectorConsoleMessage expiredMessage(OtherMessageSource, LogMessageTyp e, WarningMessageLevel, String::format("%d console messages are not shown.", m_e xpiredConsoleMessageCount)); 112 if (storage) {
113 expiredMessage.setTimestamp(0); 113 if (storage->expiredCount()) {
114 expiredMessage.addToFrontend(m_frontend, m_injectedScriptManager, false) ; 114 RefPtr<ConsoleMessage> expiredMessage = ConsoleMessage::create(Other MessageSource, WarningMessageLevel, String::format("%d console messages are not shown.", storage->expiredCount()));
115 expiredMessage->setTimestamp(0);
116 sendConsoleMessageToFrontend(expiredMessage, false);
117 }
118 size_t messageCount = storage->size();
119 for (size_t i = 0; i < messageCount; ++i)
120 sendConsoleMessageToFrontend(storage->at(i), false);
115 } 121 }
116
117 size_t messageCount = m_consoleMessages.size();
118 for (size_t i = 0; i < messageCount; ++i)
119 m_consoleMessages[i]->addToFrontend(m_frontend, m_injectedScriptManager, false);
120 } 122 }
121 123
122 void InspectorConsoleAgent::disable(ErrorString*) 124 void InspectorConsoleAgent::disable(ErrorString*)
123 { 125 {
124 if (!m_enabled) 126 if (!m_enabled)
125 return; 127 return;
126 m_enabled = false; 128 m_enabled = false;
127 if (!(--s_enabledAgentCount)) 129 if (!(--s_enabledAgentCount))
128 ScriptController::setCaptureCallStackForUncaughtExceptions(false); 130 ScriptController::setCaptureCallStackForUncaughtExceptions(false);
129 m_state->setBoolean(ConsoleAgentState::consoleMessagesEnabled, false); 131 m_state->setBoolean(ConsoleAgentState::consoleMessagesEnabled, false);
130 m_state->setBoolean(ConsoleAgentState::tracingBasedTimeline, false); 132 m_state->setBoolean(ConsoleAgentState::tracingBasedTimeline, false);
131 } 133 }
132 134
133 void InspectorConsoleAgent::clearMessages(ErrorString*) 135 void InspectorConsoleAgent::clearMessages(ErrorString*)
134 { 136 {
135 m_consoleMessages.clear(); 137 ConsoleMessageStorage* storage = messageStorage();
136 m_expiredConsoleMessageCount = 0; 138 if (storage)
139 storage->clear();
137 m_injectedScriptManager->releaseObjectGroup("console"); 140 m_injectedScriptManager->releaseObjectGroup("console");
138 if (m_frontend && m_enabled) 141 if (m_frontend && m_enabled)
139 m_frontend->messagesCleared(); 142 m_frontend->messagesCleared();
140 } 143 }
141 144
142 void InspectorConsoleAgent::reset() 145 void InspectorConsoleAgent::reset()
143 { 146 {
144 ErrorString error; 147 ErrorString error;
145 clearMessages(&error); 148 clearMessages(&error);
146 m_times.clear(); 149 m_times.clear();
(...skipping 14 matching lines...) Expand all
161 m_frontend = frontend->console(); 164 m_frontend = frontend->console();
162 } 165 }
163 166
164 void InspectorConsoleAgent::clearFrontend() 167 void InspectorConsoleAgent::clearFrontend()
165 { 168 {
166 m_frontend = 0; 169 m_frontend = 0;
167 String errorString; 170 String errorString;
168 disable(&errorString); 171 disable(&errorString);
169 } 172 }
170 173
171 void InspectorConsoleAgent::addMessageToConsole(ConsoleMessage* consoleMessage) 174 void InspectorConsoleAgent::addMessageToConsole(PassRefPtr<ConsoleMessage> conso leMessage)
172 { 175 {
173 InspectorConsoleMessage* message; 176 if (m_frontend && m_enabled)
174 if (consoleMessage->callStack()) { 177 sendConsoleMessageToFrontend(consoleMessage, true);
175 message = new InspectorConsoleMessage(consoleMessage->source(), LogMessa geType, consoleMessage->level(), consoleMessage->message(), consoleMessage->call Stack(), consoleMessage->requestIdentifier());
176 } else {
177 bool shouldGenerateCallStack = m_frontend;
178 message = new InspectorConsoleMessage(shouldGenerateCallStack, consoleMe ssage->source(), LogMessageType, consoleMessage->level(), consoleMessage->messag e(), consoleMessage->url(), consoleMessage->lineNumber(), consoleMessage->column Number(), consoleMessage->scriptState(), consoleMessage->requestIdentifier());
179 }
180 message->setWorkerGlobalScopeProxy(consoleMessage->workerId());
181 addConsoleMessage(adoptPtr(message));
182 } 178 }
183 179
184 void InspectorConsoleAgent::adoptWorkerConsoleMessages(WorkerGlobalScopeProxy* p roxy) 180 void InspectorConsoleAgent::adoptWorkerConsoleMessages(WorkerGlobalScopeProxy* p roxy)
185 { 181 {
186 for (size_t i = 0; i < m_consoleMessages.size(); i++) { 182 ConsoleMessageStorage* storage = messageStorage();
187 if (m_consoleMessages[i]->workerGlobalScopeProxy() == proxy) 183 if (storage) {
188 m_consoleMessages[i]->setWorkerGlobalScopeProxy(nullptr); 184 size_t messageCount = storage->size();
185 for (size_t i = 0; i < messageCount; i++) {
186 if (storage->at(i)->workerId() == proxy)
187 storage->at(i)->setWorkerId(nullptr);
188 }
189 } 189 }
190 } 190 }
191 191
192 void InspectorConsoleAgent::addConsoleAPIMessageToConsole(MessageType type, Mess ageLevel level, const String& message, ScriptState* scriptState, PassRefPtrWillB eRawPtr<ScriptArguments> arguments, unsigned long requestIdentifier) 192 void InspectorConsoleAgent::addConsoleAPIMessageToConsole(MessageType type, Mess ageLevel level, const String& message, ScriptState* scriptState, PassRefPtrWillB eRawPtr<ScriptArguments> arguments, unsigned long requestIdentifier)
193 { 193 {
194 if (type == ClearMessageType) { 194 if (type == ClearMessageType) {
195 ErrorString error; 195 ErrorString error;
196 clearMessages(&error); 196 clearMessages(&error);
197 } 197 }
198 198
199 addConsoleMessage(adoptPtr(new InspectorConsoleMessage(ConsoleAPIMessageSour ce, type, level, message, arguments, scriptState, requestIdentifier))); 199 RefPtr<ConsoleMessage> consoleMessage = ConsoleMessage::create(ConsoleAPIMes sageSource, level, message);
vsevik 2014/08/14 08:06:22 This code belongs to ConsoleBase and we'd better m
kozyatinskiy1 2014/08/20 13:44:18 Done.
200 consoleMessage->setType(type);
201 consoleMessage->setScriptState(scriptState);
202 consoleMessage->setScriptArguments(arguments);
203 consoleMessage->setRequestIdentifier(requestIdentifier);
204
205 storeConsoleMessage(consoleMessage);
206 addMessageToConsole(consoleMessage.release());
200 } 207 }
201 208
202 Vector<unsigned> InspectorConsoleAgent::consoleMessageArgumentCounts() 209 Vector<unsigned> InspectorConsoleAgent::consoleMessageArgumentCounts()
vsevik 2014/08/14 08:06:22 This method is only used for tests. There is no re
kozyatinskiy1 2014/08/20 13:44:18 Done.
203 { 210 {
204 Vector<unsigned> result(m_consoleMessages.size()); 211 ConsoleMessageStorage* storage = messageStorage();
205 for (size_t i = 0; i < m_consoleMessages.size(); i++) 212 if (storage)
206 result[i] = m_consoleMessages[i]->argumentCount(); 213 return storage->argumentCounts();
207 return result; 214 return Vector<unsigned>();
208 } 215 }
209 216
210 void InspectorConsoleAgent::consoleTime(ExecutionContext*, const String& title) 217 void InspectorConsoleAgent::consoleTime(ExecutionContext*, const String& title)
211 { 218 {
212 // Follow Firebug's behavior of requiring a title that is not null or 219 // Follow Firebug's behavior of requiring a title that is not null or
213 // undefined for timing functions 220 // undefined for timing functions
214 if (title.isNull()) 221 if (title.isNull())
215 return; 222 return;
216 223
217 m_times.add(title, monotonicallyIncreasingTime()); 224 m_times.add(title, monotonicallyIncreasingTime());
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
269 String identifier = title.isEmpty() ? String(lastCaller.sourceURL() + ':' + String::number(lastCaller.lineNumber())) 276 String identifier = title.isEmpty() ? String(lastCaller.sourceURL() + ':' + String::number(lastCaller.lineNumber()))
270 : String(title + '@'); 277 : String(title + '@');
271 278
272 HashCountedSet<String>::AddResult result = m_counts.add(identifier); 279 HashCountedSet<String>::AddResult result = m_counts.add(identifier);
273 String message = title + ": " + String::number(result.storedValue->value); 280 String message = title + ": " + String::number(result.storedValue->value);
274 addConsoleAPIMessageToConsole(LogMessageType, DebugMessageLevel, message, sc riptState, nullptr); 281 addConsoleAPIMessageToConsole(LogMessageType, DebugMessageLevel, message, sc riptState, nullptr);
275 } 282 }
276 283
277 void InspectorConsoleAgent::frameWindowDiscarded(LocalDOMWindow* window) 284 void InspectorConsoleAgent::frameWindowDiscarded(LocalDOMWindow* window)
278 { 285 {
279 size_t messageCount = m_consoleMessages.size(); 286 ConsoleMessageStorage* storage = messageStorage();
280 for (size_t i = 0; i < messageCount; ++i) 287 if (storage)
281 m_consoleMessages[i]->windowCleared(window); 288 storage->windowCleared(window);
vsevik 2014/08/14 08:06:22 This is a basic storage functionality and should d
kozyatinskiy1 2014/08/20 13:44:18 Done.
289
282 m_injectedScriptManager->discardInjectedScriptsFor(window); 290 m_injectedScriptManager->discardInjectedScriptsFor(window);
283 } 291 }
284 292
285 void InspectorConsoleAgent::didCommitLoad(LocalFrame* frame, DocumentLoader* loa der) 293 void InspectorConsoleAgent::didCommitLoad(LocalFrame* frame, DocumentLoader* loa der)
286 { 294 {
287 if (loader->frame() != frame->page()->mainFrame()) 295 if (loader->frame() != frame->page()->mainFrame())
288 return; 296 return;
289 reset(); 297 reset();
290 } 298 }
291 299
292 void InspectorConsoleAgent::didFinishXHRLoading(XMLHttpRequest*, ThreadableLoade rClient*, unsigned long requestIdentifier, ScriptString, const AtomicString& met hod, const String& url, const String& sendURL, unsigned sendLineNumber) 300 void InspectorConsoleAgent::didFinishXHRLoading(XMLHttpRequest*, ThreadableLoade rClient*, unsigned long requestIdentifier, ScriptString, const AtomicString& met hod, const String& url, const String& sendURL, unsigned sendLineNumber)
293 { 301 {
294 if (m_frontend && m_state->getBoolean(ConsoleAgentState::monitoringXHR)) { 302 if (m_frontend && m_state->getBoolean(ConsoleAgentState::monitoringXHR)) {
295 String message = "XHR finished loading: " + method + " \"" + url + "\"." ; 303 String message = "XHR finished loading: " + method + " \"" + url + "\"." ;
296 RefPtrWillBeRawPtr<ConsoleMessage> consoleMessage = ConsoleMessage::crea te(NetworkMessageSource, DebugMessageLevel, message, sendURL, sendLineNumber); 304 RefPtrWillBeRawPtr<ConsoleMessage> consoleMessage = ConsoleMessage::crea te(NetworkMessageSource, DebugMessageLevel, message, sendURL, sendLineNumber);
297 consoleMessage->setRequestIdentifier(requestIdentifier); 305 consoleMessage->setRequestIdentifier(requestIdentifier);
298 addMessageToConsole(consoleMessage.get()); 306 storeConsoleMessage(consoleMessage);
vsevik 2014/08/14 08:06:22 These two methods are always called together and t
kozyatinskiy1 2014/08/20 13:44:18 Done.
307 addMessageToConsole(consoleMessage.release());
vsevik 2014/08/14 08:06:22 Actually since this storeConsoleMessage approach i
kozyatinskiy1 2014/08/20 13:44:18 The tests are not broken.
299 } 308 }
300 } 309 }
301 310
302 void InspectorConsoleAgent::didReceiveResourceResponse(LocalFrame*, unsigned lon g requestIdentifier, DocumentLoader* loader, const ResourceResponse& response, R esourceLoader* resourceLoader) 311 void InspectorConsoleAgent::didReceiveResourceResponse(LocalFrame* frame, unsign ed long requestIdentifier, DocumentLoader* loader, const ResourceResponse& respo nse, ResourceLoader* resourceLoader)
vsevik 2014/08/14 08:06:22 frame is not used
kozyatinskiy1 2014/08/20 13:44:18 Done.
303 { 312 {
304 if (!loader) 313 if (!loader)
305 return; 314 return;
306 if (response.httpStatusCode() >= 400) { 315 if (response.httpStatusCode() >= 400) {
307 String message = "Failed to load resource: the server responded with a s tatus of " + String::number(response.httpStatusCode()) + " (" + response.httpSta tusText() + ')'; 316 String message = "Failed to load resource: the server responded with a s tatus of " + String::number(response.httpStatusCode()) + " (" + response.httpSta tusText() + ')';
308 RefPtrWillBeRawPtr<ConsoleMessage> consoleMessage = ConsoleMessage::crea te(NetworkMessageSource, ErrorMessageLevel, message, response.url().string()); 317 RefPtrWillBeRawPtr<ConsoleMessage> consoleMessage = ConsoleMessage::crea te(NetworkMessageSource, ErrorMessageLevel, message, response.url().string());
309 consoleMessage->setRequestIdentifier(requestIdentifier); 318 consoleMessage->setRequestIdentifier(requestIdentifier);
310 addMessageToConsole(consoleMessage.get()); 319 storeConsoleMessage(consoleMessage);
320 addMessageToConsole(consoleMessage.release());
311 } 321 }
312 } 322 }
313 323
314 void InspectorConsoleAgent::didFailLoading(unsigned long requestIdentifier, cons t ResourceError& error) 324 void InspectorConsoleAgent::didFailLoading(unsigned long requestIdentifier, cons t ResourceError& error)
315 { 325 {
316 if (error.isCancellation()) // Report failures only. 326 if (error.isCancellation()) // Report failures only.
317 return; 327 return;
318 StringBuilder message; 328 StringBuilder message;
319 message.appendLiteral("Failed to load resource"); 329 message.appendLiteral("Failed to load resource");
320 if (!error.localizedDescription().isEmpty()) { 330 if (!error.localizedDescription().isEmpty()) {
321 message.appendLiteral(": "); 331 message.appendLiteral(": ");
322 message.append(error.localizedDescription()); 332 message.append(error.localizedDescription());
323 } 333 }
324 RefPtrWillBeRawPtr<ConsoleMessage> consoleMessage = ConsoleMessage::create(N etworkMessageSource, ErrorMessageLevel, message.toString(), error.failingURL()); 334 RefPtrWillBeRawPtr<ConsoleMessage> consoleMessage = ConsoleMessage::create(N etworkMessageSource, ErrorMessageLevel, message.toString(), error.failingURL());
325 consoleMessage->setRequestIdentifier(requestIdentifier); 335 consoleMessage->setRequestIdentifier(requestIdentifier);
326 addMessageToConsole(consoleMessage.get()); 336 storeConsoleMessage(consoleMessage);
337 addMessageToConsole(consoleMessage.release());
327 } 338 }
328 339
329 void InspectorConsoleAgent::setMonitoringXHREnabled(ErrorString*, bool enabled) 340 void InspectorConsoleAgent::setMonitoringXHREnabled(ErrorString*, bool enabled)
330 { 341 {
331 m_state->setBoolean(ConsoleAgentState::monitoringXHR, enabled); 342 m_state->setBoolean(ConsoleAgentState::monitoringXHR, enabled);
332 } 343 }
333 344
334 void InspectorConsoleAgent::addConsoleMessage(PassOwnPtr<InspectorConsoleMessage > consoleMessage) 345 void InspectorConsoleAgent::storeConsoleMessage(PassRefPtr<ConsoleMessage> conso leMessage)
335 { 346 {
336 ASSERT_ARG(consoleMessage, consoleMessage); 347 ConsoleMessageStorage* storage = messageStorage();
348 if (storage)
349 storage->addMessage(consoleMessage);
350 }
337 351
338 if (m_frontend && m_enabled) 352 static TypeBuilder::Console::ConsoleMessage::Source::Enum messageSourceValue(Mes sageSource source)
339 consoleMessage->addToFrontend(m_frontend, m_injectedScriptManager, true) ; 353 {
354 switch (source) {
355 case XMLMessageSource: return TypeBuilder::Console::ConsoleMessage::Source:: Xml;
356 case JSMessageSource: return TypeBuilder::Console::ConsoleMessage::Source::J avascript;
357 case NetworkMessageSource: return TypeBuilder::Console::ConsoleMessage::Sour ce::Network;
358 case ConsoleAPIMessageSource: return TypeBuilder::Console::ConsoleMessage::S ource::Console_api;
359 case StorageMessageSource: return TypeBuilder::Console::ConsoleMessage::Sour ce::Storage;
360 case AppCacheMessageSource: return TypeBuilder::Console::ConsoleMessage::Sou rce::Appcache;
361 case RenderingMessageSource: return TypeBuilder::Console::ConsoleMessage::So urce::Rendering;
362 case CSSMessageSource: return TypeBuilder::Console::ConsoleMessage::Source:: Css;
363 case SecurityMessageSource: return TypeBuilder::Console::ConsoleMessage::Sou rce::Security;
364 case OtherMessageSource: return TypeBuilder::Console::ConsoleMessage::Source ::Other;
365 case DeprecationMessageSource: return TypeBuilder::Console::ConsoleMessage:: Source::Deprecation;
366 }
367 return TypeBuilder::Console::ConsoleMessage::Source::Other;
368 }
340 369
341 m_consoleMessages.append(consoleMessage); 370 static TypeBuilder::Console::ConsoleMessage::Type::Enum messageTypeValue(Message Type type)
371 {
372 switch (type) {
373 case LogMessageType: return TypeBuilder::Console::ConsoleMessage::Type::Log;
374 case ClearMessageType: return TypeBuilder::Console::ConsoleMessage::Type::Cl ear;
375 case DirMessageType: return TypeBuilder::Console::ConsoleMessage::Type::Dir;
376 case DirXMLMessageType: return TypeBuilder::Console::ConsoleMessage::Type::D irxml;
377 case TableMessageType: return TypeBuilder::Console::ConsoleMessage::Type::Ta ble;
378 case TraceMessageType: return TypeBuilder::Console::ConsoleMessage::Type::Tr ace;
379 case StartGroupMessageType: return TypeBuilder::Console::ConsoleMessage::Typ e::StartGroup;
380 case StartGroupCollapsedMessageType: return TypeBuilder::Console::ConsoleMes sage::Type::StartGroupCollapsed;
381 case EndGroupMessageType: return TypeBuilder::Console::ConsoleMessage::Type: :EndGroup;
382 case AssertMessageType: return TypeBuilder::Console::ConsoleMessage::Type::A ssert;
383 }
384 return TypeBuilder::Console::ConsoleMessage::Type::Log;
385 }
342 386
343 if (!m_frontend && m_consoleMessages.size() >= maximumConsoleMessages) { 387 static TypeBuilder::Console::ConsoleMessage::Level::Enum messageLevelValue(Messa geLevel level)
344 m_expiredConsoleMessageCount += expireConsoleMessagesStep; 388 {
345 m_consoleMessages.remove(0, expireConsoleMessagesStep); 389 switch (level) {
390 case DebugMessageLevel: return TypeBuilder::Console::ConsoleMessage::Level:: Debug;
391 case LogMessageLevel: return TypeBuilder::Console::ConsoleMessage::Level::Lo g;
392 case WarningMessageLevel: return TypeBuilder::Console::ConsoleMessage::Level ::Warning;
393 case ErrorMessageLevel: return TypeBuilder::Console::ConsoleMessage::Level:: Error;
394 case InfoMessageLevel: return TypeBuilder::Console::ConsoleMessage::Level::I nfo;
346 } 395 }
396 return TypeBuilder::Console::ConsoleMessage::Level::Log;
397 }
398
399 void InspectorConsoleAgent::sendConsoleMessageToFrontend(PassRefPtr<ConsoleMessa ge> consoleMessage, bool generatePreview)
400 {
401 if (consoleMessage->workerId())
402 return;
403
404 RefPtr<TypeBuilder::Console::ConsoleMessage> jsonObj = TypeBuilder::Console: :ConsoleMessage::create()
405 .setSource(messageSourceValue(consoleMessage->source()))
406 .setLevel(messageLevelValue(consoleMessage->level()))
407 .setText(consoleMessage->message())
408 .setTimestamp(consoleMessage->timestamp());
409 // FIXME: only send out type for ConsoleAPI source messages.
410 jsonObj->setType(messageTypeValue(consoleMessage->type()));
411 jsonObj->setLine(static_cast<int>(consoleMessage->lineNumber()));
412 jsonObj->setColumn(static_cast<int>(consoleMessage->columnNumber()));
413 jsonObj->setUrl(consoleMessage->url());
414 ScriptState* scriptState = consoleMessage->scriptState();
415 if (scriptState)
416 jsonObj->setExecutionContextId(m_injectedScriptManager->injectedScriptId For(scriptState));
417 if (consoleMessage->source() == NetworkMessageSource && consoleMessage->requ estIdentifier())
418 jsonObj->setNetworkRequestId(IdentifiersFactory::requestId(consoleMessag e->requestIdentifier()));
419
420 RefPtr<ScriptArguments> arguments = consoleMessage->scriptArguments();
421 if (arguments && arguments->argumentCount()) {
422 InjectedScript injectedScript = m_injectedScriptManager->injectedScriptF or(arguments->scriptState());
423 if (!injectedScript.isEmpty()) {
424 RefPtr<TypeBuilder::Array<TypeBuilder::Runtime::RemoteObject> > json Args = TypeBuilder::Array<TypeBuilder::Runtime::RemoteObject>::create();
425 if (consoleMessage->type() == TableMessageType && generatePreview && arguments->argumentCount()) {
426 ScriptValue table = arguments->argumentAt(0);
427 ScriptValue columns = arguments->argumentCount() > 1 ? arguments ->argumentAt(1) : ScriptValue();
428 RefPtr<TypeBuilder::Runtime::RemoteObject> inspectorValue = inje ctedScript.wrapTable(table, columns);
429 if (!inspectorValue) {
430 ASSERT_NOT_REACHED();
431 return;
432 }
433 jsonArgs->addItem(inspectorValue);
434 } else {
435 for (unsigned i = 0; i < arguments->argumentCount(); ++i) {
436 RefPtr<TypeBuilder::Runtime::RemoteObject> inspectorValue = injectedScript.wrapObject(arguments->argumentAt(i), "console", generatePreview);
437 if (!inspectorValue) {
438 ASSERT_NOT_REACHED();
439 return;
440 }
441 jsonArgs->addItem(inspectorValue);
442 }
443 }
444 jsonObj->setParameters(jsonArgs);
445 }
446 }
447 if (consoleMessage->callStack()) {
448 jsonObj->setStackTrace(consoleMessage->callStack()->buildInspectorArray( ));
449 RefPtrWillBeRawPtr<ScriptAsyncCallStack> asyncCallStack = consoleMessage ->callStack()->asyncCallStack();
450 if (asyncCallStack)
451 jsonObj->setAsyncStackTrace(asyncCallStack->buildInspectorObject());
452 }
453 m_frontend->messageAdded(jsonObj);
454 m_frontend->flush();
347 } 455 }
348 456
349 class InspectableHeapObject FINAL : public InjectedScriptHost::InspectableObject { 457 class InspectableHeapObject FINAL : public InjectedScriptHost::InspectableObject {
350 public: 458 public:
351 explicit InspectableHeapObject(int heapObjectId) : m_heapObjectId(heapObject Id) { } 459 explicit InspectableHeapObject(int heapObjectId) : m_heapObjectId(heapObject Id) { }
352 virtual ScriptValue get(ScriptState*) OVERRIDE 460 virtual ScriptValue get(ScriptState*) OVERRIDE
353 { 461 {
354 return ScriptProfiler::objectByHeapObjectId(m_heapObjectId); 462 return ScriptProfiler::objectByHeapObjectId(m_heapObjectId);
355 } 463 }
356 private: 464 private:
357 int m_heapObjectId; 465 int m_heapObjectId;
358 }; 466 };
359 467
360 void InspectorConsoleAgent::addInspectedHeapObject(ErrorString*, int inspectedHe apObjectId) 468 void InspectorConsoleAgent::addInspectedHeapObject(ErrorString*, int inspectedHe apObjectId)
361 { 469 {
362 m_injectedScriptManager->injectedScriptHost()->addInspectedObject(adoptPtr(n ew InspectableHeapObject(inspectedHeapObjectId))); 470 m_injectedScriptManager->injectedScriptHost()->addInspectedObject(adoptPtr(n ew InspectableHeapObject(inspectedHeapObjectId)));
363 } 471 }
364 472
365 } // namespace blink 473 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698