Chromium Code Reviews| Index: third_party/WebKit/Source/core/inspector/MainThreadDebugger.cpp |
| diff --git a/third_party/WebKit/Source/core/inspector/MainThreadDebugger.cpp b/third_party/WebKit/Source/core/inspector/MainThreadDebugger.cpp |
| index 97fb60cbeeabe94b27c4dd3c379495742e6b504a..40ff12f8ad427e75f4a70a9b59f6778d8d9ce6cb 100644 |
| --- a/third_party/WebKit/Source/core/inspector/MainThreadDebugger.cpp |
| +++ b/third_party/WebKit/Source/core/inspector/MainThreadDebugger.cpp |
| @@ -34,6 +34,7 @@ |
| #include "bindings/core/v8/DOMWrapperWorld.h" |
| #include "bindings/core/v8/ScriptController.h" |
| #include "bindings/core/v8/SourceLocation.h" |
| +#include "bindings/core/v8/V8ErrorHandler.h" |
| #include "bindings/core/v8/V8Node.h" |
| #include "bindings/core/v8/V8Window.h" |
| #include "core/dom/ContainerNode.h" |
| @@ -41,6 +42,7 @@ |
| #include "core/dom/Element.h" |
| #include "core/dom/ExecutionContext.h" |
| #include "core/dom/StaticNodeList.h" |
| +#include "core/events/ErrorEvent.h" |
| #include "core/frame/FrameConsole.h" |
| #include "core/frame/FrameHost.h" |
| #include "core/frame/LocalDOMWindow.h" |
| @@ -150,12 +152,22 @@ void MainThreadDebugger::contextWillBeDestroyed(ScriptState* scriptState) |
| debugger()->contextDestroyed(scriptState->context()); |
| } |
| -void MainThreadDebugger::exceptionThrown(LocalFrame* frame, const String& errorMessage, std::unique_ptr<SourceLocation> location) |
| +void MainThreadDebugger::exceptionThrown(LocalFrame* frame, ErrorEvent* event) |
| { |
| if (frame->host() && frame->host()->consoleMessageStorage().isMuted()) |
| return; |
| - debugger()->exceptionThrown(contextGroupId(frame), errorMessage, location->url(), location->lineNumber(), location->columnNumber(), location->cloneStackTrace(), location->scriptId()); |
| - frame->console().reportMessageToClient(ConsoleMessage::create(JSMessageSource, ErrorMessageLevel, errorMessage, std::move(location))); |
| + |
| + const String16 defaultMessage = "Uncaught"; |
| + ScriptState* scriptState = event->world() ? ScriptState::forWorld(frame, *event->world()) : nullptr; |
| + if (scriptState && scriptState->contextIsValid()) { |
| + ScriptState::Scope scope(scriptState); |
| + v8::Local<v8::Value> exception = V8ErrorHandler::loadExceptionFromErrorEventWrapper(scriptState, event, scriptState->context()->Global()); |
| + SourceLocation* location = event->location(); |
| + debugger()->exceptionThrown(scriptState->context(), defaultMessage, exception, event->messageForConsole(), location->url(), location->lineNumber(), location->columnNumber(), location->cloneStackTrace(), location->scriptId()); |
|
kozy
2016/07/28 17:18:51
Could we extract this code from here and WorkerThr
dgozman
2016/07/28 17:40:56
Acknowledged.
|
| + } |
| + |
| + // TODO(dgozman): do not wrap in ConsoleMessage. |
| + frame->console().reportMessageToClient(ConsoleMessage::create(JSMessageSource, ErrorMessageLevel, event->messageForConsole(), event->location()->clone())); |
| } |
| int MainThreadDebugger::contextGroupId(LocalFrame* frame) |
| @@ -244,7 +256,7 @@ void MainThreadDebugger::consoleAPIMessage(int contextGroupId, MessageLevel leve |
| LocalFrame* frame = WeakIdentifierMap<LocalFrame>::lookup(contextGroupId); |
| if (!frame) |
| return; |
| - // TODO(dgozman): maybe not wrap with ConsoleMessage. |
| + // TODO(dgozman): do not wrap in ConsoleMessage. |
| ConsoleMessage* consoleMessage = ConsoleMessage::create(ConsoleAPIMessageSource, level, message, SourceLocation::create(url, lineNumber, columnNumber, stackTrace ? stackTrace->clone() : nullptr, 0)); |
| frame->console().reportMessageToClient(consoleMessage); |
| } |