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 #include "xfa/fxjse/class.h" | 7 #include "xfa/fxjse/class.h" |
8 | 8 |
9 #include "xfa/fxjse/cfxjse_arguments.h" | 9 #include "xfa/fxjse/cfxjse_arguments.h" |
10 #include "xfa/fxjse/context.h" | 10 #include "xfa/fxjse/context.h" |
11 #include "xfa/fxjse/scope_inline.h" | 11 #include "xfa/fxjse/scope_inline.h" |
12 #include "xfa/fxjse/util_inline.h" | 12 #include "xfa/fxjse/util_inline.h" |
13 #include "xfa/fxjse/value.h" | 13 #include "xfa/fxjse/value.h" |
14 | 14 |
15 static void FXJSE_V8ConstructorCallback_Wrapper( | 15 static void FXJSE_V8ConstructorCallback_Wrapper( |
16 const v8::FunctionCallbackInfo<v8::Value>& info); | 16 const v8::FunctionCallbackInfo<v8::Value>& info); |
17 static void FXJSE_V8FunctionCallback_Wrapper( | 17 static void FXJSE_V8FunctionCallback_Wrapper( |
18 const v8::FunctionCallbackInfo<v8::Value>& info); | 18 const v8::FunctionCallbackInfo<v8::Value>& info); |
19 static void FXJSE_V8GetterCallback_Wrapper( | 19 static void FXJSE_V8GetterCallback_Wrapper( |
20 v8::Local<v8::String> property, | 20 v8::Local<v8::String> property, |
21 const v8::PropertyCallbackInfo<v8::Value>& info); | 21 const v8::PropertyCallbackInfo<v8::Value>& info); |
22 static void FXJSE_V8SetterCallback_Wrapper( | 22 static void FXJSE_V8SetterCallback_Wrapper( |
23 v8::Local<v8::String> property, | 23 v8::Local<v8::String> property, |
24 v8::Local<v8::Value> value, | 24 v8::Local<v8::Value> value, |
25 const v8::PropertyCallbackInfo<void>& info); | 25 const v8::PropertyCallbackInfo<void>& info); |
26 | 26 |
27 void FXJSE_DefineFunctions(FXJSE_HCONTEXT hContext, | |
28 const FXJSE_FUNCTION* lpFunctions, | |
29 int nNum) { | |
30 CFXJSE_Context* lpContext = reinterpret_cast<CFXJSE_Context*>(hContext); | |
31 ASSERT(lpContext); | |
32 CFXJSE_ScopeUtil_IsolateHandleContext scope(lpContext); | |
33 v8::Isolate* pIsolate = lpContext->GetRuntime(); | |
34 v8::Local<v8::Object> hGlobalObject = | |
35 FXJSE_GetGlobalObjectFromContext(scope.GetLocalContext()); | |
36 for (int32_t i = 0; i < nNum; i++) { | |
37 v8::Maybe<bool> maybe_success = hGlobalObject->DefineOwnProperty( | |
38 scope.GetLocalContext(), | |
39 v8::String::NewFromUtf8(pIsolate, lpFunctions[i].name), | |
40 v8::Function::New( | |
41 pIsolate, FXJSE_V8FunctionCallback_Wrapper, | |
42 v8::External::New(pIsolate, | |
43 const_cast<FXJSE_FUNCTION*>(lpFunctions + i))), | |
44 static_cast<v8::PropertyAttribute>(v8::ReadOnly | v8::DontDelete)); | |
45 if (!maybe_success.FromMaybe(false)) | |
46 return; | |
47 } | |
48 } | |
49 | |
50 FXJSE_HCLASS FXJSE_DefineClass(FXJSE_HCONTEXT hContext, | 27 FXJSE_HCLASS FXJSE_DefineClass(FXJSE_HCONTEXT hContext, |
51 const FXJSE_CLASS* lpClass) { | 28 const FXJSE_CLASS* lpClass) { |
52 CFXJSE_Context* lpContext = reinterpret_cast<CFXJSE_Context*>(hContext); | 29 CFXJSE_Context* lpContext = reinterpret_cast<CFXJSE_Context*>(hContext); |
53 ASSERT(lpContext); | 30 ASSERT(lpContext); |
54 return reinterpret_cast<FXJSE_HCLASS>( | 31 return reinterpret_cast<FXJSE_HCLASS>( |
55 CFXJSE_Class::Create(lpContext, lpClass, FALSE)); | 32 CFXJSE_Class::Create(lpContext, lpClass, FALSE)); |
56 } | 33 } |
57 | 34 |
58 FXJSE_HCLASS FXJSE_GetClass(FXJSE_HCONTEXT hContext, | |
59 const CFX_ByteStringC& szName) { | |
60 return reinterpret_cast<FXJSE_HCLASS>(CFXJSE_Class::GetClassFromContext( | |
61 reinterpret_cast<CFXJSE_Context*>(hContext), szName)); | |
62 } | |
63 | |
64 static void FXJSE_V8FunctionCallback_Wrapper( | 35 static void FXJSE_V8FunctionCallback_Wrapper( |
65 const v8::FunctionCallbackInfo<v8::Value>& info) { | 36 const v8::FunctionCallbackInfo<v8::Value>& info) { |
66 const FXJSE_FUNCTION* lpFunctionInfo = | 37 const FXJSE_FUNCTION* lpFunctionInfo = |
67 static_cast<FXJSE_FUNCTION*>(info.Data().As<v8::External>()->Value()); | 38 static_cast<FXJSE_FUNCTION*>(info.Data().As<v8::External>()->Value()); |
68 if (!lpFunctionInfo) { | 39 if (!lpFunctionInfo) { |
69 return; | 40 return; |
70 } | 41 } |
71 CFX_ByteStringC szFunctionName(lpFunctionInfo->name); | 42 CFX_ByteStringC szFunctionName(lpFunctionInfo->name); |
72 CFXJSE_Value* lpThisValue = CFXJSE_Value::Create(info.GetIsolate()); | 43 CFXJSE_Value* lpThisValue = CFXJSE_Value::Create(info.GetIsolate()); |
73 lpThisValue->ForceSetValue(info.This()); | 44 lpThisValue->ForceSetValue(info.This()); |
(...skipping 266 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
340 CFXJSE_Class* CFXJSE_Class::GetClassFromContext(CFXJSE_Context* pContext, | 311 CFXJSE_Class* CFXJSE_Class::GetClassFromContext(CFXJSE_Context* pContext, |
341 const CFX_ByteStringC& szName) { | 312 const CFX_ByteStringC& szName) { |
342 for (int count = pContext->m_rgClasses.GetSize(), i = 0; i < count; i++) { | 313 for (int count = pContext->m_rgClasses.GetSize(), i = 0; i < count; i++) { |
343 CFXJSE_Class* pClass = pContext->m_rgClasses[i]; | 314 CFXJSE_Class* pClass = pContext->m_rgClasses[i]; |
344 if (pClass->m_szClassName == szName) { | 315 if (pClass->m_szClassName == szName) { |
345 return pClass; | 316 return pClass; |
346 } | 317 } |
347 } | 318 } |
348 return NULL; | 319 return NULL; |
349 } | 320 } |
OLD | NEW |