diff options
Diffstat (limited to 'WebCore/inspector/ConsoleMessage.cpp')
-rw-r--r-- | WebCore/inspector/ConsoleMessage.cpp | 102 |
1 files changed, 23 insertions, 79 deletions
diff --git a/WebCore/inspector/ConsoleMessage.cpp b/WebCore/inspector/ConsoleMessage.cpp index 67930cd..03283bf 100644 --- a/WebCore/inspector/ConsoleMessage.cpp +++ b/WebCore/inspector/ConsoleMessage.cpp @@ -33,46 +33,15 @@ #include "InjectedScript.h" #include "InjectedScriptHost.h" +#include "InspectorFrontend.h" #include "InspectorValues.h" +#include "ScriptArguments.h" #include "ScriptCallStack.h" #include "ScriptValue.h" - -#if ENABLE(INSPECTOR) -#include "InspectorFrontend.h" -#endif +#include <wtf/PassOwnPtr.h> namespace WebCore { -ConsoleMessage::CallFrame::CallFrame(const ScriptCallFrame& frame) - : m_functionName(frame.functionName()) - , m_sourceURL(frame.sourceURL()) - , m_lineNumber(frame.lineNumber()) -{ -} - -ConsoleMessage::CallFrame::CallFrame() - : m_lineNumber(0) -{ -} - -bool ConsoleMessage::CallFrame::isEqual(const ConsoleMessage::CallFrame& o) const -{ - return m_functionName == o.m_functionName - && m_sourceURL == o.m_sourceURL - && m_lineNumber == o.m_lineNumber; -} - -#if ENABLE(INSPECTOR) -PassRefPtr<InspectorObject> ConsoleMessage::CallFrame::buildInspectorObject() const -{ - RefPtr<InspectorObject> frame = InspectorObject::create(); - frame->setString("functionName", m_functionName); - frame->setString("sourceURL", m_sourceURL); - frame->setNumber("lineNumber", m_lineNumber); - return frame; -} -#endif - ConsoleMessage::ConsoleMessage(MessageSource s, MessageType t, MessageLevel l, const String& m, unsigned li, const String& u, unsigned g) : m_source(s) , m_type(t) @@ -85,35 +54,26 @@ ConsoleMessage::ConsoleMessage(MessageSource s, MessageType t, MessageLevel l, c { } -ConsoleMessage::ConsoleMessage(MessageSource s, MessageType t, MessageLevel l, const String& m, ScriptCallStack* callStack, unsigned g, bool storeTrace) +ConsoleMessage::ConsoleMessage(MessageSource s, MessageType t, MessageLevel l, const String& m, PassOwnPtr<ScriptArguments> arguments, PassOwnPtr<ScriptCallStack> callStack, unsigned g) : m_source(s) , m_type(t) , m_level(l) , m_message(m) -#if ENABLE(INSPECTOR) - , m_arguments(callStack->at(0).argumentCount()) - , m_scriptState(callStack->globalState()) -#endif - , m_frames(storeTrace ? callStack->size() : 0) + , m_arguments(arguments) + , m_callStack(callStack) , m_groupLevel(g) , m_repeatCount(1) { - const ScriptCallFrame& lastCaller = callStack->at(0); + const ScriptCallFrame& lastCaller = m_callStack->at(0); m_line = lastCaller.lineNumber(); m_url = lastCaller.sourceURL(); - if (storeTrace) { - for (unsigned i = 0; i < callStack->size(); ++i) - m_frames[i] = ConsoleMessage::CallFrame(callStack->at(i)); - } -#if ENABLE(INSPECTOR) - for (unsigned i = 0; i < lastCaller.argumentCount(); ++i) - m_arguments[i] = lastCaller.argumentAt(i); -#endif + bool storeTrace = (t == TraceMessageType || t == UncaughtExceptionMessageType || t == AssertMessageType); + if (!storeTrace) + m_callStack.clear(); } -#if ENABLE(INSPECTOR) void ConsoleMessage::addToFrontend(InspectorFrontend* frontend, InjectedScriptHost* injectedScriptHost) { RefPtr<InspectorObject> jsonObj = InspectorObject::create(); @@ -125,12 +85,12 @@ void ConsoleMessage::addToFrontend(InspectorFrontend* frontend, InjectedScriptHo jsonObj->setNumber("groupLevel", static_cast<int>(m_groupLevel)); jsonObj->setNumber("repeatCount", static_cast<int>(m_repeatCount)); jsonObj->setString("message", m_message); - if (!m_arguments.isEmpty()) { - InjectedScript injectedScript = injectedScriptHost->injectedScriptFor(m_scriptState.get()); + if (m_arguments && m_arguments->argumentCount()) { + InjectedScript injectedScript = injectedScriptHost->injectedScriptFor(m_arguments->globalState()); if (!injectedScript.hasNoValue()) { RefPtr<InspectorArray> jsonArgs = InspectorArray::create(); - for (unsigned i = 0; i < m_arguments.size(); ++i) { - RefPtr<InspectorValue> inspectorValue = injectedScript.wrapForConsole(m_arguments[i]); + for (unsigned i = 0; i < m_arguments->argumentCount(); ++i) { + RefPtr<InspectorValue> inspectorValue = injectedScript.wrapForConsole(m_arguments->argumentAt(i)); if (!inspectorValue) { ASSERT_NOT_REACHED(); return; @@ -140,12 +100,8 @@ void ConsoleMessage::addToFrontend(InspectorFrontend* frontend, InjectedScriptHo jsonObj->setArray("parameters", jsonArgs); } } - if (!m_frames.isEmpty()) { - RefPtr<InspectorArray> frames = InspectorArray::create(); - for (unsigned i = 0; i < m_frames.size(); i++) - frames->pushObject(m_frames.at(i).buildInspectorObject()); - jsonObj->setArray("stackTrace", frames); - } + if (m_callStack) + jsonObj->setArray("stackTrace", m_callStack->buildInspectorObject()); frontend->addConsoleMessage(jsonObj); } @@ -153,32 +109,20 @@ void ConsoleMessage::updateRepeatCountInConsole(InspectorFrontend* frontend) { frontend->updateConsoleMessageRepeatCount(m_repeatCount); } -#endif // ENABLE(INSPECTOR) bool ConsoleMessage::isEqual(ConsoleMessage* msg) const { -#if ENABLE(INSPECTOR) - if (msg->m_arguments.size() != m_arguments.size()) - return false; - if (!msg->m_scriptState.get() && msg->m_arguments.size()) { - ASSERT_NOT_REACHED(); - return false; - } - - for (size_t i = 0; i < m_arguments.size(); ++i) { - if (!m_arguments[i].isEqual(msg->m_scriptState.get(), msg->m_arguments[i])) + if (m_arguments) { + if (!m_arguments->isEqual(msg->m_arguments.get())) return false; - } -#endif // ENABLE(INSPECTOR) - - size_t frameCount = msg->m_frames.size(); - if (frameCount != m_frames.size()) + } else if (msg->m_arguments) return false; - for (size_t i = 0; i < frameCount; ++i) { - if (!m_frames[i].isEqual(msg->m_frames[i])) + if (m_callStack) { + if (!m_callStack->isEqual(msg->m_callStack.get())) return false; - } + } else if (msg->m_callStack) + return false; return msg->m_source == m_source && msg->m_type == m_type |