Index: Source/core/frame/FrameConsole.cpp |
diff --git a/Source/core/frame/FrameConsole.cpp b/Source/core/frame/FrameConsole.cpp |
index 28dc4d3da49113cd0162f15067ff2b393264a289..d3fc317f623ab39615d27c476102da9bba502d23 100644 |
--- a/Source/core/frame/FrameConsole.cpp |
+++ b/Source/core/frame/FrameConsole.cpp |
@@ -29,6 +29,7 @@ |
#include "config.h" |
#include "core/frame/FrameConsole.h" |
+#include "bindings/core/v8/ScriptCallStackFactory.h" |
#include "core/frame/FrameHost.h" |
#include "core/inspector/ConsoleAPITypes.h" |
#include "core/inspector/ConsoleMessage.h" |
@@ -55,7 +56,7 @@ FrameConsole::FrameConsole(LocalFrame& frame) |
void FrameConsole::addMessage(PassRefPtrWillBeRawPtr<ConsoleMessage> prpConsoleMessage) |
{ |
- if (muteCount) |
+ if (muteCount && prpConsoleMessage->source() != ConsoleAPIMessageSource) |
vsevik
2014/08/18 18:41:06
You should never use prp* parameters as is.
kozyatinskiy1
2014/08/19 07:31:06
Done.
|
return; |
// FIXME: This should not need to reach for the main-frame. |
@@ -67,20 +68,39 @@ void FrameConsole::addMessage(PassRefPtrWillBeRawPtr<ConsoleMessage> prpConsoleM |
RefPtrWillBeRawPtr<ConsoleMessage> consoleMessage = prpConsoleMessage; |
InspectorInstrumentation::addMessageToConsole(context, consoleMessage.get()); |
+ if (consoleMessage->source() == CSSMessageSource) |
+ return; |
+ |
String messageURL; |
- if (consoleMessage->callStack()) |
+ unsigned lineNumber = 0; |
+ if (consoleMessage->callStack()) { |
+ lineNumber = consoleMessage->callStack()->at(0).lineNumber(); |
messageURL = consoleMessage->callStack()->at(0).sourceURL(); |
- else |
+ } else { |
+ lineNumber = consoleMessage->lineNumber(); |
messageURL = consoleMessage->url(); |
+ } |
- if (consoleMessage->source() == CSSMessageSource) |
- return; |
+ RefPtr<ScriptCallStack> reportedCallStack; |
+ if (consoleMessage->source() != ConsoleAPIMessageSource) { |
+ if (consoleMessage->callStack() && m_frame.chromeClient().shouldReportDetailedMessageForSource(messageURL)) |
+ reportedCallStack = consoleMessage->callStack(); |
+ } else { |
+ if (!m_frame.host() || (consoleMessage->scriptArguments() && consoleMessage->scriptArguments()->argumentCount() == 0)) |
+ return; |
- String stackTrace; |
- if (consoleMessage->callStack() && m_frame.chromeClient().shouldReportDetailedMessageForSource(consoleMessage->url())) |
- stackTrace = FrameConsole::formatStackTraceString(consoleMessage->message(), consoleMessage->callStack()); |
+ MessageType type = consoleMessage->type(); |
+ if (type == StartGroupMessageType || type == EndGroupMessageType || type == StartGroupCollapsedMessageType) |
+ return; |
- m_frame.chromeClient().addMessageToConsole(&m_frame, consoleMessage->source(), consoleMessage->level(), consoleMessage->message(), consoleMessage->lineNumber(), messageURL, stackTrace); |
+ if (m_frame.chromeClient().shouldReportDetailedMessageForSource(messageURL)) |
+ reportedCallStack = createScriptCallStack(ScriptCallStack::maxCallStackSizeToCapture); |
+ } |
+ |
+ String stackTrace; |
+ if (reportedCallStack) |
+ stackTrace = FrameConsole::formatStackTraceString(consoleMessage->message(), reportedCallStack); |
+ m_frame.chromeClient().addMessageToConsole(&m_frame, consoleMessage->source(), consoleMessage->level(), consoleMessage->message(), lineNumber, messageURL, stackTrace); |
} |
String FrameConsole::formatStackTraceString(const String& originalMessage, PassRefPtrWillBeRawPtr<ScriptCallStack> callStack) |