diff options
author | Dan Sinclair <dsinclair@chromium.org> | 2018-05-17 13:53:52 +0000 |
---|---|---|
committer | Chromium commit bot <commit-bot@chromium.org> | 2018-05-17 13:53:52 +0000 |
commit | dc5d88bcebbeeb696b405464e901add55d1efaf7 (patch) | |
tree | 54bc913015ea4d08b9fe46997f25a3153cbc70d7 /fxjs/cfxjs_engine.cpp | |
parent | db3c6cefceddf25c25f1205d7b633f09e873bf98 (diff) | |
download | pdfium-dc5d88bcebbeeb696b405464e901add55d1efaf7.tar.xz |
Convert JS execute methods to return Optional<IJS_Runtime::JS_Error>
This CL changes several of the JS execution methods to to return an
Optional<IJS_Runtime::JS_Error> instead of a bool with a WideString
out param.
The IJS_Runtime::JS_Error will contain the line, column and exception message
if an error occurs during execution.
Change-Id: I37785ae6cd133a4c94ad8d25289473600b8a5d19
Reviewed-on: https://pdfium-review.googlesource.com/32614
Commit-Queue: dsinclair <dsinclair@chromium.org>
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Diffstat (limited to 'fxjs/cfxjs_engine.cpp')
-rw-r--r-- | fxjs/cfxjs_engine.cpp | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/fxjs/cfxjs_engine.cpp b/fxjs/cfxjs_engine.cpp index 5def57e992..107ed3abae 100644 --- a/fxjs/cfxjs_engine.cpp +++ b/fxjs/cfxjs_engine.cpp @@ -520,7 +520,8 @@ void CFXJS_Engine::ReleaseEngine() { GetIsolate()->SetData(g_embedderDataSlot, nullptr); } -int CFXJS_Engine::Execute(const WideString& script, FXJSErr* pError) { +Optional<IJS_Runtime::JS_Error> CFXJS_Engine::Execute( + const WideString& script) { v8::Isolate::Scope isolate_scope(GetIsolate()); v8::TryCatch try_catch(GetIsolate()); v8::Local<v8::Context> context = GetIsolate()->GetCurrentContext(); @@ -528,17 +529,22 @@ int CFXJS_Engine::Execute(const WideString& script, FXJSErr* pError) { if (!v8::Script::Compile(context, NewString(script.AsStringView())) .ToLocal(&compiled_script)) { v8::String::Utf8Value error(GetIsolate(), try_catch.Exception()); - // TODO(tsepez): return error via pError->message. - return -1; + v8::Local<v8::Message> msg = try_catch.Message(); + v8::Maybe<int> line = msg->GetLineNumber(context); + + return IJS_Runtime::JS_Error(line.FromMaybe(-1), msg->GetStartColumn(), + WideString::FromUTF8(*error)); } v8::Local<v8::Value> result; if (!compiled_script->Run(context).ToLocal(&result)) { v8::String::Utf8Value error(GetIsolate(), try_catch.Exception()); - // TODO(tsepez): return error via pError->message. - return -1; + auto msg = try_catch.Message(); + auto line = msg->GetLineNumber(context); + return IJS_Runtime::JS_Error(line.FromMaybe(-1), msg->GetStartColumn(), + WideString::FromUTF8(*error)); } - return 0; + return pdfium::nullopt; } v8::Local<v8::Object> CFXJS_Engine::NewFXJSBoundObject(int nObjDefnID, |