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 dcb07ce1011bfb5097babc465b707c2ab34f9c52..dd5752155edae047aefe25c55a573701306d01b4 100644 |
--- a/third_party/WebKit/Source/bindings/core/v8/V8Initializer.cpp |
+++ b/third_party/WebKit/Source/bindings/core/v8/V8Initializer.cpp |
@@ -49,6 +49,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" |
@@ -139,6 +140,36 @@ void V8Initializer::messageHandlerInMainThread(v8::Local<v8::Message> message, |
std::unique_ptr<SourceLocation> location = |
SourceLocation::fromMessage(isolate, message, context); |
+ if (message->ErrorLevel() != v8::Isolate::kMessageError) { |
+ // Ignore if called before frame is ready. |
+ if (!context->isDocument()) { |
+ return; |
+ } |
+ LocalFrame* frame = toDocument(context)->frame(); |
+ |
+ MessageLevel level; |
+ switch (message->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; |
+ default: |
+ UNREACHABLE(); |
+ } |
+ frame->document()->addConsoleMessage(ConsoleMessage::create( |
dgozman
2016/12/01 18:38:33
ExecutionContext has addConsoleMessage method, let
bradnelson
2016/12/14 08:26:39
Done.
|
+ JSMessageSource, level, toCoreStringWithNullCheck(message->Get()), |
+ std::move(location))); |
+ return; |
+ } |
+ |
AccessControlStatus accessControlStatus = NotSharableCrossOrigin; |
if (message->IsOpaque()) |
accessControlStatus = OpaqueResource; |
@@ -400,7 +431,11 @@ void V8Initializer::initializeMainThread() { |
isolate->SetOOMErrorHandler(reportOOMErrorInMainThread); |
isolate->SetFatalErrorHandler(reportFatalErrorInMainThread); |
- isolate->AddMessageListener(messageHandlerInMainThread); |
+ isolate->AddMessageListener( |
+ messageHandlerInMainThread, v8::Local<v8::Value>(), |
+ v8::Isolate::kMessageError | v8::Isolate::kMessageWarning | |
+ v8::Isolate::kMessageInfo | v8::Isolate::kMessageDebug | |
+ v8::Isolate::kMessageLog); |
isolate->SetFailedAccessCheckCallbackFunction( |
failedAccessCheckCallbackInMainThread); |
isolate->SetAllowCodeGenerationFromStringsCallback( |