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

Unified 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 side-by-side diff with in-line comments
Download patch
Index: Source/core/inspector/InspectorConsoleAgent.cpp
diff --git a/Source/core/inspector/InspectorConsoleAgent.cpp b/Source/core/inspector/InspectorConsoleAgent.cpp
index 33e3328f128a6d3186ca5056e2b96cbc0b6af137..f4e4ebab6b42dd98cefcc53ec1cc2b58d665edce 100644
--- a/Source/core/inspector/InspectorConsoleAgent.cpp
+++ b/Source/core/inspector/InspectorConsoleAgent.cpp
@@ -32,19 +32,23 @@
#include "core/frame/LocalFrame.h"
#include "core/frame/UseCounter.h"
#include "core/inspector/ConsoleMessage.h"
+#include "core/inspector/ConsoleMessageStorage.h"
+#include "core/inspector/IdentifiersFactory.h"
+#include "core/inspector/InjectedScript.h"
#include "core/inspector/InjectedScriptHost.h"
#include "core/inspector/InjectedScriptManager.h"
-#include "core/inspector/InspectorConsoleMessage.h"
#include "core/inspector/InspectorState.h"
#include "core/inspector/InspectorTimelineAgent.h"
#include "core/inspector/InspectorTracingAgent.h"
#include "core/inspector/InstrumentingAgents.h"
#include "core/inspector/ScriptArguments.h"
+#include "core/inspector/ScriptAsyncCallStack.h"
#include "core/inspector/ScriptCallFrame.h"
#include "core/inspector/ScriptCallStack.h"
#include "core/loader/DocumentLoader.h"
#include "core/page/Page.h"
#include "core/workers/WorkerGlobalScopeProxy.h"
+#include "core/xml/XMLHttpRequest.h"
#include "platform/network/ResourceError.h"
#include "platform/network/ResourceResponse.h"
#include "wtf/CurrentTime.h"
@@ -55,9 +59,6 @@
namespace blink {
-static const unsigned maximumConsoleMessages = 1000;
-static const int expireConsoleMessagesStep = 100;
-
namespace ConsoleAgentState {
static const char monitoringXHR[] = "monitoringXHR";
static const char consoleMessagesEnabled[] = "consoleMessagesEnabled";
@@ -72,7 +73,6 @@ InspectorConsoleAgent::InspectorConsoleAgent(InspectorTimelineAgent* timelineAge
, m_tracingAgent(tracingAgent)
, m_injectedScriptManager(injectedScriptManager)
, m_frontend(0)
- , m_expiredConsoleMessageCount(0)
, m_enabled(false)
{
}
@@ -108,15 +108,16 @@ void InspectorConsoleAgent::enable(ErrorString*)
m_state->setBoolean(ConsoleAgentState::consoleMessagesEnabled, true);
- if (m_expiredConsoleMessageCount) {
- InspectorConsoleMessage expiredMessage(OtherMessageSource, LogMessageType, WarningMessageLevel, String::format("%d console messages are not shown.", m_expiredConsoleMessageCount));
- expiredMessage.setTimestamp(0);
- expiredMessage.addToFrontend(m_frontend, m_injectedScriptManager, false);
+ ConsoleMessageStorage* storage = messageStorage();
+ if (storage->expiredCount()) {
+ RefPtr<ConsoleMessage> expiredMessage = ConsoleMessage::create(OtherMessageSource, WarningMessageLevel, String::format("%d console messages are not shown.", storage->expiredCount()));
+ expiredMessage->setTimestamp(0);
+ sendConsoleMessageToFrontend(expiredMessage.get(), false);
}
- size_t messageCount = m_consoleMessages.size();
+ size_t messageCount = storage->size();
for (size_t i = 0; i < messageCount; ++i)
- m_consoleMessages[i]->addToFrontend(m_frontend, m_injectedScriptManager, false);
+ sendConsoleMessageToFrontend(storage->at(i).get(), false);
}
void InspectorConsoleAgent::disable(ErrorString*)
@@ -132,8 +133,7 @@ void InspectorConsoleAgent::disable(ErrorString*)
void InspectorConsoleAgent::clearMessages(ErrorString*)
{
- m_consoleMessages.clear();
- m_expiredConsoleMessageCount = 0;
+ messageStorage()->clear();
m_injectedScriptManager->releaseObjectGroup("console");
if (m_frontend && m_enabled)
m_frontend->messagesCleared();
@@ -175,35 +175,20 @@ void InspectorConsoleAgent::addMessageToConsole(ConsoleMessage* consoleMessage)
clearMessages(&error);
vsevik 2014/08/27 09:13:21 This code belongs to console message storage, we s
kozyatinskiy1 2014/08/27 12:01:27 I will move it in a separate patch.
}
- InspectorConsoleMessage* message;
- if (consoleMessage->source() == ConsoleAPIMessageSource) {
- message = new InspectorConsoleMessage(consoleMessage->source(), consoleMessage->type(), consoleMessage->level(), consoleMessage->message(), consoleMessage->scriptArguments(), consoleMessage->scriptState());
- } else if (consoleMessage->callStack()) {
- message = new InspectorConsoleMessage(consoleMessage->source(), LogMessageType, consoleMessage->level(), consoleMessage->message(), consoleMessage->callStack(), consoleMessage->requestIdentifier());
- } else {
- bool shouldGenerateCallStack = m_frontend;
- message = new InspectorConsoleMessage(shouldGenerateCallStack, consoleMessage->source(), LogMessageType, consoleMessage->level(), consoleMessage->message(), consoleMessage->url(), consoleMessage->lineNumber(), consoleMessage->columnNumber(), consoleMessage->scriptState(), consoleMessage->requestIdentifier());
- }
- message->setWorkerGlobalScopeProxy(consoleMessage->workerId());
- addConsoleMessage(adoptPtr(message));
+ if (m_frontend && m_enabled)
+ sendConsoleMessageToFrontend(consoleMessage, true);
}
void InspectorConsoleAgent::adoptWorkerConsoleMessages(WorkerGlobalScopeProxy* proxy)
vsevik 2014/08/27 09:13:21 This method belongs to console message storage. We
kozyatinskiy1 2014/08/27 12:01:27 Acknowledged.
{
- for (size_t i = 0; i < m_consoleMessages.size(); i++) {
- if (m_consoleMessages[i]->workerGlobalScopeProxy() == proxy)
- m_consoleMessages[i]->setWorkerGlobalScopeProxy(nullptr);
+ ConsoleMessageStorage* storage = messageStorage();
+ size_t messageCount = storage->size();
+ for (size_t i = 0; i < messageCount; ++i) {
+ if (storage->at(i)->workerGlobalScopeProxy() == proxy)
+ storage->at(i)->setWorkerGlobalScopeProxy(nullptr);
}
}
-Vector<unsigned> InspectorConsoleAgent::consoleMessageArgumentCounts()
-{
- Vector<unsigned> result(m_consoleMessages.size());
- for (size_t i = 0; i < m_consoleMessages.size(); i++)
- result[i] = m_consoleMessages[i]->argumentCount();
- return result;
-}
-
void InspectorConsoleAgent::consoleTime(ExecutionContext*, const String& title)
{
// Follow Firebug's behavior of requiring a title that is not null or
@@ -234,7 +219,7 @@ void InspectorConsoleAgent::consoleTimeEnd(ExecutionContext*, const String& titl
RefPtrWillBeRawPtr<ConsoleMessage> consoleMessage = ConsoleMessage::create(ConsoleAPIMessageSource, DebugMessageLevel, message);
consoleMessage->setType(LogMessageType);
consoleMessage->setScriptState(scriptState);
- addMessageToConsole(consoleMessage.get());
+ messageStorage()->reportMessage(consoleMessage.release());
}
void InspectorConsoleAgent::setTracingBasedTimeline(ErrorString*, bool enabled)
@@ -276,14 +261,11 @@ void InspectorConsoleAgent::consoleCount(ScriptState* scriptState, PassRefPtrWil
RefPtrWillBeRawPtr<ConsoleMessage> consoleMessage = ConsoleMessage::create(ConsoleAPIMessageSource, DebugMessageLevel, message);
consoleMessage->setType(LogMessageType);
consoleMessage->setScriptState(scriptState);
- addMessageToConsole(consoleMessage.get());
+ messageStorage()->reportMessage(consoleMessage.release());
}
void InspectorConsoleAgent::frameWindowDiscarded(LocalDOMWindow* window)
{
- size_t messageCount = m_consoleMessages.size();
- for (size_t i = 0; i < messageCount; ++i)
- m_consoleMessages[i]->windowCleared(window);
m_injectedScriptManager->discardInjectedScriptsFor(window);
}
@@ -294,13 +276,13 @@ void InspectorConsoleAgent::didCommitLoad(LocalFrame* frame, DocumentLoader* loa
reset();
}
-void InspectorConsoleAgent::didFinishXHRLoading(XMLHttpRequest*, ThreadableLoaderClient*, unsigned long requestIdentifier, ScriptString, const AtomicString& method, const String& url, const String& sendURL, unsigned sendLineNumber)
+void InspectorConsoleAgent::didFinishXHRLoading(XMLHttpRequest* request, ThreadableLoaderClient*, unsigned long requestIdentifier, ScriptString, const AtomicString& method, const String& url, const String& sendURL, unsigned sendLineNumber)
vsevik 2014/08/27 09:13:21 request is unused, why did you add it?
kozyatinskiy1 2014/08/27 12:01:27 Removed.
{
if (m_frontend && m_state->getBoolean(ConsoleAgentState::monitoringXHR)) {
String message = "XHR finished loading: " + method + " \"" + url + "\".";
RefPtrWillBeRawPtr<ConsoleMessage> consoleMessage = ConsoleMessage::create(NetworkMessageSource, DebugMessageLevel, message, sendURL, sendLineNumber);
consoleMessage->setRequestIdentifier(requestIdentifier);
- addMessageToConsole(consoleMessage.get());
+ messageStorage()->reportMessage(consoleMessage.release());
}
}
@@ -312,7 +294,7 @@ void InspectorConsoleAgent::didReceiveResourceResponse(LocalFrame*, unsigned lon
String message = "Failed to load resource: the server responded with a status of " + String::number(response.httpStatusCode()) + " (" + response.httpStatusText() + ')';
RefPtrWillBeRawPtr<ConsoleMessage> consoleMessage = ConsoleMessage::create(NetworkMessageSource, ErrorMessageLevel, message, response.url().string());
consoleMessage->setRequestIdentifier(requestIdentifier);
- addMessageToConsole(consoleMessage.get());
+ messageStorage()->reportMessage(consoleMessage.release());
}
}
@@ -328,7 +310,7 @@ void InspectorConsoleAgent::didFailLoading(unsigned long requestIdentifier, cons
}
RefPtrWillBeRawPtr<ConsoleMessage> consoleMessage = ConsoleMessage::create(NetworkMessageSource, ErrorMessageLevel, message.toString(), error.failingURL());
consoleMessage->setRequestIdentifier(requestIdentifier);
- addMessageToConsole(consoleMessage.get());
+ messageStorage()->reportMessage(consoleMessage.release());
}
void InspectorConsoleAgent::setMonitoringXHREnabled(ErrorString*, bool enabled)
@@ -336,19 +318,109 @@ void InspectorConsoleAgent::setMonitoringXHREnabled(ErrorString*, bool enabled)
m_state->setBoolean(ConsoleAgentState::monitoringXHR, enabled);
}
-void InspectorConsoleAgent::addConsoleMessage(PassOwnPtr<InspectorConsoleMessage> consoleMessage)
+static TypeBuilder::Console::ConsoleMessage::Source::Enum messageSourceValue(MessageSource source)
{
- ASSERT_ARG(consoleMessage, consoleMessage);
+ switch (source) {
+ case XMLMessageSource: return TypeBuilder::Console::ConsoleMessage::Source::Xml;
+ case JSMessageSource: return TypeBuilder::Console::ConsoleMessage::Source::Javascript;
+ case NetworkMessageSource: return TypeBuilder::Console::ConsoleMessage::Source::Network;
+ case ConsoleAPIMessageSource: return TypeBuilder::Console::ConsoleMessage::Source::Console_api;
+ case StorageMessageSource: return TypeBuilder::Console::ConsoleMessage::Source::Storage;
+ case AppCacheMessageSource: return TypeBuilder::Console::ConsoleMessage::Source::Appcache;
+ case RenderingMessageSource: return TypeBuilder::Console::ConsoleMessage::Source::Rendering;
+ case CSSMessageSource: return TypeBuilder::Console::ConsoleMessage::Source::Css;
+ case SecurityMessageSource: return TypeBuilder::Console::ConsoleMessage::Source::Security;
+ case OtherMessageSource: return TypeBuilder::Console::ConsoleMessage::Source::Other;
+ case DeprecationMessageSource: return TypeBuilder::Console::ConsoleMessage::Source::Deprecation;
+ }
+ return TypeBuilder::Console::ConsoleMessage::Source::Other;
+}
- if (m_frontend && m_enabled)
- consoleMessage->addToFrontend(m_frontend, m_injectedScriptManager, true);
- m_consoleMessages.append(consoleMessage);
+static TypeBuilder::Console::ConsoleMessage::Type::Enum messageTypeValue(MessageType type)
+{
+ switch (type) {
+ case LogMessageType: return TypeBuilder::Console::ConsoleMessage::Type::Log;
+ case ClearMessageType: return TypeBuilder::Console::ConsoleMessage::Type::Clear;
+ case DirMessageType: return TypeBuilder::Console::ConsoleMessage::Type::Dir;
+ case DirXMLMessageType: return TypeBuilder::Console::ConsoleMessage::Type::Dirxml;
+ case TableMessageType: return TypeBuilder::Console::ConsoleMessage::Type::Table;
+ case TraceMessageType: return TypeBuilder::Console::ConsoleMessage::Type::Trace;
+ case StartGroupMessageType: return TypeBuilder::Console::ConsoleMessage::Type::StartGroup;
+ case StartGroupCollapsedMessageType: return TypeBuilder::Console::ConsoleMessage::Type::StartGroupCollapsed;
+ case EndGroupMessageType: return TypeBuilder::Console::ConsoleMessage::Type::EndGroup;
+ case AssertMessageType: return TypeBuilder::Console::ConsoleMessage::Type::Assert;
+ }
+ return TypeBuilder::Console::ConsoleMessage::Type::Log;
+}
+
+static TypeBuilder::Console::ConsoleMessage::Level::Enum messageLevelValue(MessageLevel level)
+{
+ switch (level) {
+ case DebugMessageLevel: return TypeBuilder::Console::ConsoleMessage::Level::Debug;
+ case LogMessageLevel: return TypeBuilder::Console::ConsoleMessage::Level::Log;
+ case WarningMessageLevel: return TypeBuilder::Console::ConsoleMessage::Level::Warning;
+ case ErrorMessageLevel: return TypeBuilder::Console::ConsoleMessage::Level::Error;
+ case InfoMessageLevel: return TypeBuilder::Console::ConsoleMessage::Level::Info;
+ }
+ return TypeBuilder::Console::ConsoleMessage::Level::Log;
+}
- if (!m_frontend && m_consoleMessages.size() >= maximumConsoleMessages) {
- m_expiredConsoleMessageCount += expireConsoleMessagesStep;
- m_consoleMessages.remove(0, expireConsoleMessagesStep);
+void InspectorConsoleAgent::sendConsoleMessageToFrontend(ConsoleMessage* consoleMessage, bool generatePreview)
+{
+ if (consoleMessage->workerGlobalScopeProxy())
+ return;
+
+ RefPtr<TypeBuilder::Console::ConsoleMessage> jsonObj = TypeBuilder::Console::ConsoleMessage::create()
+ .setSource(messageSourceValue(consoleMessage->source()))
+ .setLevel(messageLevelValue(consoleMessage->level()))
+ .setText(consoleMessage->message())
+ .setTimestamp(consoleMessage->timestamp());
+ // FIXME: only send out type for ConsoleAPI source messages.
+ jsonObj->setType(messageTypeValue(consoleMessage->type()));
+ jsonObj->setLine(static_cast<int>(consoleMessage->lineNumber()));
+ jsonObj->setColumn(static_cast<int>(consoleMessage->columnNumber()));
+ jsonObj->setUrl(consoleMessage->url());
+ ScriptState* scriptState = consoleMessage->scriptState();
+ if (scriptState)
+ jsonObj->setExecutionContextId(m_injectedScriptManager->injectedScriptIdFor(scriptState));
+ if (consoleMessage->source() == NetworkMessageSource && consoleMessage->requestIdentifier())
+ jsonObj->setNetworkRequestId(IdentifiersFactory::requestId(consoleMessage->requestIdentifier()));
+ RefPtr<ScriptArguments> arguments = consoleMessage->scriptArguments();
+ if (arguments && arguments->argumentCount()) {
+ InjectedScript injectedScript = m_injectedScriptManager->injectedScriptFor(arguments->scriptState());
+ if (!injectedScript.isEmpty()) {
+ RefPtr<TypeBuilder::Array<TypeBuilder::Runtime::RemoteObject> > jsonArgs = TypeBuilder::Array<TypeBuilder::Runtime::RemoteObject>::create();
+ if (consoleMessage->type() == TableMessageType && generatePreview && arguments->argumentCount()) {
+ ScriptValue table = arguments->argumentAt(0);
+ ScriptValue columns = arguments->argumentCount() > 1 ? arguments->argumentAt(1) : ScriptValue();
+ RefPtr<TypeBuilder::Runtime::RemoteObject> inspectorValue = injectedScript.wrapTable(table, columns);
+ if (!inspectorValue) {
+ ASSERT_NOT_REACHED();
+ return;
+ }
+ jsonArgs->addItem(inspectorValue);
+ } else {
+ for (unsigned i = 0; i < arguments->argumentCount(); ++i) {
+ RefPtr<TypeBuilder::Runtime::RemoteObject> inspectorValue = injectedScript.wrapObject(arguments->argumentAt(i), "console", generatePreview);
+ if (!inspectorValue) {
+ ASSERT_NOT_REACHED();
+ return;
+ }
+ jsonArgs->addItem(inspectorValue);
+ }
+ }
+ jsonObj->setParameters(jsonArgs);
+ }
+ }
+ if (consoleMessage->callStack()) {
+ jsonObj->setStackTrace(consoleMessage->callStack()->buildInspectorArray());
+ RefPtrWillBeRawPtr<ScriptAsyncCallStack> asyncCallStack = consoleMessage->callStack()->asyncCallStack();
+ if (asyncCallStack)
+ jsonObj->setAsyncStackTrace(asyncCallStack->buildInspectorObject());
}
+ m_frontend->messageAdded(jsonObj);
+ m_frontend->flush();
}
class InspectableHeapObject FINAL : public InjectedScriptHost::InspectableObject {

Powered by Google App Engine
This is Rietveld 408576698