Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(149)

Unified Diff: Source/bindings/core/v8/PrivateScriptRunner.cpp

Issue 460573002: JS errors thrown in private scripts should be reported to stderr in Debug builds (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/bindings/core/v8/PrivateScriptRunner.h ('k') | Source/bindings/templates/attributes.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/bindings/core/v8/PrivateScriptRunner.cpp
diff --git a/Source/bindings/core/v8/PrivateScriptRunner.cpp b/Source/bindings/core/v8/PrivateScriptRunner.cpp
index 1b44e9369b1a352adff5e9634fb3a5bab5779957..c78bdb8191d17161974503dc0b4498aabb0f0880 100644
--- a/Source/bindings/core/v8/PrivateScriptRunner.cpp
+++ b/Source/bindings/core/v8/PrivateScriptRunner.cpp
@@ -205,8 +205,19 @@ v8::Handle<v8::Value> PrivateScriptRunner::runDOMMethod(ScriptState* scriptState
return V8ScriptRunner::callFunction(v8::Handle<v8::Function>::Cast(method), scriptState->executionContext(), holder, argc, argv, scriptState->isolate());
}
-bool PrivateScriptRunner::throwDOMExceptionInPrivateScriptIfNeeded(v8::Isolate* isolate, ExceptionState& exceptionState, v8::Handle<v8::Value> exception)
+static void dumpJSError(String exceptionName, String message)
{
+ // FIXME: Set a ScriptOrigin of the private script and print a more informative message.
+#ifndef NDEBUG
+ fprintf(stderr, "Private script throws an exception: %s\n", exceptionName.utf8().data());
haraken 2014/08/12 02:38:33 I used fprintf(stderr) instead of WTF_LOG_ERROR, b
+ if (!message.isEmpty())
+ fprintf(stderr, "%s\n", message.utf8().data());
+#endif
+}
+
+bool PrivateScriptRunner::rethrowExceptionInPrivateScript(v8::Isolate* isolate, ExceptionState& exceptionState, v8::TryCatch& block)
+{
+ v8::Handle<v8::Value> exception = block.Exception();
if (exception.IsEmpty() || !exception->IsObject())
return false;
@@ -216,47 +227,57 @@ bool PrivateScriptRunner::throwDOMExceptionInPrivateScriptIfNeeded(v8::Isolate*
return false;
String exceptionName = toCoreString(v8::Handle<v8::String>::Cast(name));
if (exceptionName == "DOMExceptionInPrivateScript") {
- v8::Handle<v8::Value> message = exceptionObject->Get(v8String(isolate, "message"));
- RELEASE_ASSERT(!message.IsEmpty() && message->IsString());
+ v8::Handle<v8::Value> v8Message = exceptionObject->Get(v8String(isolate, "message"));
+ RELEASE_ASSERT(!v8Message.IsEmpty() && v8Message->IsString());
v8::Handle<v8::Value> code = exceptionObject->Get(v8String(isolate, "code"));
RELEASE_ASSERT(!code.IsEmpty() && code->IsInt32());
- exceptionState.throwDOMException(toInt32(code), toCoreString(v8::Handle<v8::String>::Cast(message)));
+ exceptionState.throwDOMException(toInt32(code), toCoreString(v8::Handle<v8::String>::Cast(v8Message)));
exceptionState.throwIfNeeded();
return true;
}
if (exceptionName == "Error") {
- v8::Handle<v8::Value> message = exceptionObject->Get(v8String(isolate, "message"));
- RELEASE_ASSERT(!message.IsEmpty() && message->IsString());
- exceptionState.throwDOMException(V8GeneralError, toCoreString(v8::Handle<v8::String>::Cast(message)));
+ v8::Handle<v8::Value> v8Message = exceptionObject->Get(v8String(isolate, "message"));
+ RELEASE_ASSERT(!v8Message.IsEmpty() && v8Message->IsString());
+ String message = toCoreString(v8::Handle<v8::String>::Cast(v8Message));
+ exceptionState.throwDOMException(V8GeneralError, message);
exceptionState.throwIfNeeded();
+ dumpJSError(exceptionName, message);
return true;
}
if (exceptionName == "TypeError") {
- v8::Handle<v8::Value> message = exceptionObject->Get(v8String(isolate, "message"));
- RELEASE_ASSERT(!message.IsEmpty() && message->IsString());
- exceptionState.throwDOMException(V8TypeError, toCoreString(v8::Handle<v8::String>::Cast(message)));
+ v8::Handle<v8::Value> v8Message = exceptionObject->Get(v8String(isolate, "message"));
+ RELEASE_ASSERT(!v8Message.IsEmpty() && v8Message->IsString());
+ String message = toCoreString(v8::Handle<v8::String>::Cast(v8Message));
+ exceptionState.throwDOMException(V8TypeError, message);
exceptionState.throwIfNeeded();
+ dumpJSError(exceptionName, message);
return true;
}
if (exceptionName == "RangeError") {
- v8::Handle<v8::Value> message = exceptionObject->Get(v8String(isolate, "message"));
- RELEASE_ASSERT(!message.IsEmpty() && message->IsString());
- exceptionState.throwDOMException(V8RangeError, toCoreString(v8::Handle<v8::String>::Cast(message)));
+ v8::Handle<v8::Value> v8Message = exceptionObject->Get(v8String(isolate, "message"));
+ RELEASE_ASSERT(!v8Message.IsEmpty() && v8Message->IsString());
+ String message = toCoreString(v8::Handle<v8::String>::Cast(v8Message));
+ exceptionState.throwDOMException(V8RangeError, message);
exceptionState.throwIfNeeded();
+ dumpJSError(exceptionName, message);
return true;
}
if (exceptionName == "SyntaxError") {
- v8::Handle<v8::Value> message = exceptionObject->Get(v8String(isolate, "message"));
- RELEASE_ASSERT(!message.IsEmpty() && message->IsString());
- exceptionState.throwDOMException(V8SyntaxError, toCoreString(v8::Handle<v8::String>::Cast(message)));
+ v8::Handle<v8::Value> v8Message = exceptionObject->Get(v8String(isolate, "message"));
+ RELEASE_ASSERT(!v8Message.IsEmpty() && v8Message->IsString());
+ String message = toCoreString(v8::Handle<v8::String>::Cast(v8Message));
+ exceptionState.throwDOMException(V8SyntaxError, message);
exceptionState.throwIfNeeded();
+ dumpJSError(exceptionName, message);
return true;
}
if (exceptionName == "ReferenceError") {
- v8::Handle<v8::Value> message = exceptionObject->Get(v8String(isolate, "message"));
- RELEASE_ASSERT(!message.IsEmpty() && message->IsString());
- exceptionState.throwDOMException(V8ReferenceError, toCoreString(v8::Handle<v8::String>::Cast(message)));
+ v8::Handle<v8::Value> v8Message = exceptionObject->Get(v8String(isolate, "message"));
+ RELEASE_ASSERT(!v8Message.IsEmpty() && v8Message->IsString());
+ String message = toCoreString(v8::Handle<v8::String>::Cast(v8Message));
+ exceptionState.throwDOMException(V8ReferenceError, message);
exceptionState.throwIfNeeded();
+ dumpJSError(exceptionName, message);
return true;
}
return false;
« no previous file with comments | « Source/bindings/core/v8/PrivateScriptRunner.h ('k') | Source/bindings/templates/attributes.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698