Index: third_party/WebKit/Source/bindings/core/v8/V8Initializer.cpp |
diff --git a/third_party/WebKit/Source/bindings/core/v8/V8Initializer.cpp b/third_party/WebKit/Source/bindings/core/v8/V8Initializer.cpp |
index 936efada5708f3718afb68ff3765cec3ce639de9..496854d8ff88f7dacd0ec29f6b342186a85ccbf3 100644 |
--- a/third_party/WebKit/Source/bindings/core/v8/V8Initializer.cpp |
+++ b/third_party/WebKit/Source/bindings/core/v8/V8Initializer.cpp |
@@ -48,6 +48,7 @@ |
#include "core/frame/LocalDOMWindow.h" |
#include "core/frame/LocalFrame.h" |
#include "core/frame/csp/ContentSecurityPolicy.h" |
+#include "core/inspector/ConsoleMessage.h" |
#include "core/inspector/MainThreadDebugger.h" |
#include "core/workers/WorkerGlobalScope.h" |
#include "platform/EventDispatchForbiddenScope.h" |
@@ -118,6 +119,32 @@ static String extractMessageForConsole(v8::Isolate* isolate, |
return emptyString(); |
} |
+namespace { |
+MessageLevel MessageLevelFromNonFatalErrorLevel(int errorLevel) { |
+ MessageLevel level = ErrorMessageLevel; |
+ switch (errorLevel) { |
+ case v8::Isolate::kMessageLog: |
+ level = LogMessageLevel; |
+ break; |
+ case v8::Isolate::kMessageWarning: |
+ level = WarningMessageLevel; |
+ break; |
+ case v8::Isolate::kMessageDebug: |
+ level = DebugMessageLevel; |
+ break; |
+ case v8::Isolate::kMessageInfo: |
+ level = InfoMessageLevel; |
+ break; |
+ case v8::Isolate::kMessageError: |
+ level = InfoMessageLevel; |
+ break; |
+ default: |
+ DCHECK(false); |
jochen (gone - plz use gerrit)
2016/12/14 11:42:43
NOTREACHED();
bradn
2016/12/14 12:18:14
Done.
|
+ } |
+ return level; |
+} |
+}; |
jochen (gone - plz use gerrit)
2016/12/14 11:42:43
no ; at the end of namespace. Please also add a co
bradn
2016/12/14 12:18:14
Done.
|
+ |
void V8Initializer::messageHandlerInMainThread(v8::Local<v8::Message> message, |
v8::Local<v8::Value> data) { |
ASSERT(isMainThread()); |
@@ -135,6 +162,14 @@ void V8Initializer::messageHandlerInMainThread(v8::Local<v8::Message> message, |
std::unique_ptr<SourceLocation> location = |
SourceLocation::fromMessage(isolate, message, context); |
+ if (message->ErrorLevel() != v8::Isolate::kMessageError) { |
+ context->addConsoleMessage(ConsoleMessage::create( |
+ JSMessageSource, |
+ MessageLevelFromNonFatalErrorLevel(message->ErrorLevel()), |
+ toCoreStringWithNullCheck(message->Get()), std::move(location))); |
+ return; |
+ } |
+ |
AccessControlStatus accessControlStatus = NotSharableCrossOrigin; |
if (message->IsOpaque()) |
accessControlStatus = OpaqueResource; |
@@ -386,7 +421,11 @@ void V8Initializer::initializeMainThread() { |
isolate->SetOOMErrorHandler(reportOOMErrorInMainThread); |
isolate->SetFatalErrorHandler(reportFatalErrorInMainThread); |
- isolate->AddMessageListener(messageHandlerInMainThread); |
+ isolate->AddMessageListenerWithErrorLevel( |
+ messageHandlerInMainThread, |
+ v8::Isolate::kMessageError | v8::Isolate::kMessageWarning | |
+ v8::Isolate::kMessageInfo | v8::Isolate::kMessageDebug | |
+ v8::Isolate::kMessageLog); |
isolate->SetFailedAccessCheckCallbackFunction( |
failedAccessCheckCallbackInMainThread); |
isolate->SetAllowCodeGenerationFromStringsCallback( |
@@ -456,6 +495,15 @@ static void messageHandlerInWorker(v8::Local<v8::Message> message, |
ExecutionContext* context = scriptState->getExecutionContext(); |
std::unique_ptr<SourceLocation> location = |
SourceLocation::fromMessage(isolate, message, context); |
+ |
+ if (message->ErrorLevel() != v8::Isolate::kMessageError) { |
+ context->addConsoleMessage(ConsoleMessage::create( |
+ JSMessageSource, |
+ MessageLevelFromNonFatalErrorLevel(message->ErrorLevel()), |
+ toCoreStringWithNullCheck(message->Get()), std::move(location))); |
+ return; |
+ } |
+ |
ErrorEvent* event = |
ErrorEvent::create(toCoreStringWithNullCheck(message->Get()), |
std::move(location), &scriptState->world()); |
@@ -488,7 +536,11 @@ NO_SANITIZE_ADDRESS |
void V8Initializer::initializeWorker(v8::Isolate* isolate) { |
initializeV8Common(isolate); |
- isolate->AddMessageListener(messageHandlerInWorker); |
+ isolate->AddMessageListenerWithErrorLevel( |
+ messageHandlerInWorker, |
+ v8::Isolate::kMessageError | v8::Isolate::kMessageWarning | |
+ v8::Isolate::kMessageInfo | v8::Isolate::kMessageDebug | |
+ v8::Isolate::kMessageLog); |
isolate->SetFatalErrorHandler(reportFatalErrorInWorker); |
uint32_t here; |