| OLD | NEW |
| 1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
| 6 | 6 |
| 7 #ifndef FPDFSDK_JAVASCRIPT_JS_DEFINE_H_ | 7 #ifndef FPDFSDK_JAVASCRIPT_JS_DEFINE_H_ |
| 8 #define FPDFSDK_JAVASCRIPT_JS_DEFINE_H_ | 8 #define FPDFSDK_JAVASCRIPT_JS_DEFINE_H_ |
| 9 | 9 |
| 10 #include <vector> | 10 #include <vector> |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 63 JSMethodSpec js_class_name::JS_Class_Methods[] = { | 63 JSMethodSpec js_class_name::JS_Class_Methods[] = { |
| 64 #define JS_STATIC_METHOD_ENTRY(method_name) \ | 64 #define JS_STATIC_METHOD_ENTRY(method_name) \ |
| 65 { JS_WIDESTRING(method_name), method_name##_static } \ | 65 { JS_WIDESTRING(method_name), method_name##_static } \ |
| 66 , | 66 , |
| 67 | 67 |
| 68 #define END_JS_STATIC_METHOD() \ | 68 #define END_JS_STATIC_METHOD() \ |
| 69 { 0, 0 } \ | 69 { 0, 0 } \ |
| 70 } \ | 70 } \ |
| 71 ; // NOLINT | 71 ; // NOLINT |
| 72 | 72 |
| 73 template <class C, | 73 template <class C, bool (C::*M)(IJS_Context*, CJS_PropValue&, CFX_WideString&)> |
| 74 FX_BOOL (C::*M)(IJS_Context*, CJS_PropValue&, CFX_WideString&)> | |
| 75 void JSPropGetter(const char* prop_name_string, | 74 void JSPropGetter(const char* prop_name_string, |
| 76 const char* class_name_string, | 75 const char* class_name_string, |
| 77 v8::Local<v8::String> property, | 76 v8::Local<v8::String> property, |
| 78 const v8::PropertyCallbackInfo<v8::Value>& info) { | 77 const v8::PropertyCallbackInfo<v8::Value>& info) { |
| 79 CJS_Runtime* pRuntime = | 78 CJS_Runtime* pRuntime = |
| 80 CJS_Runtime::CurrentRuntimeFromIsolate(info.GetIsolate()); | 79 CJS_Runtime::CurrentRuntimeFromIsolate(info.GetIsolate()); |
| 81 if (!pRuntime) | 80 if (!pRuntime) |
| 82 return; | 81 return; |
| 83 CJS_Object* pJSObj = | 82 CJS_Object* pJSObj = |
| 84 static_cast<CJS_Object*>(pRuntime->GetObjectPrivate(info.Holder())); | 83 static_cast<CJS_Object*>(pRuntime->GetObjectPrivate(info.Holder())); |
| 85 C* pObj = reinterpret_cast<C*>(pJSObj->GetEmbedObject()); | 84 C* pObj = reinterpret_cast<C*>(pJSObj->GetEmbedObject()); |
| 86 CFX_WideString sError; | 85 CFX_WideString sError; |
| 87 CJS_PropValue value(pRuntime); | 86 CJS_PropValue value(pRuntime); |
| 88 value.StartGetting(); | 87 value.StartGetting(); |
| 89 if (!(pObj->*M)(pRuntime->GetCurrentContext(), value, sError)) { | 88 if (!(pObj->*M)(pRuntime->GetCurrentContext(), value, sError)) { |
| 90 pRuntime->Error( | 89 pRuntime->Error( |
| 91 JSFormatErrorString(class_name_string, prop_name_string, sError)); | 90 JSFormatErrorString(class_name_string, prop_name_string, sError)); |
| 92 return; | 91 return; |
| 93 } | 92 } |
| 94 info.GetReturnValue().Set(value.GetJSValue()->ToV8Value(pRuntime)); | 93 info.GetReturnValue().Set(value.GetJSValue()->ToV8Value(pRuntime)); |
| 95 } | 94 } |
| 96 | 95 |
| 97 template <class C, | 96 template <class C, bool (C::*M)(IJS_Context*, CJS_PropValue&, CFX_WideString&)> |
| 98 FX_BOOL (C::*M)(IJS_Context*, CJS_PropValue&, CFX_WideString&)> | |
| 99 void JSPropSetter(const char* prop_name_string, | 97 void JSPropSetter(const char* prop_name_string, |
| 100 const char* class_name_string, | 98 const char* class_name_string, |
| 101 v8::Local<v8::String> property, | 99 v8::Local<v8::String> property, |
| 102 v8::Local<v8::Value> value, | 100 v8::Local<v8::Value> value, |
| 103 const v8::PropertyCallbackInfo<void>& info) { | 101 const v8::PropertyCallbackInfo<void>& info) { |
| 104 CJS_Runtime* pRuntime = | 102 CJS_Runtime* pRuntime = |
| 105 CJS_Runtime::CurrentRuntimeFromIsolate(info.GetIsolate()); | 103 CJS_Runtime::CurrentRuntimeFromIsolate(info.GetIsolate()); |
| 106 if (!pRuntime) | 104 if (!pRuntime) |
| 107 return; | 105 return; |
| 108 CJS_Object* pJSObj = | 106 CJS_Object* pJSObj = |
| (...skipping 16 matching lines...) Expand all Loading... |
| 125 property, info); \ | 123 property, info); \ |
| 126 } \ | 124 } \ |
| 127 static void set_##prop_name##_static( \ | 125 static void set_##prop_name##_static( \ |
| 128 v8::Local<v8::String> property, v8::Local<v8::Value> value, \ | 126 v8::Local<v8::String> property, v8::Local<v8::Value> value, \ |
| 129 const v8::PropertyCallbackInfo<void>& info) { \ | 127 const v8::PropertyCallbackInfo<void>& info) { \ |
| 130 JSPropSetter<class_name, &class_name::prop_name>(#prop_name, #class_name, \ | 128 JSPropSetter<class_name, &class_name::prop_name>(#prop_name, #class_name, \ |
| 131 property, value, info); \ | 129 property, value, info); \ |
| 132 } | 130 } |
| 133 | 131 |
| 134 template <class C, | 132 template <class C, |
| 135 FX_BOOL (C::*M)(IJS_Context*, | 133 bool (C::*M)(IJS_Context*, |
| 136 const std::vector<CJS_Value>&, | 134 const std::vector<CJS_Value>&, |
| 137 CJS_Value&, | 135 CJS_Value&, |
| 138 CFX_WideString&)> | 136 CFX_WideString&)> |
| 139 void JSMethod(const char* method_name_string, | 137 void JSMethod(const char* method_name_string, |
| 140 const char* class_name_string, | 138 const char* class_name_string, |
| 141 const v8::FunctionCallbackInfo<v8::Value>& info) { | 139 const v8::FunctionCallbackInfo<v8::Value>& info) { |
| 142 CJS_Runtime* pRuntime = | 140 CJS_Runtime* pRuntime = |
| 143 CJS_Runtime::CurrentRuntimeFromIsolate(info.GetIsolate()); | 141 CJS_Runtime::CurrentRuntimeFromIsolate(info.GetIsolate()); |
| 144 if (!pRuntime) | 142 if (!pRuntime) |
| 145 return; | 143 return; |
| 146 std::vector<CJS_Value> parameters; | 144 std::vector<CJS_Value> parameters; |
| 147 for (unsigned int i = 0; i < (unsigned int)info.Length(); i++) { | 145 for (unsigned int i = 0; i < (unsigned int)info.Length(); i++) { |
| 148 parameters.push_back(CJS_Value(pRuntime, info[i])); | 146 parameters.push_back(CJS_Value(pRuntime, info[i])); |
| (...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 350 v8::Local<v8::String> property, | 348 v8::Local<v8::String> property, |
| 351 const v8::PropertyCallbackInfo<v8::Integer>& info) { | 349 const v8::PropertyCallbackInfo<v8::Integer>& info) { |
| 352 CJS_Runtime* pRuntime = | 350 CJS_Runtime* pRuntime = |
| 353 CJS_Runtime::CurrentRuntimeFromIsolate(info.GetIsolate()); | 351 CJS_Runtime::CurrentRuntimeFromIsolate(info.GetIsolate()); |
| 354 v8::String::Utf8Value utf8_value(property); | 352 v8::String::Utf8Value utf8_value(property); |
| 355 CFX_WideString propname = CFX_WideString::FromUTF8( | 353 CFX_WideString propname = CFX_WideString::FromUTF8( |
| 356 CFX_ByteStringC(*utf8_value, utf8_value.length())); | 354 CFX_ByteStringC(*utf8_value, utf8_value.length())); |
| 357 CJS_Object* pJSObj = | 355 CJS_Object* pJSObj = |
| 358 static_cast<CJS_Object*>(pRuntime->GetObjectPrivate(info.Holder())); | 356 static_cast<CJS_Object*>(pRuntime->GetObjectPrivate(info.Holder())); |
| 359 Alt* pObj = reinterpret_cast<Alt*>(pJSObj->GetEmbedObject()); | 357 Alt* pObj = reinterpret_cast<Alt*>(pJSObj->GetEmbedObject()); |
| 360 FX_BOOL bRet = pObj->QueryProperty(propname.c_str()); | 358 bool bRet = pObj->QueryProperty(propname.c_str()); |
| 361 info.GetReturnValue().Set(bRet ? 4 : 0); | 359 info.GetReturnValue().Set(bRet ? 4 : 0); |
| 362 } | 360 } |
| 363 | 361 |
| 364 template <class Alt> | 362 template <class Alt> |
| 365 void JSSpecialPropGet(const char* class_name, | 363 void JSSpecialPropGet(const char* class_name, |
| 366 v8::Local<v8::String> property, | 364 v8::Local<v8::String> property, |
| 367 const v8::PropertyCallbackInfo<v8::Value>& info) { | 365 const v8::PropertyCallbackInfo<v8::Value>& info) { |
| 368 CJS_Runtime* pRuntime = | 366 CJS_Runtime* pRuntime = |
| 369 CJS_Runtime::CurrentRuntimeFromIsolate(info.GetIsolate()); | 367 CJS_Runtime::CurrentRuntimeFromIsolate(info.GetIsolate()); |
| 370 if (!pRuntime) | 368 if (!pRuntime) |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 426 CFX_ByteStringC(*utf8_value, utf8_value.length())); | 424 CFX_ByteStringC(*utf8_value, utf8_value.length())); |
| 427 CFX_WideString sError; | 425 CFX_WideString sError; |
| 428 if (!pObj->DelProperty(pRuntime->GetCurrentContext(), propname.c_str(), | 426 if (!pObj->DelProperty(pRuntime->GetCurrentContext(), propname.c_str(), |
| 429 sError)) { | 427 sError)) { |
| 430 CFX_ByteString cbName; | 428 CFX_ByteString cbName; |
| 431 cbName.Format("%s.%s", class_name, "DelProperty"); | 429 cbName.Format("%s.%s", class_name, "DelProperty"); |
| 432 // Probably a missing call to JSFX_Error(). | 430 // Probably a missing call to JSFX_Error(). |
| 433 } | 431 } |
| 434 } | 432 } |
| 435 | 433 |
| 436 template <FX_BOOL (*F)(IJS_Context*, | 434 template <bool (*F)(IJS_Context*, |
| 437 const std::vector<CJS_Value>&, | 435 const std::vector<CJS_Value>&, |
| 438 CJS_Value&, | 436 CJS_Value&, |
| 439 CFX_WideString&)> | 437 CFX_WideString&)> |
| 440 void JSGlobalFunc(const char* func_name_string, | 438 void JSGlobalFunc(const char* func_name_string, |
| 441 const v8::FunctionCallbackInfo<v8::Value>& info) { | 439 const v8::FunctionCallbackInfo<v8::Value>& info) { |
| 442 CJS_Runtime* pRuntime = | 440 CJS_Runtime* pRuntime = |
| 443 CJS_Runtime::CurrentRuntimeFromIsolate(info.GetIsolate()); | 441 CJS_Runtime::CurrentRuntimeFromIsolate(info.GetIsolate()); |
| 444 if (!pRuntime) | 442 if (!pRuntime) |
| 445 return; | 443 return; |
| 446 std::vector<CJS_Value> parameters; | 444 std::vector<CJS_Value> parameters; |
| 447 for (unsigned int i = 0; i < (unsigned int)info.Length(); i++) { | 445 for (unsigned int i = 0; i < (unsigned int)info.Length(); i++) { |
| 448 parameters.push_back(CJS_Value(pRuntime, info[i])); | 446 parameters.push_back(CJS_Value(pRuntime, info[i])); |
| 449 } | 447 } |
| (...skipping 26 matching lines...) Expand all Loading... |
| 476 #define IMPLEMENT_JS_STATIC_GLOBAL_FUN(js_class_name) \ | 474 #define IMPLEMENT_JS_STATIC_GLOBAL_FUN(js_class_name) \ |
| 477 void js_class_name::DefineJSObjects(CFXJS_Engine* pEngine) { \ | 475 void js_class_name::DefineJSObjects(CFXJS_Engine* pEngine) { \ |
| 478 for (size_t i = 0; i < FX_ArraySize(global_methods) - 1; ++i) { \ | 476 for (size_t i = 0; i < FX_ArraySize(global_methods) - 1; ++i) { \ |
| 479 pEngine->DefineGlobalMethod( \ | 477 pEngine->DefineGlobalMethod( \ |
| 480 js_class_name::global_methods[i].pName, \ | 478 js_class_name::global_methods[i].pName, \ |
| 481 js_class_name::global_methods[i].pMethodCall); \ | 479 js_class_name::global_methods[i].pMethodCall); \ |
| 482 } \ | 480 } \ |
| 483 } | 481 } |
| 484 | 482 |
| 485 #endif // FPDFSDK_JAVASCRIPT_JS_DEFINE_H_ | 483 #endif // FPDFSDK_JAVASCRIPT_JS_DEFINE_H_ |
| OLD | NEW |