diff options
author | Tom Sepez <tsepez@chromium.org> | 2015-03-02 12:18:50 -0800 |
---|---|---|
committer | Tom Sepez <tsepez@chromium.org> | 2015-03-02 12:18:50 -0800 |
commit | b720d0a14601f1496ef15297bc46d401f5a2a890 (patch) | |
tree | d19c5604c1528646d992ffcd1beabe8279d5d4b3 /fpdfsdk/include/javascript | |
parent | 944ccad72d028ed5e37f53c5c8c0888866905bc3 (diff) | |
download | pdfium-b720d0a14601f1496ef15297bc46d401f5a2a890.tar.xz |
Return error information from pdfium to JS.
This implements the previously unimplemented JS_Error() function.
Along the way:
- fix some IWYU when the include order in global.cpp was perturbed.
- remove some uses of JS_ErrorString, to increase transparency.
- use vp.IsSetting() in place of !vp.IsGetting() for clarity.
- specify an error string on several error return paths.
- add an error string for writing readonly properties.
- rename an error string constant to reflect the actual message.
- replace calls to variadic Format() with a function doing string appends.
- remove unused JS_GetClassName()
R=thestig@chromium.org
Review URL: https://codereview.chromium.org/963193003
Diffstat (limited to 'fpdfsdk/include/javascript')
-rw-r--r-- | fpdfsdk/include/javascript/IJavaScript.h | 7 | ||||
-rw-r--r-- | fpdfsdk/include/javascript/JS_Define.h | 58 | ||||
-rw-r--r-- | fpdfsdk/include/javascript/JS_Object.h | 5 | ||||
-rw-r--r-- | fpdfsdk/include/javascript/resource.h | 6 |
4 files changed, 42 insertions, 34 deletions
diff --git a/fpdfsdk/include/javascript/IJavaScript.h b/fpdfsdk/include/javascript/IJavaScript.h index a05d4436e0..4db1bc6e27 100644 --- a/fpdfsdk/include/javascript/IJavaScript.h +++ b/fpdfsdk/include/javascript/IJavaScript.h @@ -7,6 +7,13 @@ #ifndef _IJAVASCRIPT_H_ #define _IJAVASCRIPT_H_ +#include "../../../core/include/fxcrt/fx_basic.h" + +class CPDF_Bookmark; +class CPDF_FormField; +class CPDFSDK_Annot; +class CPDFSDK_Document; + class IFXJS_Context { public: diff --git a/fpdfsdk/include/javascript/JS_Define.h b/fpdfsdk/include/javascript/JS_Define.h index 4246e01964..6edcc97aff 100644 --- a/fpdfsdk/include/javascript/JS_Define.h +++ b/fpdfsdk/include/javascript/JS_Define.h @@ -7,6 +7,9 @@ #ifndef _JS_DEFINE_H_ #define _JS_DEFINE_H_ +#include "../jsapi/fxjs_v8.h" +#include "resource.h" + typedef v8::Value JSValue; typedef v8::Handle<v8::Object> JSObject; typedef v8::Handle<v8::Object> JSFXObject; @@ -37,11 +40,10 @@ struct JSMethodSpec unsigned nParamNum; }; -typedef CFX_WideString JS_ErrorString; - #define JS_TRUE (unsigned)1 #define JS_FALSE (unsigned)0 +typedef CFX_WideString JS_ErrorString; typedef CFX_ArrayTemplate<float> CJS_PointsArray; typedef CFX_ArrayTemplate<int> CJS_IntArray; @@ -63,7 +65,7 @@ typedef CFX_ArrayTemplate<int> CJS_IntArray; /* ======================================== PROP CALLBACK ============================================ */ -template <class C, FX_BOOL (C::*M)(IFXJS_Context* cc, CJS_PropValue& vp, JS_ErrorString& sError)> +template <class C, FX_BOOL (C::*M)(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)> void JSPropGetter(const char* prop_name_string, const char* class_name_string, v8::Local<v8::String> property, @@ -76,19 +78,17 @@ void JSPropGetter(const char* prop_name_string, IFXJS_Context* pContext = pRuntime->GetCurrentContext(); CJS_Object* pJSObj = (CJS_Object*)JS_GetPrivate(isolate,info.Holder()); C* pObj = reinterpret_cast<C*>(pJSObj->GetEmbedObject()); - JS_ErrorString sError; + CFX_WideString sError; CJS_PropValue value(isolate); value.StartGetting(); if (!(pObj->*M)(pContext, value, sError)) { - CFX_ByteString cbName; - cbName.Format("%s.%s", class_name_string, prop_name_string); - JS_Error(NULL, CFX_WideString::FromLocal(cbName), sError); + JS_Error(isolate, JSFormatErrorString(class_name_string, prop_name_string, sError)); return; } info.GetReturnValue().Set((v8::Handle<v8::Value>)value); } -template <class C, FX_BOOL (C::*M)(IFXJS_Context* cc, CJS_PropValue& vp, JS_ErrorString& sError)> +template <class C, FX_BOOL (C::*M)(IFXJS_Context* cc, CJS_PropValue& vp, CFX_WideString& sError)> void JSPropSetter(const char* prop_name_string, const char* class_name_string, v8::Local<v8::String> property, @@ -102,13 +102,11 @@ void JSPropSetter(const char* prop_name_string, IFXJS_Context* pContext = pRuntime->GetCurrentContext(); CJS_Object* pJSObj = (CJS_Object*)JS_GetPrivate(isolate,info.Holder()); C* pObj = reinterpret_cast<C*>(pJSObj->GetEmbedObject()); - JS_ErrorString sError; + CFX_WideString sError; CJS_PropValue propValue(CJS_Value(isolate, value, VT_unknown)); propValue.StartSetting(); if (!(pObj->*M)(pContext, propValue, sError)) { - CFX_ByteString cbName; - cbName.Format("%s.%s", class_name_string, prop_name_string); - JS_Error(NULL, CFX_WideString::FromLocal(cbName), sError); + JS_Error(isolate, JSFormatErrorString(class_name_string, prop_name_string, sError)); } } @@ -129,7 +127,7 @@ void JSPropSetter(const char* prop_name_string, /* ========================================= METHOD CALLBACK =========================================== */ -template <class C, FX_BOOL (C::*M)(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, JS_ErrorString& sError)> +template <class C, FX_BOOL (C::*M)(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)> void JSMethod(const char* method_name_string, const char* class_name_string, const v8::FunctionCallbackInfo<v8::Value>& info) { @@ -146,11 +144,9 @@ void JSMethod(const char* method_name_string, CJS_Value valueRes(isolate); CJS_Object* pJSObj = (CJS_Object *)JS_GetPrivate(isolate,info.Holder()); C* pObj = reinterpret_cast<C*>(pJSObj->GetEmbedObject()); - JS_ErrorString sError; + CFX_WideString sError; if (!(pObj->*M)(cc, parameters, valueRes, sError)) { - CFX_ByteString cbName; - cbName.Format("%s.%s", class_name_string, method_name_string); - JS_Error(NULL, CFX_WideString::FromLocal(cbName), sError); + JS_Error(isolate, JSFormatErrorString(class_name_string, method_name_string, sError)); return; } info.GetReturnValue().Set(valueRes.ToJSValue()); @@ -160,14 +156,14 @@ void JSMethod(const char* method_name_string, static void method_name##_static( \ const v8::FunctionCallbackInfo<v8::Value>& info) { \ JSMethod<class_name, &class_name::method_name>( \ - #class_name, #method_name, info); \ + #method_name, #class_name, info); \ } #define JS_SPECIAL_STATIC_METHOD(method_name, class_alternate, class_name) \ static void method_name##_static( \ const v8::FunctionCallbackInfo<v8::Value>& info) { \ JSMethod<class_alternate, &class_alternate::method_name>( \ - #class_name, #method_name, info); \ + #method_name, #class_name, info); \ } /* ===================================== JS CLASS =============================================== */ @@ -278,14 +274,12 @@ void JSSpecialPropGet(const char* class_name, Alt* pObj = reinterpret_cast<Alt*>(pJSObj->GetEmbedObject()); v8::String::Utf8Value utf8_value(property); CFX_WideString propname = CFX_WideString::FromUTF8(*utf8_value, utf8_value.length()); - JS_ErrorString sError; + CFX_WideString sError; CJS_PropValue value(isolate); value.StartGetting(); if (!pObj->DoProperty(pRuntimeContext, propname.c_str(), value, sError)) { - CFX_ByteString cbName; - cbName.Format("%s.%s", class_name, L"GetProperty"); - JS_Error(NULL,CFX_WideString::FromLocal(cbName), sError); - return; + JS_Error(isolate, JSFormatErrorString(class_name, "GetProperty", sError)); + return; } info.GetReturnValue().Set((v8::Handle<v8::Value>)value); } @@ -305,13 +299,11 @@ void JSSpecialPropPut(const char* class_name, Alt* pObj = reinterpret_cast<Alt*>(pJSObj->GetEmbedObject()); v8::String::Utf8Value utf8_value(property); CFX_WideString propname = CFX_WideString::FromUTF8(*utf8_value, utf8_value.length()); - JS_ErrorString sError; + CFX_WideString sError; CJS_PropValue PropValue(CJS_Value(isolate,value,VT_unknown)); PropValue.StartSetting(); if (!pObj->DoProperty(pRuntimeContext, propname.c_str(), PropValue, sError)) { - CFX_ByteString cbName; - cbName.Format("%s.%s", class_name, "PutProperty"); - JS_Error(NULL,CFX_WideString::FromLocal(cbName), sError); + JS_Error(isolate, JSFormatErrorString(class_name, "PutProperty", sError)); } } @@ -329,7 +321,7 @@ void JSSpecialPropDel(const char* class_name, Alt* pObj = reinterpret_cast<Alt*>(pJSObj->GetEmbedObject()); v8::String::Utf8Value utf8_value(property); CFX_WideString propname = CFX_WideString::FromUTF8(*utf8_value, utf8_value.length()); - JS_ErrorString sError; + CFX_WideString sError; if (!pObj->DelProperty(pRuntimeContext, propname.c_str(), sError)) { CFX_ByteString cbName; cbName.Format("%s.%s", class_name, "DelProperty"); @@ -408,9 +400,9 @@ int js_class_name::Init(IJS_Runtime* pRuntime, FXJSOBJTYPE eObjType)\ /* ======================================== GLOBAL METHODS ============================================ */ -template <FX_BOOL (*F)(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, JS_ErrorString& sError)> +template <FX_BOOL (*F)(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError)> void JSGlobalFunc(const char *func_name_string, - const v8::FunctionCallbackInfo<v8::Value>& info) { + const v8::FunctionCallbackInfo<v8::Value>& info) { v8::Isolate* isolate = info.GetIsolate(); v8::Local<v8::Context> context = isolate->GetCurrentContext(); v8::Local<v8::Value> v = context->GetEmbedderData(1); @@ -422,10 +414,10 @@ void JSGlobalFunc(const char *func_name_string, parameters.push_back(CJS_Value(isolate, info[i], VT_unknown)); } CJS_Value valueRes(isolate); - JS_ErrorString sError; + CFX_WideString sError; if (!(*F)(cc, parameters, valueRes, sError)) { - JS_Error(NULL, JS_WIDESTRING(fun_name), sError); + JS_Error(isolate, JSFormatErrorString(func_name_string, nullptr, sError)); return; } info.GetReturnValue().Set(valueRes.ToJSValue()); diff --git a/fpdfsdk/include/javascript/JS_Object.h b/fpdfsdk/include/javascript/JS_Object.h index dbf7da68a4..86ae14f3d0 100644 --- a/fpdfsdk/include/javascript/JS_Object.h +++ b/fpdfsdk/include/javascript/JS_Object.h @@ -7,6 +7,11 @@ #ifndef _JS_OBJECT_H_ #define _JS_OBJECT_H_ +#include "../fsdk_define.h" // For FX_UINT +#include "../fsdk_mgr.h" // For CPDFDoc_Environment +#include "../fx_systemhandler.h" // For IFX_SystemHandler + +class CPDFSDK_PageView; class CJS_Object; class CJS_Timer; class CJS_Context; diff --git a/fpdfsdk/include/javascript/resource.h b/fpdfsdk/include/javascript/resource.h index 058b5fd893..8f0a25061e 100644 --- a/fpdfsdk/include/javascript/resource.h +++ b/fpdfsdk/include/javascript/resource.h @@ -26,8 +26,12 @@ class CJS_Context; #define IDS_STRING_RUN 25630 #define IDS_STRING_JSPRINT1 25632 #define IDS_STRING_JSPRINT2 25633 -#define IDS_JSPARAM_INCORRECT 25635 +#define IDS_STRING_JSNOGLOBAL 25635 +#define IDS_STRING_JSREADONLY 25636 CFX_WideString JSGetStringFromID(CJS_Context* pContext, FX_UINT id); +CFX_WideString JSFormatErrorString(const char* class_name, + const char* property_name, + const CFX_WideString& details); #endif // FPDFSDK_INCLUDE_JAVASCRIPT_RESOURCE_H_ |