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

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: 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 14 matching lines...) Expand all
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/LocalFrame.h" 32 #include "core/frame/LocalFrame.h"
33 #include "core/frame/UseCounter.h" 33 #include "core/frame/UseCounter.h"
34 #include "core/inspector/ConsoleMessage.h" 34 #include "core/inspector/ConsoleMessage.h"
35 #include "core/inspector/ConsoleMessageStorage.h"
36 #include "core/inspector/IdentifiersFactory.h"
37 #include "core/inspector/InjectedScript.h"
35 #include "core/inspector/InjectedScriptHost.h" 38 #include "core/inspector/InjectedScriptHost.h"
36 #include "core/inspector/InjectedScriptManager.h" 39 #include "core/inspector/InjectedScriptManager.h"
37 #include "core/inspector/InspectorConsoleMessage.h"
38 #include "core/inspector/InspectorState.h" 40 #include "core/inspector/InspectorState.h"
39 #include "core/inspector/InspectorTimelineAgent.h" 41 #include "core/inspector/InspectorTimelineAgent.h"
40 #include "core/inspector/InspectorTracingAgent.h" 42 #include "core/inspector/InspectorTracingAgent.h"
41 #include "core/inspector/InstrumentingAgents.h" 43 #include "core/inspector/InstrumentingAgents.h"
42 #include "core/inspector/ScriptArguments.h" 44 #include "core/inspector/ScriptArguments.h"
45 #include "core/inspector/ScriptAsyncCallStack.h"
43 #include "core/inspector/ScriptCallFrame.h" 46 #include "core/inspector/ScriptCallFrame.h"
44 #include "core/inspector/ScriptCallStack.h" 47 #include "core/inspector/ScriptCallStack.h"
45 #include "core/loader/DocumentLoader.h" 48 #include "core/loader/DocumentLoader.h"
46 #include "core/page/Page.h" 49 #include "core/page/Page.h"
47 #include "core/workers/WorkerGlobalScopeProxy.h" 50 #include "core/workers/WorkerGlobalScopeProxy.h"
51 #include "core/xml/XMLHttpRequest.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
60 #include <base/debug/stack_trace.h>
vsevik 2014/08/25 13:04:02 Please remove
kozyatinskiy1 2014/08/25 14:12:39 Done.
61
56 namespace blink { 62 namespace blink {
57 63
58 static const unsigned maximumConsoleMessages = 1000;
59 static const int expireConsoleMessagesStep = 100;
60
61 namespace ConsoleAgentState { 64 namespace ConsoleAgentState {
62 static const char monitoringXHR[] = "monitoringXHR"; 65 static const char monitoringXHR[] = "monitoringXHR";
63 static const char consoleMessagesEnabled[] = "consoleMessagesEnabled"; 66 static const char consoleMessagesEnabled[] = "consoleMessagesEnabled";
64 static const char tracingBasedTimeline[] = "tracingBasedTimeline"; 67 static const char tracingBasedTimeline[] = "tracingBasedTimeline";
65 } 68 }
66 69
67 int InspectorConsoleAgent::s_enabledAgentCount = 0; 70 int InspectorConsoleAgent::s_enabledAgentCount = 0;
68 71
69 InspectorConsoleAgent::InspectorConsoleAgent(InspectorTimelineAgent* timelineAge nt, InspectorTracingAgent* tracingAgent, InjectedScriptManager* injectedScriptMa nager) 72 InspectorConsoleAgent::InspectorConsoleAgent(InspectorTimelineAgent* timelineAge nt, InspectorTracingAgent* tracingAgent, InjectedScriptManager* injectedScriptMa nager)
70 : InspectorBaseAgent<InspectorConsoleAgent>("Console") 73 : InspectorBaseAgent<InspectorConsoleAgent>("Console")
71 , m_timelineAgent(timelineAgent) 74 , m_timelineAgent(timelineAgent)
72 , m_tracingAgent(tracingAgent) 75 , m_tracingAgent(tracingAgent)
73 , m_injectedScriptManager(injectedScriptManager) 76 , m_injectedScriptManager(injectedScriptManager)
74 , m_frontend(0) 77 , m_frontend(0)
75 , m_expiredConsoleMessageCount(0)
76 , m_enabled(false) 78 , m_enabled(false)
77 { 79 {
78 } 80 }
79 81
80 InspectorConsoleAgent::~InspectorConsoleAgent() 82 InspectorConsoleAgent::~InspectorConsoleAgent()
81 { 83 {
82 #if !ENABLE(OILPAN) 84 #if !ENABLE(OILPAN)
83 m_instrumentingAgents->setInspectorConsoleAgent(0); 85 m_instrumentingAgents->setInspectorConsoleAgent(0);
84 #endif 86 #endif
85 } 87 }
(...skipping 15 matching lines...) Expand all
101 { 103 {
102 if (m_enabled) 104 if (m_enabled)
103 return; 105 return;
104 m_enabled = true; 106 m_enabled = true;
105 if (!s_enabledAgentCount) 107 if (!s_enabledAgentCount)
106 ScriptController::setCaptureCallStackForUncaughtExceptions(true); 108 ScriptController::setCaptureCallStackForUncaughtExceptions(true);
107 ++s_enabledAgentCount; 109 ++s_enabledAgentCount;
108 110
109 m_state->setBoolean(ConsoleAgentState::consoleMessagesEnabled, true); 111 m_state->setBoolean(ConsoleAgentState::consoleMessagesEnabled, true);
110 112
111 if (m_expiredConsoleMessageCount) { 113 ConsoleMessageStorage* storage = messageStorage();
112 InspectorConsoleMessage expiredMessage(OtherMessageSource, LogMessageTyp e, WarningMessageLevel, String::format("%d console messages are not shown.", m_e xpiredConsoleMessageCount)); 114 if (storage->expiredCount()) {
113 expiredMessage.setTimestamp(0); 115 RefPtr<ConsoleMessage> expiredMessage = ConsoleMessage::create(OtherMess ageSource, WarningMessageLevel, String::format("%d console messages are not show n.", storage->expiredCount()));
114 expiredMessage.addToFrontend(m_frontend, m_injectedScriptManager, false) ; 116 expiredMessage->setTimestamp(0);
117 sendConsoleMessageToFrontend(expiredMessage, false);
115 } 118 }
116 119
117 size_t messageCount = m_consoleMessages.size(); 120 size_t messageCount = storage->size();
118 for (size_t i = 0; i < messageCount; ++i) 121 for (size_t i = 0; i < messageCount; ++i)
119 m_consoleMessages[i]->addToFrontend(m_frontend, m_injectedScriptManager, false); 122 sendConsoleMessageToFrontend(storage->at(i), false);
120 } 123 }
121 124
122 void InspectorConsoleAgent::disable(ErrorString*) 125 void InspectorConsoleAgent::disable(ErrorString*)
123 { 126 {
124 if (!m_enabled) 127 if (!m_enabled)
125 return; 128 return;
126 m_enabled = false; 129 m_enabled = false;
127 if (!(--s_enabledAgentCount)) 130 if (!(--s_enabledAgentCount))
128 ScriptController::setCaptureCallStackForUncaughtExceptions(false); 131 ScriptController::setCaptureCallStackForUncaughtExceptions(false);
129 m_state->setBoolean(ConsoleAgentState::consoleMessagesEnabled, false); 132 m_state->setBoolean(ConsoleAgentState::consoleMessagesEnabled, false);
130 m_state->setBoolean(ConsoleAgentState::tracingBasedTimeline, false); 133 m_state->setBoolean(ConsoleAgentState::tracingBasedTimeline, false);
131 } 134 }
132 135
133 void InspectorConsoleAgent::clearMessages(ErrorString*) 136 void InspectorConsoleAgent::clearMessages(ErrorString*)
134 { 137 {
135 m_consoleMessages.clear(); 138 messageStorage()->clear();
136 m_expiredConsoleMessageCount = 0;
137 m_injectedScriptManager->releaseObjectGroup("console"); 139 m_injectedScriptManager->releaseObjectGroup("console");
138 if (m_frontend && m_enabled) 140 if (m_frontend && m_enabled)
139 m_frontend->messagesCleared(); 141 m_frontend->messagesCleared();
140 } 142 }
141 143
142 void InspectorConsoleAgent::reset() 144 void InspectorConsoleAgent::reset()
143 { 145 {
144 ErrorString error; 146 ErrorString error;
145 clearMessages(&error); 147 clearMessages(&error);
146 m_times.clear(); 148 m_times.clear();
(...skipping 14 matching lines...) Expand all
161 m_frontend = frontend->console(); 163 m_frontend = frontend->console();
162 } 164 }
163 165
164 void InspectorConsoleAgent::clearFrontend() 166 void InspectorConsoleAgent::clearFrontend()
165 { 167 {
166 m_frontend = 0; 168 m_frontend = 0;
167 String errorString; 169 String errorString;
168 disable(&errorString); 170 disable(&errorString);
169 } 171 }
170 172
171 void InspectorConsoleAgent::addMessageToConsole(ConsoleMessage* consoleMessage) 173 void InspectorConsoleAgent::addMessageToConsole(PassRefPtr<ConsoleMessage> prpCo nsoleMessage)
172 { 174 {
175 RefPtr<ConsoleMessage> consoleMessage = prpConsoleMessage;
176
173 if (consoleMessage->type() == ClearMessageType) { 177 if (consoleMessage->type() == ClearMessageType) {
174 ErrorString error; 178 ErrorString error;
175 clearMessages(&error); 179 clearMessages(&error);
176 } 180 }
177 181
178 InspectorConsoleMessage* message; 182 if (m_frontend && m_enabled) {
179 if (consoleMessage->source() == ConsoleAPIMessageSource) { 183 sendConsoleMessageToFrontend(consoleMessage, true);
180 message = new InspectorConsoleMessage(consoleMessage->source(), consoleM essage->type(), consoleMessage->level(), consoleMessage->message(), consoleMessa ge->scriptArguments(), consoleMessage->scriptState());
181 } else if (consoleMessage->callStack()) {
182 message = new InspectorConsoleMessage(consoleMessage->source(), LogMessa geType, consoleMessage->level(), consoleMessage->message(), consoleMessage->call Stack(), consoleMessage->requestIdentifier());
183 } else {
184 bool shouldGenerateCallStack = m_frontend;
185 message = new InspectorConsoleMessage(shouldGenerateCallStack, consoleMe ssage->source(), LogMessageType, consoleMessage->level(), consoleMessage->messag e(), consoleMessage->url(), consoleMessage->lineNumber(), consoleMessage->column Number(), consoleMessage->scriptState(), consoleMessage->requestIdentifier());
186 } 184 }
187 message->setWorkerGlobalScopeProxy(consoleMessage->workerId());
188 addConsoleMessage(adoptPtr(message));
189 } 185 }
190 186
191 void InspectorConsoleAgent::adoptWorkerConsoleMessages(WorkerGlobalScopeProxy* p roxy) 187 void InspectorConsoleAgent::adoptWorkerConsoleMessages(WorkerGlobalScopeProxy* p roxy)
192 { 188 {
193 for (size_t i = 0; i < m_consoleMessages.size(); i++) { 189 ConsoleMessageStorage* storage = messageStorage();
194 if (m_consoleMessages[i]->workerGlobalScopeProxy() == proxy) 190 size_t messageCount = storage->size();
195 m_consoleMessages[i]->setWorkerGlobalScopeProxy(nullptr); 191 for (size_t i = 0; i < messageCount; ++i) {
192 if (storage->at(i)->workerId() == proxy)
193 storage->at(i)->setWorkerId(nullptr);
196 } 194 }
197 } 195 }
198 196
199 Vector<unsigned> InspectorConsoleAgent::consoleMessageArgumentCounts()
200 {
201 Vector<unsigned> result(m_consoleMessages.size());
202 for (size_t i = 0; i < m_consoleMessages.size(); i++)
203 result[i] = m_consoleMessages[i]->argumentCount();
204 return result;
205 }
206
207 void InspectorConsoleAgent::consoleTime(ExecutionContext*, const String& title) 197 void InspectorConsoleAgent::consoleTime(ExecutionContext*, const String& title)
208 { 198 {
209 // Follow Firebug's behavior of requiring a title that is not null or 199 // Follow Firebug's behavior of requiring a title that is not null or
210 // undefined for timing functions 200 // undefined for timing functions
211 if (title.isNull()) 201 if (title.isNull())
212 return; 202 return;
213 203
214 m_times.add(title, monotonicallyIncreasingTime()); 204 m_times.add(title, monotonicallyIncreasingTime());
215 } 205 }
216 206
(...skipping 10 matching lines...) Expand all
227 217
228 double startTime = it->value; 218 double startTime = it->value;
229 m_times.remove(it); 219 m_times.remove(it);
230 220
231 double elapsed = monotonicallyIncreasingTime() - startTime; 221 double elapsed = monotonicallyIncreasingTime() - startTime;
232 String message = title + String::format(": %.3fms", elapsed * 1000); 222 String message = title + String::format(": %.3fms", elapsed * 1000);
233 223
234 RefPtrWillBeRawPtr<ConsoleMessage> consoleMessage = ConsoleMessage::create(C onsoleAPIMessageSource, DebugMessageLevel, message); 224 RefPtrWillBeRawPtr<ConsoleMessage> consoleMessage = ConsoleMessage::create(C onsoleAPIMessageSource, DebugMessageLevel, message);
235 consoleMessage->setType(LogMessageType); 225 consoleMessage->setType(LogMessageType);
236 consoleMessage->setScriptState(scriptState); 226 consoleMessage->setScriptState(scriptState);
237 addMessageToConsole(consoleMessage.get()); 227 messageStorage()->reportMessage(consoleMessage);
vsevik 2014/08/25 13:04:02 .release()
kozyatinskiy1 2014/08/25 14:12:39 Done.
238 } 228 }
239 229
240 void InspectorConsoleAgent::setTracingBasedTimeline(ErrorString*, bool enabled) 230 void InspectorConsoleAgent::setTracingBasedTimeline(ErrorString*, bool enabled)
241 { 231 {
242 m_state->setBoolean(ConsoleAgentState::tracingBasedTimeline, enabled); 232 m_state->setBoolean(ConsoleAgentState::tracingBasedTimeline, enabled);
243 } 233 }
244 234
245 void InspectorConsoleAgent::consoleTimeline(ExecutionContext* context, const Str ing& title, ScriptState* scriptState) 235 void InspectorConsoleAgent::consoleTimeline(ExecutionContext* context, const Str ing& title, ScriptState* scriptState)
246 { 236 {
247 UseCounter::count(context, UseCounter::DevToolsConsoleTimeline); 237 UseCounter::count(context, UseCounter::DevToolsConsoleTimeline);
(...skipping 21 matching lines...) Expand all
269 arguments->getFirstArgumentAsString(title); 259 arguments->getFirstArgumentAsString(title);
270 String identifier = title.isEmpty() ? String(lastCaller.sourceURL() + ':' + String::number(lastCaller.lineNumber())) 260 String identifier = title.isEmpty() ? String(lastCaller.sourceURL() + ':' + String::number(lastCaller.lineNumber()))
271 : String(title + '@'); 261 : String(title + '@');
272 262
273 HashCountedSet<String>::AddResult result = m_counts.add(identifier); 263 HashCountedSet<String>::AddResult result = m_counts.add(identifier);
274 String message = title + ": " + String::number(result.storedValue->value); 264 String message = title + ": " + String::number(result.storedValue->value);
275 265
276 RefPtrWillBeRawPtr<ConsoleMessage> consoleMessage = ConsoleMessage::create(C onsoleAPIMessageSource, DebugMessageLevel, message); 266 RefPtrWillBeRawPtr<ConsoleMessage> consoleMessage = ConsoleMessage::create(C onsoleAPIMessageSource, DebugMessageLevel, message);
277 consoleMessage->setType(LogMessageType); 267 consoleMessage->setType(LogMessageType);
278 consoleMessage->setScriptState(scriptState); 268 consoleMessage->setScriptState(scriptState);
279 addMessageToConsole(consoleMessage.get()); 269 messageStorage()->reportMessage(consoleMessage.release());
280 } 270 }
281 271
282 void InspectorConsoleAgent::frameWindowDiscarded(LocalDOMWindow* window) 272 void InspectorConsoleAgent::frameWindowDiscarded(LocalDOMWindow* window)
283 { 273 {
284 size_t messageCount = m_consoleMessages.size();
285 for (size_t i = 0; i < messageCount; ++i)
286 m_consoleMessages[i]->windowCleared(window);
287 m_injectedScriptManager->discardInjectedScriptsFor(window); 274 m_injectedScriptManager->discardInjectedScriptsFor(window);
288 } 275 }
289 276
290 void InspectorConsoleAgent::didCommitLoad(LocalFrame* frame, DocumentLoader* loa der) 277 void InspectorConsoleAgent::didCommitLoad(LocalFrame* frame, DocumentLoader* loa der)
291 { 278 {
292 if (loader->frame() != frame->page()->mainFrame()) 279 if (loader->frame() != frame->page()->mainFrame())
293 return; 280 return;
294 reset(); 281 reset();
295 } 282 }
296 283
297 void InspectorConsoleAgent::didFinishXHRLoading(XMLHttpRequest*, ThreadableLoade rClient*, unsigned long requestIdentifier, ScriptString, const AtomicString& met hod, const String& url, const String& sendURL, unsigned sendLineNumber) 284 void InspectorConsoleAgent::didFinishXHRLoading(XMLHttpRequest* request, Threada bleLoaderClient*, unsigned long requestIdentifier, ScriptString, const AtomicStr ing& method, const String& url, const String& sendURL, unsigned sendLineNumber)
298 { 285 {
299 if (m_frontend && m_state->getBoolean(ConsoleAgentState::monitoringXHR)) { 286 if (m_frontend && m_state->getBoolean(ConsoleAgentState::monitoringXHR)) {
300 String message = "XHR finished loading: " + method + " \"" + url + "\"." ; 287 String message = "XHR finished loading: " + method + " \"" + url + "\"." ;
301 RefPtrWillBeRawPtr<ConsoleMessage> consoleMessage = ConsoleMessage::crea te(NetworkMessageSource, DebugMessageLevel, message, sendURL, sendLineNumber); 288 RefPtrWillBeRawPtr<ConsoleMessage> consoleMessage = ConsoleMessage::crea te(NetworkMessageSource, DebugMessageLevel, message, sendURL, sendLineNumber);
302 consoleMessage->setRequestIdentifier(requestIdentifier); 289 consoleMessage->setRequestIdentifier(requestIdentifier);
303 addMessageToConsole(consoleMessage.get()); 290 messageStorage()->reportMessage(consoleMessage.release());
304 } 291 }
305 } 292 }
306 293
307 void InspectorConsoleAgent::didReceiveResourceResponse(LocalFrame*, unsigned lon g requestIdentifier, DocumentLoader* loader, const ResourceResponse& response, R esourceLoader* resourceLoader) 294 void InspectorConsoleAgent::didReceiveResourceResponse(LocalFrame*, unsigned lon g requestIdentifier, DocumentLoader* loader, const ResourceResponse& response, R esourceLoader* resourceLoader)
308 { 295 {
309 if (!loader) 296 if (!loader)
310 return; 297 return;
311 if (response.httpStatusCode() >= 400) { 298 if (response.httpStatusCode() >= 400) {
312 String message = "Failed to load resource: the server responded with a s tatus of " + String::number(response.httpStatusCode()) + " (" + response.httpSta tusText() + ')'; 299 String message = "Failed to load resource: the server responded with a s tatus of " + String::number(response.httpStatusCode()) + " (" + response.httpSta tusText() + ')';
313 RefPtrWillBeRawPtr<ConsoleMessage> consoleMessage = ConsoleMessage::crea te(NetworkMessageSource, ErrorMessageLevel, message, response.url().string()); 300 RefPtrWillBeRawPtr<ConsoleMessage> consoleMessage = ConsoleMessage::crea te(NetworkMessageSource, ErrorMessageLevel, message, response.url().string());
314 consoleMessage->setRequestIdentifier(requestIdentifier); 301 consoleMessage->setRequestIdentifier(requestIdentifier);
315 addMessageToConsole(consoleMessage.get()); 302 messageStorage()->reportMessage(consoleMessage.release());
316 } 303 }
317 } 304 }
318 305
319 void InspectorConsoleAgent::didFailLoading(unsigned long requestIdentifier, cons t ResourceError& error) 306 void InspectorConsoleAgent::didFailLoading(unsigned long requestIdentifier, cons t ResourceError& error)
320 { 307 {
321 if (error.isCancellation()) // Report failures only. 308 if (error.isCancellation()) // Report failures only.
322 return; 309 return;
323 StringBuilder message; 310 StringBuilder message;
324 message.appendLiteral("Failed to load resource"); 311 message.appendLiteral("Failed to load resource");
325 if (!error.localizedDescription().isEmpty()) { 312 if (!error.localizedDescription().isEmpty()) {
326 message.appendLiteral(": "); 313 message.appendLiteral(": ");
327 message.append(error.localizedDescription()); 314 message.append(error.localizedDescription());
328 } 315 }
329 RefPtrWillBeRawPtr<ConsoleMessage> consoleMessage = ConsoleMessage::create(N etworkMessageSource, ErrorMessageLevel, message.toString(), error.failingURL()); 316 RefPtrWillBeRawPtr<ConsoleMessage> consoleMessage = ConsoleMessage::create(N etworkMessageSource, ErrorMessageLevel, message.toString(), error.failingURL());
330 consoleMessage->setRequestIdentifier(requestIdentifier); 317 consoleMessage->setRequestIdentifier(requestIdentifier);
331 addMessageToConsole(consoleMessage.get()); 318 messageStorage()->reportMessage(consoleMessage.release());
332 } 319 }
333 320
334 void InspectorConsoleAgent::setMonitoringXHREnabled(ErrorString*, bool enabled) 321 void InspectorConsoleAgent::setMonitoringXHREnabled(ErrorString*, bool enabled)
335 { 322 {
336 m_state->setBoolean(ConsoleAgentState::monitoringXHR, enabled); 323 m_state->setBoolean(ConsoleAgentState::monitoringXHR, enabled);
337 } 324 }
338 325
339 void InspectorConsoleAgent::addConsoleMessage(PassOwnPtr<InspectorConsoleMessage > consoleMessage) 326 static TypeBuilder::Console::ConsoleMessage::Source::Enum messageSourceValue(Mes sageSource source)
340 { 327 {
341 ASSERT_ARG(consoleMessage, consoleMessage); 328 switch (source) {
329 case XMLMessageSource: return TypeBuilder::Console::ConsoleMessage::Source:: Xml;
330 case JSMessageSource: return TypeBuilder::Console::ConsoleMessage::Source::J avascript;
331 case NetworkMessageSource: return TypeBuilder::Console::ConsoleMessage::Sour ce::Network;
332 case ConsoleAPIMessageSource: return TypeBuilder::Console::ConsoleMessage::S ource::Console_api;
333 case StorageMessageSource: return TypeBuilder::Console::ConsoleMessage::Sour ce::Storage;
334 case AppCacheMessageSource: return TypeBuilder::Console::ConsoleMessage::Sou rce::Appcache;
335 case RenderingMessageSource: return TypeBuilder::Console::ConsoleMessage::So urce::Rendering;
336 case CSSMessageSource: return TypeBuilder::Console::ConsoleMessage::Source:: Css;
337 case SecurityMessageSource: return TypeBuilder::Console::ConsoleMessage::Sou rce::Security;
338 case OtherMessageSource: return TypeBuilder::Console::ConsoleMessage::Source ::Other;
339 case DeprecationMessageSource: return TypeBuilder::Console::ConsoleMessage:: Source::Deprecation;
340 }
341 return TypeBuilder::Console::ConsoleMessage::Source::Other;
342 }
342 343
343 if (m_frontend && m_enabled)
344 consoleMessage->addToFrontend(m_frontend, m_injectedScriptManager, true) ;
345 344
346 m_consoleMessages.append(consoleMessage); 345 static TypeBuilder::Console::ConsoleMessage::Type::Enum messageTypeValue(Message Type type)
346 {
347 switch (type) {
348 case LogMessageType: return TypeBuilder::Console::ConsoleMessage::Type::Log;
349 case ClearMessageType: return TypeBuilder::Console::ConsoleMessage::Type::Cl ear;
350 case DirMessageType: return TypeBuilder::Console::ConsoleMessage::Type::Dir;
351 case DirXMLMessageType: return TypeBuilder::Console::ConsoleMessage::Type::D irxml;
352 case TableMessageType: return TypeBuilder::Console::ConsoleMessage::Type::Ta ble;
353 case TraceMessageType: return TypeBuilder::Console::ConsoleMessage::Type::Tr ace;
354 case StartGroupMessageType: return TypeBuilder::Console::ConsoleMessage::Typ e::StartGroup;
355 case StartGroupCollapsedMessageType: return TypeBuilder::Console::ConsoleMes sage::Type::StartGroupCollapsed;
356 case EndGroupMessageType: return TypeBuilder::Console::ConsoleMessage::Type: :EndGroup;
357 case AssertMessageType: return TypeBuilder::Console::ConsoleMessage::Type::A ssert;
358 }
359 return TypeBuilder::Console::ConsoleMessage::Type::Log;
360 }
347 361
348 if (!m_frontend && m_consoleMessages.size() >= maximumConsoleMessages) { 362 static TypeBuilder::Console::ConsoleMessage::Level::Enum messageLevelValue(Messa geLevel level)
349 m_expiredConsoleMessageCount += expireConsoleMessagesStep; 363 {
350 m_consoleMessages.remove(0, expireConsoleMessagesStep); 364 switch (level) {
365 case DebugMessageLevel: return TypeBuilder::Console::ConsoleMessage::Level:: Debug;
366 case LogMessageLevel: return TypeBuilder::Console::ConsoleMessage::Level::Lo g;
367 case WarningMessageLevel: return TypeBuilder::Console::ConsoleMessage::Level ::Warning;
368 case ErrorMessageLevel: return TypeBuilder::Console::ConsoleMessage::Level:: Error;
369 case InfoMessageLevel: return TypeBuilder::Console::ConsoleMessage::Level::I nfo;
351 } 370 }
371 return TypeBuilder::Console::ConsoleMessage::Level::Log;
372 }
373
374 void InspectorConsoleAgent::sendConsoleMessageToFrontend(PassRefPtr<ConsoleMessa ge> consoleMessage, bool generatePreview)
375 {
376 if (consoleMessage->workerId())
377 return;
378
379 RefPtr<TypeBuilder::Console::ConsoleMessage> jsonObj = TypeBuilder::Console: :ConsoleMessage::create()
380 .setSource(messageSourceValue(consoleMessage->source()))
381 .setLevel(messageLevelValue(consoleMessage->level()))
382 .setText(consoleMessage->message())
383 .setTimestamp(consoleMessage->timestamp());
384 // FIXME: only send out type for ConsoleAPI source messages.
385 jsonObj->setType(messageTypeValue(consoleMessage->type()));
386 jsonObj->setLine(static_cast<int>(consoleMessage->lineNumber()));
387 jsonObj->setColumn(static_cast<int>(consoleMessage->columnNumber()));
388 jsonObj->setUrl(consoleMessage->url());
389 ScriptState* scriptState = consoleMessage->scriptState();
390 if (scriptState)
391 jsonObj->setExecutionContextId(m_injectedScriptManager->injectedScriptId For(scriptState));
392 if (consoleMessage->source() == NetworkMessageSource && consoleMessage->requ estIdentifier())
393 jsonObj->setNetworkRequestId(IdentifiersFactory::requestId(consoleMessag e->requestIdentifier()));
394 RefPtr<ScriptArguments> arguments = consoleMessage->scriptArguments();
395 if (arguments && arguments->argumentCount()) {
396 InjectedScript injectedScript = m_injectedScriptManager->injectedScriptF or(arguments->scriptState());
397 if (!injectedScript.isEmpty()) {
398 RefPtr<TypeBuilder::Array<TypeBuilder::Runtime::RemoteObject> > json Args = TypeBuilder::Array<TypeBuilder::Runtime::RemoteObject>::create();
399 if (consoleMessage->type() == TableMessageType && generatePreview && arguments->argumentCount()) {
400 ScriptValue table = arguments->argumentAt(0);
401 ScriptValue columns = arguments->argumentCount() > 1 ? arguments ->argumentAt(1) : ScriptValue();
402 RefPtr<TypeBuilder::Runtime::RemoteObject> inspectorValue = inje ctedScript.wrapTable(table, columns);
403 if (!inspectorValue) {
404 ASSERT_NOT_REACHED();
405 return;
406 }
407 jsonArgs->addItem(inspectorValue);
408 } else {
409 for (unsigned i = 0; i < arguments->argumentCount(); ++i) {
410 RefPtr<TypeBuilder::Runtime::RemoteObject> inspectorValue = injectedScript.wrapObject(arguments->argumentAt(i), "console", generatePreview);
411 if (!inspectorValue) {
412 ASSERT_NOT_REACHED();
413 return;
414 }
415 jsonArgs->addItem(inspectorValue);
416 }
417 }
418 jsonObj->setParameters(jsonArgs);
419 }
420 }
421 if (consoleMessage->callStack()) {
422 jsonObj->setStackTrace(consoleMessage->callStack()->buildInspectorArray( ));
423 RefPtrWillBeRawPtr<ScriptAsyncCallStack> asyncCallStack = consoleMessage ->callStack()->asyncCallStack();
424 if (asyncCallStack)
425 jsonObj->setAsyncStackTrace(asyncCallStack->buildInspectorObject());
426 }
427 m_frontend->messageAdded(jsonObj);
428 m_frontend->flush();
352 } 429 }
353 430
354 class InspectableHeapObject FINAL : public InjectedScriptHost::InspectableObject { 431 class InspectableHeapObject FINAL : public InjectedScriptHost::InspectableObject {
355 public: 432 public:
356 explicit InspectableHeapObject(int heapObjectId) : m_heapObjectId(heapObject Id) { } 433 explicit InspectableHeapObject(int heapObjectId) : m_heapObjectId(heapObject Id) { }
357 virtual ScriptValue get(ScriptState*) OVERRIDE 434 virtual ScriptValue get(ScriptState*) OVERRIDE
358 { 435 {
359 return ScriptProfiler::objectByHeapObjectId(m_heapObjectId); 436 return ScriptProfiler::objectByHeapObjectId(m_heapObjectId);
360 } 437 }
361 private: 438 private:
362 int m_heapObjectId; 439 int m_heapObjectId;
363 }; 440 };
364 441
365 void InspectorConsoleAgent::addInspectedHeapObject(ErrorString*, int inspectedHe apObjectId) 442 void InspectorConsoleAgent::addInspectedHeapObject(ErrorString*, int inspectedHe apObjectId)
366 { 443 {
367 m_injectedScriptManager->injectedScriptHost()->addInspectedObject(adoptPtr(n ew InspectableHeapObject(inspectedHeapObjectId))); 444 m_injectedScriptManager->injectedScriptHost()->addInspectedObject(adoptPtr(n ew InspectableHeapObject(inspectedHeapObjectId)));
368 } 445 }
369 446
370 } // namespace blink 447 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698