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

Side by Side Diff: fpdfsdk/include/javascript/JS_Define.h

Issue 1367813003: Introduce kPerIsolateDataIndex and tidy JS_Define.h (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: SetAlignedPointerInEmbedderData Created 5 years, 2 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 unified diff | Download patch
« no previous file with comments | « no previous file | fpdfsdk/include/jsapi/fxjs_v8.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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_INCLUDE_JAVASCRIPT_JS_DEFINE_H_ 7 #ifndef FPDFSDK_INCLUDE_JAVASCRIPT_JS_DEFINE_H_
8 #define FPDFSDK_INCLUDE_JAVASCRIPT_JS_DEFINE_H_ 8 #define FPDFSDK_INCLUDE_JAVASCRIPT_JS_DEFINE_H_
9 9
10 #include "../jsapi/fxjs_v8.h" 10 #include "../jsapi/fxjs_v8.h"
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
74 74
75 template <class C, 75 template <class C,
76 FX_BOOL (C::*M)(IFXJS_Context* cc, 76 FX_BOOL (C::*M)(IFXJS_Context* cc,
77 CJS_PropValue& vp, 77 CJS_PropValue& vp,
78 CFX_WideString& sError)> 78 CFX_WideString& sError)>
79 void JSPropGetter(const char* prop_name_string, 79 void JSPropGetter(const char* prop_name_string,
80 const char* class_name_string, 80 const char* class_name_string,
81 v8::Local<v8::String> property, 81 v8::Local<v8::String> property,
82 const v8::PropertyCallbackInfo<v8::Value>& info) { 82 const v8::PropertyCallbackInfo<v8::Value>& info) {
83 v8::Isolate* isolate = info.GetIsolate(); 83 v8::Isolate* isolate = info.GetIsolate();
84 v8::Local<v8::Context> context = isolate->GetCurrentContext(); 84 IFXJS_Runtime* pRuntime = FXJS_GetRuntimeFromIsolate(isolate);
85 v8::Local<v8::Value> v = context->GetEmbedderData(1); 85 if (!pRuntime)
86 if (v.IsEmpty())
87 return; 86 return;
88 v8::Local<v8::External> field = v8::Local<v8::External>::Cast(v);
89 IFXJS_Runtime* pRuntime = (IFXJS_Runtime*)field->Value();
90 IFXJS_Context* pContext = pRuntime->GetCurrentContext(); 87 IFXJS_Context* pContext = pRuntime->GetCurrentContext();
91 CJS_Object* pJSObj = (CJS_Object*)FXJS_GetPrivate(isolate, info.Holder()); 88 CJS_Object* pJSObj = (CJS_Object*)FXJS_GetPrivate(isolate, info.Holder());
92 C* pObj = reinterpret_cast<C*>(pJSObj->GetEmbedObject()); 89 C* pObj = reinterpret_cast<C*>(pJSObj->GetEmbedObject());
93 CFX_WideString sError; 90 CFX_WideString sError;
94 CJS_PropValue value(isolate); 91 CJS_PropValue value(isolate);
95 value.StartGetting(); 92 value.StartGetting();
96 if (!(pObj->*M)(pContext, value, sError)) { 93 if (!(pObj->*M)(pContext, value, sError)) {
97 FXJS_Error(isolate, JSFormatErrorString(class_name_string, prop_name_string, 94 FXJS_Error(isolate, JSFormatErrorString(class_name_string, prop_name_string,
98 sError)); 95 sError));
99 return; 96 return;
100 } 97 }
101 info.GetReturnValue().Set((v8::Local<v8::Value>)value); 98 info.GetReturnValue().Set((v8::Local<v8::Value>)value);
102 } 99 }
103 100
104 template <class C, 101 template <class C,
105 FX_BOOL (C::*M)(IFXJS_Context* cc, 102 FX_BOOL (C::*M)(IFXJS_Context* cc,
106 CJS_PropValue& vp, 103 CJS_PropValue& vp,
107 CFX_WideString& sError)> 104 CFX_WideString& sError)>
108 void JSPropSetter(const char* prop_name_string, 105 void JSPropSetter(const char* prop_name_string,
109 const char* class_name_string, 106 const char* class_name_string,
110 v8::Local<v8::String> property, 107 v8::Local<v8::String> property,
111 v8::Local<v8::Value> value, 108 v8::Local<v8::Value> value,
112 const v8::PropertyCallbackInfo<void>& info) { 109 const v8::PropertyCallbackInfo<void>& info) {
113 v8::Isolate* isolate = info.GetIsolate(); 110 v8::Isolate* isolate = info.GetIsolate();
114 v8::Local<v8::Context> context = isolate->GetCurrentContext(); 111 IFXJS_Runtime* pRuntime = FXJS_GetRuntimeFromIsolate(isolate);
115 v8::Local<v8::Value> v = context->GetEmbedderData(1); 112 if (!pRuntime)
116 if (v.IsEmpty())
117 return; 113 return;
118 v8::Local<v8::External> field = v8::Local<v8::External>::Cast(v);
119 IFXJS_Runtime* pRuntime = (IFXJS_Runtime*)field->Value();
120 IFXJS_Context* pContext = pRuntime->GetCurrentContext(); 114 IFXJS_Context* pContext = pRuntime->GetCurrentContext();
121 CJS_Object* pJSObj = (CJS_Object*)FXJS_GetPrivate(isolate, info.Holder()); 115 CJS_Object* pJSObj = (CJS_Object*)FXJS_GetPrivate(isolate, info.Holder());
122 C* pObj = reinterpret_cast<C*>(pJSObj->GetEmbedObject()); 116 C* pObj = reinterpret_cast<C*>(pJSObj->GetEmbedObject());
123 CFX_WideString sError; 117 CFX_WideString sError;
124 CJS_PropValue propValue(CJS_Value(isolate, value, CJS_Value::VT_unknown)); 118 CJS_PropValue propValue(CJS_Value(isolate, value, CJS_Value::VT_unknown));
125 propValue.StartSetting(); 119 propValue.StartSetting();
126 if (!(pObj->*M)(pContext, propValue, sError)) { 120 if (!(pObj->*M)(pContext, propValue, sError)) {
127 FXJS_Error(isolate, JSFormatErrorString(class_name_string, prop_name_string, 121 FXJS_Error(isolate, JSFormatErrorString(class_name_string, prop_name_string,
128 sError)); 122 sError));
129 } 123 }
(...skipping 18 matching lines...) Expand all
148 142
149 template <class C, 143 template <class C,
150 FX_BOOL (C::*M)(IFXJS_Context* cc, 144 FX_BOOL (C::*M)(IFXJS_Context* cc,
151 const CJS_Parameters& params, 145 const CJS_Parameters& params,
152 CJS_Value& vRet, 146 CJS_Value& vRet,
153 CFX_WideString& sError)> 147 CFX_WideString& sError)>
154 void JSMethod(const char* method_name_string, 148 void JSMethod(const char* method_name_string,
155 const char* class_name_string, 149 const char* class_name_string,
156 const v8::FunctionCallbackInfo<v8::Value>& info) { 150 const v8::FunctionCallbackInfo<v8::Value>& info) {
157 v8::Isolate* isolate = info.GetIsolate(); 151 v8::Isolate* isolate = info.GetIsolate();
158 v8::Local<v8::Context> context = isolate->GetCurrentContext(); 152 IFXJS_Runtime* pRuntime = FXJS_GetRuntimeFromIsolate(isolate);
159 v8::Local<v8::Value> v = context->GetEmbedderData(1); 153 if (!pRuntime)
160 if (v.IsEmpty())
161 return; 154 return;
162 v8::Local<v8::External> field = v8::Local<v8::External>::Cast(v);
163 IFXJS_Runtime* pRuntime = (IFXJS_Runtime*)field->Value();
164 IFXJS_Context* cc = pRuntime->GetCurrentContext(); 155 IFXJS_Context* cc = pRuntime->GetCurrentContext();
165 CJS_Parameters parameters; 156 CJS_Parameters parameters;
166 for (unsigned int i = 0; i < (unsigned int)info.Length(); i++) { 157 for (unsigned int i = 0; i < (unsigned int)info.Length(); i++) {
167 parameters.push_back(CJS_Value(isolate, info[i], CJS_Value::VT_unknown)); 158 parameters.push_back(CJS_Value(isolate, info[i], CJS_Value::VT_unknown));
168 } 159 }
169 CJS_Value valueRes(isolate); 160 CJS_Value valueRes(isolate);
170 CJS_Object* pJSObj = (CJS_Object*)FXJS_GetPrivate(isolate, info.Holder()); 161 CJS_Object* pJSObj = (CJS_Object*)FXJS_GetPrivate(isolate, info.Holder());
171 C* pObj = reinterpret_cast<C*>(pJSObj->GetEmbedObject()); 162 C* pObj = reinterpret_cast<C*>(pJSObj->GetEmbedObject());
172 CFX_WideString sError; 163 CFX_WideString sError;
173 if (!(pObj->*M)(cc, parameters, valueRes, sError)) { 164 if (!(pObj->*M)(cc, parameters, valueRes, sError)) {
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
279 Alt* pObj = reinterpret_cast<Alt*>(pJSObj->GetEmbedObject()); 270 Alt* pObj = reinterpret_cast<Alt*>(pJSObj->GetEmbedObject());
280 FX_BOOL bRet = pObj->QueryProperty(propname.c_str()); 271 FX_BOOL bRet = pObj->QueryProperty(propname.c_str());
281 info.GetReturnValue().Set(bRet ? 4 : 0); 272 info.GetReturnValue().Set(bRet ? 4 : 0);
282 } 273 }
283 274
284 template <class Alt> 275 template <class Alt>
285 void JSSpecialPropGet(const char* class_name, 276 void JSSpecialPropGet(const char* class_name,
286 v8::Local<v8::String> property, 277 v8::Local<v8::String> property,
287 const v8::PropertyCallbackInfo<v8::Value>& info) { 278 const v8::PropertyCallbackInfo<v8::Value>& info) {
288 v8::Isolate* isolate = info.GetIsolate(); 279 v8::Isolate* isolate = info.GetIsolate();
289 v8::Local<v8::Context> context = isolate->GetCurrentContext(); 280 IFXJS_Runtime* pRuntime = FXJS_GetRuntimeFromIsolate(isolate);
290 v8::Local<v8::Value> v = context->GetEmbedderData(1); 281 if (!pRuntime)
291 if (v.IsEmpty())
292 return; 282 return;
293 v8::Local<v8::External> field = v8::Local<v8::External>::Cast(v);
294 IFXJS_Runtime* pRuntime = (IFXJS_Runtime*)field->Value();
295 IFXJS_Context* pRuntimeContext = pRuntime->GetCurrentContext(); 283 IFXJS_Context* pRuntimeContext = pRuntime->GetCurrentContext();
296 CJS_Object* pJSObj = 284 CJS_Object* pJSObj =
297 reinterpret_cast<CJS_Object*>(FXJS_GetPrivate(isolate, info.Holder())); 285 reinterpret_cast<CJS_Object*>(FXJS_GetPrivate(isolate, info.Holder()));
298 Alt* pObj = reinterpret_cast<Alt*>(pJSObj->GetEmbedObject()); 286 Alt* pObj = reinterpret_cast<Alt*>(pJSObj->GetEmbedObject());
299 v8::String::Utf8Value utf8_value(property); 287 v8::String::Utf8Value utf8_value(property);
300 CFX_WideString propname = 288 CFX_WideString propname =
301 CFX_WideString::FromUTF8(*utf8_value, utf8_value.length()); 289 CFX_WideString::FromUTF8(*utf8_value, utf8_value.length());
302 CFX_WideString sError; 290 CFX_WideString sError;
303 CJS_PropValue value(isolate); 291 CJS_PropValue value(isolate);
304 value.StartGetting(); 292 value.StartGetting();
305 if (!pObj->DoProperty(pRuntimeContext, propname.c_str(), value, sError)) { 293 if (!pObj->DoProperty(pRuntimeContext, propname.c_str(), value, sError)) {
306 FXJS_Error(isolate, JSFormatErrorString(class_name, "GetProperty", sError)); 294 FXJS_Error(isolate, JSFormatErrorString(class_name, "GetProperty", sError));
307 return; 295 return;
308 } 296 }
309 info.GetReturnValue().Set((v8::Local<v8::Value>)value); 297 info.GetReturnValue().Set((v8::Local<v8::Value>)value);
310 } 298 }
311 299
312 template <class Alt> 300 template <class Alt>
313 void JSSpecialPropPut(const char* class_name, 301 void JSSpecialPropPut(const char* class_name,
314 v8::Local<v8::String> property, 302 v8::Local<v8::String> property,
315 v8::Local<v8::Value> value, 303 v8::Local<v8::Value> value,
316 const v8::PropertyCallbackInfo<v8::Value>& info) { 304 const v8::PropertyCallbackInfo<v8::Value>& info) {
317 v8::Isolate* isolate = info.GetIsolate(); 305 v8::Isolate* isolate = info.GetIsolate();
318 v8::Local<v8::Context> context = isolate->GetCurrentContext(); 306 IFXJS_Runtime* pRuntime = FXJS_GetRuntimeFromIsolate(isolate);
319 v8::Local<v8::Value> v = context->GetEmbedderData(1); 307 if (!pRuntime)
320 if (v.IsEmpty())
321 return; 308 return;
322 v8::Local<v8::External> field = v8::Local<v8::External>::Cast(v);
323 IFXJS_Runtime* pRuntime = (IFXJS_Runtime*)field->Value();
324 IFXJS_Context* pRuntimeContext = pRuntime->GetCurrentContext(); 309 IFXJS_Context* pRuntimeContext = pRuntime->GetCurrentContext();
325 CJS_Object* pJSObj = 310 CJS_Object* pJSObj =
326 reinterpret_cast<CJS_Object*>(FXJS_GetPrivate(isolate, info.Holder())); 311 reinterpret_cast<CJS_Object*>(FXJS_GetPrivate(isolate, info.Holder()));
327 Alt* pObj = reinterpret_cast<Alt*>(pJSObj->GetEmbedObject()); 312 Alt* pObj = reinterpret_cast<Alt*>(pJSObj->GetEmbedObject());
328 v8::String::Utf8Value utf8_value(property); 313 v8::String::Utf8Value utf8_value(property);
329 CFX_WideString propname = 314 CFX_WideString propname =
330 CFX_WideString::FromUTF8(*utf8_value, utf8_value.length()); 315 CFX_WideString::FromUTF8(*utf8_value, utf8_value.length());
331 CFX_WideString sError; 316 CFX_WideString sError;
332 CJS_PropValue PropValue(CJS_Value(isolate, value, CJS_Value::VT_unknown)); 317 CJS_PropValue PropValue(CJS_Value(isolate, value, CJS_Value::VT_unknown));
333 PropValue.StartSetting(); 318 PropValue.StartSetting();
334 if (!pObj->DoProperty(pRuntimeContext, propname.c_str(), PropValue, sError)) { 319 if (!pObj->DoProperty(pRuntimeContext, propname.c_str(), PropValue, sError)) {
335 FXJS_Error(isolate, JSFormatErrorString(class_name, "PutProperty", sError)); 320 FXJS_Error(isolate, JSFormatErrorString(class_name, "PutProperty", sError));
336 } 321 }
337 } 322 }
338 323
339 template <class Alt> 324 template <class Alt>
340 void JSSpecialPropDel(const char* class_name, 325 void JSSpecialPropDel(const char* class_name,
341 v8::Local<v8::String> property, 326 v8::Local<v8::String> property,
342 const v8::PropertyCallbackInfo<v8::Boolean>& info) { 327 const v8::PropertyCallbackInfo<v8::Boolean>& info) {
343 v8::Isolate* isolate = info.GetIsolate(); 328 v8::Isolate* isolate = info.GetIsolate();
344 v8::Local<v8::Context> context = isolate->GetCurrentContext(); 329 IFXJS_Runtime* pRuntime = FXJS_GetRuntimeFromIsolate(isolate);
345 v8::Local<v8::Value> v = context->GetEmbedderData(1); 330 if (!pRuntime)
346 if (v.IsEmpty())
347 return; 331 return;
348 v8::Local<v8::External> field = v8::Local<v8::External>::Cast(v);
349 IFXJS_Runtime* pRuntime = (IFXJS_Runtime*)field->Value();
350 IFXJS_Context* pRuntimeContext = pRuntime->GetCurrentContext(); 332 IFXJS_Context* pRuntimeContext = pRuntime->GetCurrentContext();
351 CJS_Object* pJSObj = 333 CJS_Object* pJSObj =
352 reinterpret_cast<CJS_Object*>(FXJS_GetPrivate(isolate, info.Holder())); 334 reinterpret_cast<CJS_Object*>(FXJS_GetPrivate(isolate, info.Holder()));
353 Alt* pObj = reinterpret_cast<Alt*>(pJSObj->GetEmbedObject()); 335 Alt* pObj = reinterpret_cast<Alt*>(pJSObj->GetEmbedObject());
354 v8::String::Utf8Value utf8_value(property); 336 v8::String::Utf8Value utf8_value(property);
355 CFX_WideString propname = 337 CFX_WideString propname =
356 CFX_WideString::FromUTF8(*utf8_value, utf8_value.length()); 338 CFX_WideString::FromUTF8(*utf8_value, utf8_value.length());
357 CFX_WideString sError; 339 CFX_WideString sError;
358 if (!pObj->DelProperty(pRuntimeContext, propname.c_str(), sError)) { 340 if (!pObj->DelProperty(pRuntimeContext, propname.c_str(), sError)) {
359 CFX_ByteString cbName; 341 CFX_ByteString cbName;
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
447 /* ======================================== GLOBAL METHODS 429 /* ======================================== GLOBAL METHODS
448 * ============================================ */ 430 * ============================================ */
449 431
450 template <FX_BOOL (*F)(IFXJS_Context* cc, 432 template <FX_BOOL (*F)(IFXJS_Context* cc,
451 const CJS_Parameters& params, 433 const CJS_Parameters& params,
452 CJS_Value& vRet, 434 CJS_Value& vRet,
453 CFX_WideString& sError)> 435 CFX_WideString& sError)>
454 void JSGlobalFunc(const char* func_name_string, 436 void JSGlobalFunc(const char* func_name_string,
455 const v8::FunctionCallbackInfo<v8::Value>& info) { 437 const v8::FunctionCallbackInfo<v8::Value>& info) {
456 v8::Isolate* isolate = info.GetIsolate(); 438 v8::Isolate* isolate = info.GetIsolate();
457 v8::Local<v8::Context> context = isolate->GetCurrentContext(); 439 IFXJS_Runtime* pRuntime = FXJS_GetRuntimeFromIsolate(isolate);
458 v8::Local<v8::Value> v = context->GetEmbedderData(1); 440 if (!pRuntime)
459 if (v.IsEmpty())
460 return; 441 return;
461 v8::Local<v8::External> field = v8::Local<v8::External>::Cast(v);
462 IFXJS_Runtime* pRuntime = (IFXJS_Runtime*)field->Value();
463 IFXJS_Context* cc = pRuntime->GetCurrentContext(); 442 IFXJS_Context* cc = pRuntime->GetCurrentContext();
464 CJS_Parameters parameters; 443 CJS_Parameters parameters;
465 for (unsigned int i = 0; i < (unsigned int)info.Length(); i++) { 444 for (unsigned int i = 0; i < (unsigned int)info.Length(); i++) {
466 parameters.push_back(CJS_Value(isolate, info[i], CJS_Value::VT_unknown)); 445 parameters.push_back(CJS_Value(isolate, info[i], CJS_Value::VT_unknown));
467 } 446 }
468 CJS_Value valueRes(isolate); 447 CJS_Value valueRes(isolate);
469 CFX_WideString sError; 448 CFX_WideString sError;
470 if (!(*F)(cc, parameters, valueRes, sError)) { 449 if (!(*F)(cc, parameters, valueRes, sError)) {
471 FXJS_Error(isolate, JSFormatErrorString(func_name_string, nullptr, sError)); 450 FXJS_Error(isolate, JSFormatErrorString(func_name_string, nullptr, sError));
472 return; 451 return;
(...skipping 23 matching lines...) Expand all
496 for (int i = 0; i < FX_ArraySize(global_methods) - 1; ++i) { \ 475 for (int i = 0; i < FX_ArraySize(global_methods) - 1; ++i) { \
497 FXJS_DefineGlobalMethod(pIsolate, \ 476 FXJS_DefineGlobalMethod(pIsolate, \
498 js_class_name::global_methods[i].pName, \ 477 js_class_name::global_methods[i].pName, \
499 js_class_name::global_methods[i].pMethodCall); \ 478 js_class_name::global_methods[i].pMethodCall); \
500 } \ 479 } \
501 } 480 }
502 481
503 CJS_Value::Type GET_VALUE_TYPE(v8::Local<v8::Value> p); 482 CJS_Value::Type GET_VALUE_TYPE(v8::Local<v8::Value> p);
504 483
505 #endif // FPDFSDK_INCLUDE_JAVASCRIPT_JS_DEFINE_H_ 484 #endif // FPDFSDK_INCLUDE_JAVASCRIPT_JS_DEFINE_H_
OLDNEW
« no previous file with comments | « no previous file | fpdfsdk/include/jsapi/fxjs_v8.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698