| Index: fpdfsdk/src/jsapi/fxjs_v8.cpp
|
| diff --git a/fpdfsdk/src/jsapi/fxjs_v8.cpp b/fpdfsdk/src/jsapi/fxjs_v8.cpp
|
| index 70cdc2dc156ac926e3bdb105edf6c42a3f2e2916..4715d2a8d2430e48ab4b82c0b2e5c085547a175d 100644
|
| --- a/fpdfsdk/src/jsapi/fxjs_v8.cpp
|
| +++ b/fpdfsdk/src/jsapi/fxjs_v8.cpp
|
| @@ -52,11 +52,10 @@ class CFXJS_ObjDefinition {
|
| FXJSOBJTYPE eObjType,
|
| FXJS_CONSTRUCTOR pConstructor,
|
| FXJS_DESTRUCTOR pDestructor)
|
| - : objName(sObjName),
|
| - objType(eObjType),
|
| + : m_ObjName(sObjName),
|
| + m_ObjType(eObjType),
|
| m_pConstructor(pConstructor),
|
| m_pDestructor(pDestructor),
|
| - m_bSetAsGlobalObject(FALSE),
|
| m_pIsolate(isolate) {
|
| v8::Isolate::Scope isolate_scope(isolate);
|
| v8::HandleScope handle_scope(isolate);
|
| @@ -67,11 +66,6 @@ class CFXJS_ObjDefinition {
|
|
|
| v8::Local<v8::Signature> sig = v8::Signature::New(isolate, fun);
|
| m_Signature.Reset(isolate, sig);
|
| -
|
| - // Document as the global object.
|
| - if (FXSYS_wcscmp(sObjName, L"Document") == 0) {
|
| - m_bSetAsGlobalObject = TRUE;
|
| - }
|
| }
|
|
|
| int AssignID() {
|
| @@ -92,11 +86,10 @@ class CFXJS_ObjDefinition {
|
| return scope.Escape(m_Signature.Get(m_pIsolate));
|
| }
|
|
|
| - const wchar_t* objName;
|
| - const FXJSOBJTYPE objType;
|
| + const wchar_t* const m_ObjName;
|
| + const FXJSOBJTYPE m_ObjType;
|
| const FXJS_CONSTRUCTOR m_pConstructor;
|
| const FXJS_DESTRUCTOR m_pDestructor;
|
| - FX_BOOL m_bSetAsGlobalObject;
|
|
|
| v8::Isolate* m_pIsolate;
|
| v8::Global<v8::FunctionTemplate> m_FunctionTemplate;
|
| @@ -109,10 +102,9 @@ static v8::Local<v8::ObjectTemplate> GetGlobalObjectTemplate(
|
| int maxID = CFXJS_ObjDefinition::MaxID(pIsolate);
|
| for (int i = 0; i < maxID; ++i) {
|
| CFXJS_ObjDefinition* pObjDef = CFXJS_ObjDefinition::ForID(pIsolate, i);
|
| - if (pObjDef->m_bSetAsGlobalObject)
|
| + if (pObjDef->m_ObjType == FXJSOBJTYPE_GLOBAL)
|
| return pObjDef->GetInstanceTemplate();
|
| }
|
| -
|
| if (!g_DefaultGlobalObjectTemplate) {
|
| g_DefaultGlobalObjectTemplate = new v8::Global<v8::ObjectTemplate>;
|
| g_DefaultGlobalObjectTemplate->Reset(pIsolate,
|
| @@ -299,36 +291,31 @@ void FXJS_InitializeRuntime(v8::Isolate* pIsolate,
|
| int maxID = CFXJS_ObjDefinition::MaxID(pIsolate);
|
| for (int i = 0; i < maxID; ++i) {
|
| CFXJS_ObjDefinition* pObjDef = CFXJS_ObjDefinition::ForID(pIsolate, i);
|
| - CFX_WideString ws = CFX_WideString(pObjDef->objName);
|
| - CFX_ByteString bs = ws.UTF8Encode();
|
| - v8::Local<v8::String> objName =
|
| + CFX_ByteString bs = CFX_WideString(pObjDef->m_ObjName).UTF8Encode();
|
| + v8::Local<v8::String> m_ObjName =
|
| v8::String::NewFromUtf8(pIsolate, bs.c_str(),
|
| v8::NewStringType::kNormal,
|
| bs.GetLength()).ToLocalChecked();
|
|
|
| - if (pObjDef->objType == FXJS_DYNAMIC) {
|
| - // Document is set as global object, need to construct it first.
|
| - if (ws.Equal(L"Document")) {
|
| - v8Context->Global()
|
| - ->GetPrototype()
|
| - ->ToObject(v8Context)
|
| - .ToLocalChecked()
|
| - ->SetAlignedPointerInInternalField(0, new CFXJS_PrivateData(i));
|
| -
|
| - if (pObjDef->m_pConstructor) {
|
| - pObjDef->m_pConstructor(context, v8Context->Global()
|
| - ->GetPrototype()
|
| - ->ToObject(v8Context)
|
| - .ToLocalChecked(),
|
| - v8Context->Global()
|
| - ->GetPrototype()
|
| - ->ToObject(v8Context)
|
| - .ToLocalChecked());
|
| - }
|
| - }
|
| - } else {
|
| + if (pObjDef->m_ObjType == FXJSOBJTYPE_GLOBAL) {
|
| + v8Context->Global()
|
| + ->GetPrototype()
|
| + ->ToObject(v8Context)
|
| + .ToLocalChecked()
|
| + ->SetAlignedPointerInInternalField(0, new CFXJS_PrivateData(i));
|
| +
|
| + if (pObjDef->m_pConstructor)
|
| + pObjDef->m_pConstructor(context, v8Context->Global()
|
| + ->GetPrototype()
|
| + ->ToObject(v8Context)
|
| + .ToLocalChecked(),
|
| + v8Context->Global()
|
| + ->GetPrototype()
|
| + ->ToObject(v8Context)
|
| + .ToLocalChecked());
|
| + } else if (pObjDef->m_ObjType == FXJSOBJTYPE_STATIC) {
|
| v8::Local<v8::Object> obj = FXJS_NewFxDynamicObj(pIsolate, context, i);
|
| - v8Context->Global()->Set(v8Context, objName, obj).FromJust();
|
| + v8Context->Global()->Set(v8Context, m_ObjName, obj).FromJust();
|
| pObjDef->m_StaticObj.Reset(pIsolate, obj);
|
| }
|
| }
|
| @@ -467,20 +454,6 @@ v8::Isolate* FXJS_GetRuntime(v8::Local<v8::Object> pObj) {
|
| return context->GetIsolate();
|
| }
|
|
|
| -int FXJS_GetObjDefnID(v8::Isolate* pIsolate, const wchar_t* pObjName) {
|
| - v8::Isolate::Scope isolate_scope(pIsolate);
|
| - if (!FXJS_PerIsolateData::Get(pIsolate))
|
| - return -1;
|
| -
|
| - int maxID = CFXJS_ObjDefinition::MaxID(pIsolate);
|
| - for (int i = 0; i < maxID; ++i) {
|
| - CFXJS_ObjDefinition* pObjDef = CFXJS_ObjDefinition::ForID(pIsolate, i);
|
| - if (FXSYS_wcscmp(pObjDef->objName, pObjName) == 0)
|
| - return i;
|
| - }
|
| - return -1;
|
| -}
|
| -
|
| void FXJS_Error(v8::Isolate* pIsolate, const CFX_WideString& message) {
|
| // Conversion from pdfium's wchar_t wide-strings to v8's uint16_t
|
| // wide-strings isn't handled by v8, so use UTF8 as a common
|
|
|