| Index: fpdfsdk/javascript/JS_Define.h
 | 
| diff --git a/fpdfsdk/javascript/JS_Define.h b/fpdfsdk/javascript/JS_Define.h
 | 
| index b9ae1408f6e2b6c6e1e87c810245afaefc640259..770f9f5459750d6e6e80c948b0eebc924c225511 100644
 | 
| --- a/fpdfsdk/javascript/JS_Define.h
 | 
| +++ b/fpdfsdk/javascript/JS_Define.h
 | 
| @@ -76,23 +76,22 @@ void JSPropGetter(const char* prop_name_string,
 | 
|                    const char* class_name_string,
 | 
|                    v8::Local<v8::String> property,
 | 
|                    const v8::PropertyCallbackInfo<v8::Value>& info) {
 | 
| -  v8::Isolate* isolate = info.GetIsolate();
 | 
|    CJS_Runtime* pRuntime =
 | 
| -      static_cast<CJS_Runtime*>(FXJS_GetCurrentEngineFromIsolate(isolate));
 | 
| +      CJS_Runtime::CurrentRuntimeFromIsolate(info.GetIsolate());
 | 
|    if (!pRuntime)
 | 
|      return;
 | 
| -  IJS_Context* pContext = pRuntime->GetCurrentContext();
 | 
| -  CJS_Object* pJSObj = (CJS_Object*)FXJS_GetPrivate(isolate, info.Holder());
 | 
| +  CJS_Object* pJSObj =
 | 
| +      static_cast<CJS_Object*>(pRuntime->GetObjectPrivate(info.Holder()));
 | 
|    C* pObj = reinterpret_cast<C*>(pJSObj->GetEmbedObject());
 | 
|    CFX_WideString sError;
 | 
|    CJS_PropValue value(pRuntime);
 | 
|    value.StartGetting();
 | 
| -  if (!(pObj->*M)(pContext, value, sError)) {
 | 
| -    FXJS_Error(isolate, JSFormatErrorString(class_name_string, prop_name_string,
 | 
| -                                            sError));
 | 
| +  if (!(pObj->*M)(pRuntime->GetCurrentContext(), value, sError)) {
 | 
| +    pRuntime->Error(
 | 
| +        JSFormatErrorString(class_name_string, prop_name_string, sError));
 | 
|      return;
 | 
|    }
 | 
| -  info.GetReturnValue().Set(value.GetJSValue()->ToV8Value(isolate));
 | 
| +  info.GetReturnValue().Set(value.GetJSValue()->ToV8Value(pRuntime));
 | 
|  }
 | 
|  
 | 
|  template <class C,
 | 
| @@ -102,20 +101,19 @@ void JSPropSetter(const char* prop_name_string,
 | 
|                    v8::Local<v8::String> property,
 | 
|                    v8::Local<v8::Value> value,
 | 
|                    const v8::PropertyCallbackInfo<void>& info) {
 | 
| -  v8::Isolate* isolate = info.GetIsolate();
 | 
|    CJS_Runtime* pRuntime =
 | 
| -      static_cast<CJS_Runtime*>(FXJS_GetCurrentEngineFromIsolate(isolate));
 | 
| +      CJS_Runtime::CurrentRuntimeFromIsolate(info.GetIsolate());
 | 
|    if (!pRuntime)
 | 
|      return;
 | 
| -  IJS_Context* pContext = pRuntime->GetCurrentContext();
 | 
| -  CJS_Object* pJSObj = (CJS_Object*)FXJS_GetPrivate(isolate, info.Holder());
 | 
| +  CJS_Object* pJSObj =
 | 
| +      static_cast<CJS_Object*>(pRuntime->GetObjectPrivate(info.Holder()));
 | 
|    C* pObj = reinterpret_cast<C*>(pJSObj->GetEmbedObject());
 | 
|    CFX_WideString sError;
 | 
|    CJS_PropValue propValue(pRuntime, CJS_Value(pRuntime, value));
 | 
|    propValue.StartSetting();
 | 
| -  if (!(pObj->*M)(pContext, propValue, sError)) {
 | 
| -    FXJS_Error(isolate, JSFormatErrorString(class_name_string, prop_name_string,
 | 
| -                                            sError));
 | 
| +  if (!(pObj->*M)(pRuntime->GetCurrentContext(), propValue, sError)) {
 | 
| +    pRuntime->Error(
 | 
| +        JSFormatErrorString(class_name_string, prop_name_string, sError));
 | 
|    }
 | 
|  }
 | 
|  
 | 
| @@ -141,26 +139,26 @@ template <class C,
 | 
|  void JSMethod(const char* method_name_string,
 | 
|                const char* class_name_string,
 | 
|                const v8::FunctionCallbackInfo<v8::Value>& info) {
 | 
| -  v8::Isolate* isolate = info.GetIsolate();
 | 
|    CJS_Runtime* pRuntime =
 | 
| -      static_cast<CJS_Runtime*>(FXJS_GetCurrentEngineFromIsolate(isolate));
 | 
| +      CJS_Runtime::CurrentRuntimeFromIsolate(info.GetIsolate());
 | 
|    if (!pRuntime)
 | 
|      return;
 | 
| -  IJS_Context* pContext = pRuntime->GetCurrentContext();
 | 
|    std::vector<CJS_Value> parameters;
 | 
|    for (unsigned int i = 0; i < (unsigned int)info.Length(); i++) {
 | 
|      parameters.push_back(CJS_Value(pRuntime, info[i]));
 | 
|    }
 | 
| -  CJS_Value valueRes(pRuntime);
 | 
| -  CJS_Object* pJSObj = (CJS_Object*)FXJS_GetPrivate(isolate, info.Holder());
 | 
| +  CJS_Object* pJSObj =
 | 
| +      static_cast<CJS_Object*>(pRuntime->GetObjectPrivate(info.Holder()));
 | 
|    C* pObj = reinterpret_cast<C*>(pJSObj->GetEmbedObject());
 | 
|    CFX_WideString sError;
 | 
| -  if (!(pObj->*M)(pContext, parameters, valueRes, sError)) {
 | 
| -    FXJS_Error(isolate, JSFormatErrorString(class_name_string,
 | 
| -                                            method_name_string, sError));
 | 
| +  CJS_Value valueRes(pRuntime);
 | 
| +  if (!(pObj->*M)(pRuntime->GetCurrentContext(), parameters, valueRes,
 | 
| +                  sError)) {
 | 
| +    pRuntime->Error(
 | 
| +        JSFormatErrorString(class_name_string, method_name_string, sError));
 | 
|      return;
 | 
|    }
 | 
| -  info.GetReturnValue().Set(valueRes.ToV8Value(isolate));
 | 
| +  info.GetReturnValue().Set(valueRes.ToV8Value(pRuntime));
 | 
|  }
 | 
|  
 | 
|  #define JS_STATIC_METHOD(method_name, class_name)                             \
 | 
| @@ -183,7 +181,7 @@ void JSMethod(const char* method_name_string,
 | 
|  #define DECLARE_JS_CLASS_BASE_PART()  \
 | 
|    static const wchar_t* g_pClassName; \
 | 
|    static int g_nObjDefnID;            \
 | 
| -  static void DefineJSObjects(v8::Isolate* pIsolate, FXJSOBJTYPE eObjType);
 | 
| +  static void DefineJSObjects(CFXJS_Engine* pEngine, FXJSOBJTYPE eObjType);
 | 
|  
 | 
|  #define IMPLEMENT_JS_CLASS_BASE_PART(js_class_name, class_name)           \
 | 
|    const wchar_t* js_class_name::g_pClassName = JS_WIDESTRING(class_name); \
 | 
| @@ -194,28 +192,28 @@ void JSMethod(const char* method_name_string,
 | 
|    DECLARE_JS_CLASS_BASE_PART()   \
 | 
|    DECLARE_JS_CLASS_CONST_PART()
 | 
|  
 | 
| -#define IMPLEMENT_JS_CLASS_CONST(js_class_name, class_name)              \
 | 
| -  IMPLEMENT_JS_CLASS_BASE_PART(js_class_name, class_name)                \
 | 
| -  IMPLEMENT_JS_CLASS_CONST_PART(js_class_name, class_name)               \
 | 
| -  void js_class_name::DefineJSObjects(v8::Isolate* pIsolate,             \
 | 
| -                                      FXJSOBJTYPE eObjType) {            \
 | 
| -    g_nObjDefnID = FXJS_DefineObj(pIsolate, js_class_name::g_pClassName, \
 | 
| -                                  eObjType, nullptr, nullptr);           \
 | 
| -    DefineConsts(pIsolate);                                              \
 | 
| +#define IMPLEMENT_JS_CLASS_CONST(js_class_name, class_name)                  \
 | 
| +  IMPLEMENT_JS_CLASS_BASE_PART(js_class_name, class_name)                    \
 | 
| +  IMPLEMENT_JS_CLASS_CONST_PART(js_class_name, class_name)                   \
 | 
| +  void js_class_name::DefineJSObjects(CFXJS_Engine* pEngine,                 \
 | 
| +                                      FXJSOBJTYPE eObjType) {                \
 | 
| +    g_nObjDefnID = pEngine->DefineObj(js_class_name::g_pClassName, eObjType, \
 | 
| +                                      nullptr, nullptr);                     \
 | 
| +    DefineConsts(pEngine);                                                   \
 | 
|    }
 | 
|  
 | 
|  #define DECLARE_JS_CLASS_CONST_PART()   \
 | 
|    static JSConstSpec JS_Class_Consts[]; \
 | 
| -  static void DefineConsts(v8::Isolate* pIsolate);
 | 
| +  static void DefineConsts(CFXJS_Engine* pEngine);
 | 
|  
 | 
|  #define IMPLEMENT_JS_CLASS_CONST_PART(js_class_name, class_name)     \
 | 
| -  void js_class_name::DefineConsts(v8::Isolate* pIsolate) {          \
 | 
| +  void js_class_name::DefineConsts(CFXJS_Engine* pEngine) {          \
 | 
|      for (size_t i = 0; i < FX_ArraySize(JS_Class_Consts) - 1; ++i) { \
 | 
| -      FXJS_DefineObjConst(                                           \
 | 
| -          pIsolate, g_nObjDefnID, JS_Class_Consts[i].pName,          \
 | 
| +      pEngine->DefineObjConst(                                       \
 | 
| +          g_nObjDefnID, JS_Class_Consts[i].pName,                    \
 | 
|            JS_Class_Consts[i].t == 0                                  \
 | 
| -              ? FXJS_NewNumber(pIsolate, JS_Class_Consts[i].number)  \
 | 
| -              : FXJS_NewString(pIsolate, JS_Class_Consts[i].str));   \
 | 
| +              ? pEngine->NewNumber(JS_Class_Consts[i].number)        \
 | 
| +              : pEngine->NewString(JS_Class_Consts[i].str));         \
 | 
|      }                                                                \
 | 
|    }
 | 
|  
 | 
| @@ -231,53 +229,55 @@ void JSMethod(const char* method_name_string,
 | 
|    DECLARE_JS_CLASS_CONST_PART() \
 | 
|    DECLARE_JS_CLASS_RICH_PART()
 | 
|  
 | 
| -#define IMPLEMENT_JS_CLASS_RICH(js_class_name, class_alternate, class_name) \
 | 
| -  IMPLEMENT_JS_CLASS_BASE_PART(js_class_name, class_name)                   \
 | 
| -  IMPLEMENT_JS_CLASS_CONST_PART(js_class_name, class_name)                  \
 | 
| -  IMPLEMENT_JS_CLASS_RICH_PART(js_class_name, class_alternate, class_name)  \
 | 
| -  void js_class_name::DefineJSObjects(v8::Isolate* pIsolate,                \
 | 
| -                                      FXJSOBJTYPE eObjType) {               \
 | 
| -    g_nObjDefnID = FXJS_DefineObj(pIsolate, js_class_name::g_pClassName,    \
 | 
| -                                  eObjType, JSConstructor, JSDestructor);   \
 | 
| -    DefineConsts(pIsolate);                                                 \
 | 
| -    DefineProps(pIsolate);                                                  \
 | 
| -    DefineMethods(pIsolate);                                                \
 | 
| +#define IMPLEMENT_JS_CLASS_RICH(js_class_name, class_alternate, class_name)  \
 | 
| +  IMPLEMENT_JS_CLASS_BASE_PART(js_class_name, class_name)                    \
 | 
| +  IMPLEMENT_JS_CLASS_CONST_PART(js_class_name, class_name)                   \
 | 
| +  IMPLEMENT_JS_CLASS_RICH_PART(js_class_name, class_alternate, class_name)   \
 | 
| +  void js_class_name::DefineJSObjects(CFXJS_Engine* pEngine,                 \
 | 
| +                                      FXJSOBJTYPE eObjType) {                \
 | 
| +    g_nObjDefnID = pEngine->DefineObj(js_class_name::g_pClassName, eObjType, \
 | 
| +                                      JSConstructor, JSDestructor);          \
 | 
| +    DefineConsts(pEngine);                                                   \
 | 
| +    DefineProps(pEngine);                                                    \
 | 
| +    DefineMethods(pEngine);                                                  \
 | 
|    }
 | 
|  
 | 
|  #define DECLARE_JS_CLASS_RICH_PART()                                           \
 | 
|    static void JSConstructor(CFXJS_Engine* pEngine, v8::Local<v8::Object> obj); \
 | 
| -  static void JSDestructor(v8::Local<v8::Object> obj);                         \
 | 
| -  static void DefineProps(v8::Isolate* pIsoalte);                              \
 | 
| -  static void DefineMethods(v8::Isolate* pIsoalte);                            \
 | 
| +  static void JSDestructor(CFXJS_Engine* pEngine, v8::Local<v8::Object> obj);  \
 | 
| +  static void DefineProps(CFXJS_Engine* pEngine);                              \
 | 
| +  static void DefineMethods(CFXJS_Engine* pEngine);                            \
 | 
|    static JSPropertySpec JS_Class_Properties[];                                 \
 | 
|    static JSMethodSpec JS_Class_Methods[];
 | 
|  
 | 
| -#define IMPLEMENT_JS_CLASS_RICH_PART(js_class_name, class_alternate,          \
 | 
| -                                     class_name)                              \
 | 
| -  void js_class_name::JSConstructor(CFXJS_Engine* pEngine,                    \
 | 
| -                                    v8::Local<v8::Object> obj) {              \
 | 
| -    CJS_Object* pObj = new js_class_name(obj);                                \
 | 
| -    pObj->SetEmbedObject(new class_alternate(pObj));                          \
 | 
| -    FXJS_SetPrivate(nullptr, obj, (void*)pObj);                               \
 | 
| -    pObj->InitInstance(static_cast<CJS_Runtime*>(pEngine));                   \
 | 
| -  }                                                                           \
 | 
| -  void js_class_name::JSDestructor(v8::Local<v8::Object> obj) {               \
 | 
| -    js_class_name* pObj = (js_class_name*)FXJS_GetPrivate(nullptr, obj);      \
 | 
| -    pObj->ExitInstance();                                                     \
 | 
| -    delete pObj;                                                              \
 | 
| -  }                                                                           \
 | 
| -  void js_class_name::DefineProps(v8::Isolate* pIsolate) {                    \
 | 
| -    for (size_t i = 0; i < FX_ArraySize(JS_Class_Properties) - 1; ++i) {      \
 | 
| -      FXJS_DefineObjProperty(                                                 \
 | 
| -          pIsolate, g_nObjDefnID, JS_Class_Properties[i].pName,               \
 | 
| -          JS_Class_Properties[i].pPropGet, JS_Class_Properties[i].pPropPut);  \
 | 
| -    }                                                                         \
 | 
| -  }                                                                           \
 | 
| -  void js_class_name::DefineMethods(v8::Isolate* pIsolate) {                  \
 | 
| -    for (size_t i = 0; i < FX_ArraySize(JS_Class_Methods) - 1; ++i) {         \
 | 
| -      FXJS_DefineObjMethod(pIsolate, g_nObjDefnID, JS_Class_Methods[i].pName, \
 | 
| -                           JS_Class_Methods[i].pMethodCall);                  \
 | 
| -    }                                                                         \
 | 
| +#define IMPLEMENT_JS_CLASS_RICH_PART(js_class_name, class_alternate,         \
 | 
| +                                     class_name)                             \
 | 
| +  void js_class_name::JSConstructor(CFXJS_Engine* pEngine,                   \
 | 
| +                                    v8::Local<v8::Object> obj) {             \
 | 
| +    CJS_Object* pObj = new js_class_name(obj);                               \
 | 
| +    pObj->SetEmbedObject(new class_alternate(pObj));                         \
 | 
| +    pEngine->SetObjectPrivate(obj, (void*)pObj);                             \
 | 
| +    pObj->InitInstance(static_cast<CJS_Runtime*>(pEngine));                  \
 | 
| +  }                                                                          \
 | 
| +  void js_class_name::JSDestructor(CFXJS_Engine* pEngine,                    \
 | 
| +                                   v8::Local<v8::Object> obj) {              \
 | 
| +    js_class_name* pObj =                                                    \
 | 
| +        static_cast<js_class_name*>(pEngine->GetObjectPrivate(obj));         \
 | 
| +    pObj->ExitInstance();                                                    \
 | 
| +    delete pObj;                                                             \
 | 
| +  }                                                                          \
 | 
| +  void js_class_name::DefineProps(CFXJS_Engine* pEngine) {                   \
 | 
| +    for (size_t i = 0; i < FX_ArraySize(JS_Class_Properties) - 1; ++i) {     \
 | 
| +      pEngine->DefineObjProperty(g_nObjDefnID, JS_Class_Properties[i].pName, \
 | 
| +                                 JS_Class_Properties[i].pPropGet,            \
 | 
| +                                 JS_Class_Properties[i].pPropPut);           \
 | 
| +    }                                                                        \
 | 
| +  }                                                                          \
 | 
| +  void js_class_name::DefineMethods(CFXJS_Engine* pEngine) {                 \
 | 
| +    for (size_t i = 0; i < FX_ArraySize(JS_Class_Methods) - 1; ++i) {        \
 | 
| +      pEngine->DefineObjMethod(g_nObjDefnID, JS_Class_Methods[i].pName,      \
 | 
| +                               JS_Class_Methods[i].pMethodCall);             \
 | 
| +    }                                                                        \
 | 
|    }
 | 
|  
 | 
|  // Special JS classes implement methods, props, and queries, but not consts.
 | 
| @@ -292,14 +292,14 @@ void JSMethod(const char* method_name_string,
 | 
|    IMPLEMENT_JS_CLASS_CONST_PART(js_class_name, class_name)                     \
 | 
|    IMPLEMENT_JS_CLASS_RICH_PART(js_class_name, class_alternate, class_name)     \
 | 
|    IMPLEMENT_SPECIAL_JS_CLASS_PART(js_class_name, class_alternate, class_name)  \
 | 
| -  void js_class_name::DefineJSObjects(v8::Isolate* pIsolate,                   \
 | 
| +  void js_class_name::DefineJSObjects(CFXJS_Engine* pEngine,                   \
 | 
|                                        FXJSOBJTYPE eObjType) {                  \
 | 
| -    g_nObjDefnID = FXJS_DefineObj(pIsolate, js_class_name::g_pClassName,       \
 | 
| -                                  eObjType, JSConstructor, JSDestructor);      \
 | 
| -    DefineConsts(pIsolate);                                                    \
 | 
| -    DefineProps(pIsolate);                                                     \
 | 
| -    DefineMethods(pIsolate);                                                   \
 | 
| -    DefineAllProperties(pIsolate);                                             \
 | 
| +    g_nObjDefnID = pEngine->DefineObj(js_class_name::g_pClassName, eObjType,   \
 | 
| +                                      JSConstructor, JSDestructor);            \
 | 
| +    DefineConsts(pEngine);                                                     \
 | 
| +    DefineProps(pEngine);                                                      \
 | 
| +    DefineMethods(pEngine);                                                    \
 | 
| +    DefineAllProperties(pEngine);                                              \
 | 
|    }
 | 
|  
 | 
|  #define DECLARE_SPECIAL_JS_CLASS_PART()                                        \
 | 
| @@ -314,7 +314,7 @@ void JSMethod(const char* method_name_string,
 | 
|    static void delprop_static(                                                  \
 | 
|        v8::Local<v8::String> property,                                          \
 | 
|        const v8::PropertyCallbackInfo<v8::Boolean>& info);                      \
 | 
| -  static void DefineAllProperties(v8::Isolate* pIsolate);
 | 
| +  static void DefineAllProperties(CFXJS_Engine* pEngine);
 | 
|  
 | 
|  #define IMPLEMENT_SPECIAL_JS_CLASS_PART(js_class_name, class_alternate,    \
 | 
|                                          class_name)                        \
 | 
| @@ -338,9 +338,9 @@ void JSMethod(const char* method_name_string,
 | 
|        const v8::PropertyCallbackInfo<v8::Boolean>& info) {                 \
 | 
|      JSSpecialPropDel<class_alternate>(#class_name, property, info);        \
 | 
|    }                                                                        \
 | 
| -  void js_class_name::DefineAllProperties(v8::Isolate* pIsolate) {         \
 | 
| -    FXJS_DefineObjAllProperties(                                           \
 | 
| -        pIsolate, g_nObjDefnID, js_class_name::queryprop_static,           \
 | 
| +  void js_class_name::DefineAllProperties(CFXJS_Engine* pEngine) {         \
 | 
| +    pEngine->DefineObjAllProperties(                                       \
 | 
| +        g_nObjDefnID, js_class_name::queryprop_static,                     \
 | 
|          js_class_name::getprop_static, js_class_name::putprop_static,      \
 | 
|          js_class_name::delprop_static);                                    \
 | 
|    }
 | 
| @@ -349,12 +349,13 @@ template <class Alt>
 | 
|  void JSSpecialPropQuery(const char*,
 | 
|                          v8::Local<v8::String> property,
 | 
|                          const v8::PropertyCallbackInfo<v8::Integer>& info) {
 | 
| -  v8::Isolate* isolate = info.GetIsolate();
 | 
| +  CJS_Runtime* pRuntime =
 | 
| +      CJS_Runtime::CurrentRuntimeFromIsolate(info.GetIsolate());
 | 
|    v8::String::Utf8Value utf8_value(property);
 | 
|    CFX_WideString propname = CFX_WideString::FromUTF8(
 | 
|        CFX_ByteStringC(*utf8_value, utf8_value.length()));
 | 
|    CJS_Object* pJSObj =
 | 
| -      reinterpret_cast<CJS_Object*>(FXJS_GetPrivate(isolate, info.Holder()));
 | 
| +      static_cast<CJS_Object*>(pRuntime->GetObjectPrivate(info.Holder()));
 | 
|    Alt* pObj = reinterpret_cast<Alt*>(pJSObj->GetEmbedObject());
 | 
|    FX_BOOL bRet = pObj->QueryProperty(propname.c_str());
 | 
|    info.GetReturnValue().Set(bRet ? 4 : 0);
 | 
| @@ -364,14 +365,12 @@ template <class Alt>
 | 
|  void JSSpecialPropGet(const char* class_name,
 | 
|                        v8::Local<v8::String> property,
 | 
|                        const v8::PropertyCallbackInfo<v8::Value>& info) {
 | 
| -  v8::Isolate* isolate = info.GetIsolate();
 | 
|    CJS_Runtime* pRuntime =
 | 
| -      static_cast<CJS_Runtime*>(FXJS_GetCurrentEngineFromIsolate(isolate));
 | 
| +      CJS_Runtime::CurrentRuntimeFromIsolate(info.GetIsolate());
 | 
|    if (!pRuntime)
 | 
|      return;
 | 
| -  IJS_Context* pContext = pRuntime->GetCurrentContext();
 | 
|    CJS_Object* pJSObj =
 | 
| -      reinterpret_cast<CJS_Object*>(FXJS_GetPrivate(isolate, info.Holder()));
 | 
| +      static_cast<CJS_Object*>(pRuntime->GetObjectPrivate(info.Holder()));
 | 
|    Alt* pObj = reinterpret_cast<Alt*>(pJSObj->GetEmbedObject());
 | 
|    v8::String::Utf8Value utf8_value(property);
 | 
|    CFX_WideString propname = CFX_WideString::FromUTF8(
 | 
| @@ -379,11 +378,12 @@ void JSSpecialPropGet(const char* class_name,
 | 
|    CFX_WideString sError;
 | 
|    CJS_PropValue value(pRuntime);
 | 
|    value.StartGetting();
 | 
| -  if (!pObj->DoProperty(pContext, propname.c_str(), value, sError)) {
 | 
| -    FXJS_Error(isolate, JSFormatErrorString(class_name, "GetProperty", sError));
 | 
| +  if (!pObj->DoProperty(pRuntime->GetCurrentContext(), propname.c_str(), value,
 | 
| +                        sError)) {
 | 
| +    pRuntime->Error(JSFormatErrorString(class_name, "GetProperty", sError));
 | 
|      return;
 | 
|    }
 | 
| -  info.GetReturnValue().Set(value.GetJSValue()->ToV8Value(isolate));
 | 
| +  info.GetReturnValue().Set(value.GetJSValue()->ToV8Value(pRuntime));
 | 
|  }
 | 
|  
 | 
|  template <class Alt>
 | 
| @@ -391,14 +391,12 @@ void JSSpecialPropPut(const char* class_name,
 | 
|                        v8::Local<v8::String> property,
 | 
|                        v8::Local<v8::Value> value,
 | 
|                        const v8::PropertyCallbackInfo<v8::Value>& info) {
 | 
| -  v8::Isolate* isolate = info.GetIsolate();
 | 
|    CJS_Runtime* pRuntime =
 | 
| -      static_cast<CJS_Runtime*>(FXJS_GetCurrentEngineFromIsolate(isolate));
 | 
| +      CJS_Runtime::CurrentRuntimeFromIsolate(info.GetIsolate());
 | 
|    if (!pRuntime)
 | 
|      return;
 | 
| -  IJS_Context* pContext = pRuntime->GetCurrentContext();
 | 
|    CJS_Object* pJSObj =
 | 
| -      reinterpret_cast<CJS_Object*>(FXJS_GetPrivate(isolate, info.Holder()));
 | 
| +      static_cast<CJS_Object*>(pRuntime->GetObjectPrivate(info.Holder()));
 | 
|    Alt* pObj = reinterpret_cast<Alt*>(pJSObj->GetEmbedObject());
 | 
|    v8::String::Utf8Value utf8_value(property);
 | 
|    CFX_WideString propname = CFX_WideString::FromUTF8(
 | 
| @@ -406,8 +404,9 @@ void JSSpecialPropPut(const char* class_name,
 | 
|    CFX_WideString sError;
 | 
|    CJS_PropValue PropValue(pRuntime, CJS_Value(pRuntime, value));
 | 
|    PropValue.StartSetting();
 | 
| -  if (!pObj->DoProperty(pContext, propname.c_str(), PropValue, sError)) {
 | 
| -    FXJS_Error(isolate, JSFormatErrorString(class_name, "PutProperty", sError));
 | 
| +  if (!pObj->DoProperty(pRuntime->GetCurrentContext(), propname.c_str(),
 | 
| +                        PropValue, sError)) {
 | 
| +    pRuntime->Error(JSFormatErrorString(class_name, "PutProperty", sError));
 | 
|    }
 | 
|  }
 | 
|  
 | 
| @@ -415,20 +414,19 @@ template <class Alt>
 | 
|  void JSSpecialPropDel(const char* class_name,
 | 
|                        v8::Local<v8::String> property,
 | 
|                        const v8::PropertyCallbackInfo<v8::Boolean>& info) {
 | 
| -  v8::Isolate* isolate = info.GetIsolate();
 | 
|    CJS_Runtime* pRuntime =
 | 
| -      static_cast<CJS_Runtime*>(FXJS_GetCurrentEngineFromIsolate(isolate));
 | 
| +      CJS_Runtime::CurrentRuntimeFromIsolate(info.GetIsolate());
 | 
|    if (!pRuntime)
 | 
|      return;
 | 
| -  IJS_Context* pContext = pRuntime->GetCurrentContext();
 | 
|    CJS_Object* pJSObj =
 | 
| -      reinterpret_cast<CJS_Object*>(FXJS_GetPrivate(isolate, info.Holder()));
 | 
| +      static_cast<CJS_Object*>(pRuntime->GetObjectPrivate(info.Holder()));
 | 
|    Alt* pObj = reinterpret_cast<Alt*>(pJSObj->GetEmbedObject());
 | 
|    v8::String::Utf8Value utf8_value(property);
 | 
|    CFX_WideString propname = CFX_WideString::FromUTF8(
 | 
|        CFX_ByteStringC(*utf8_value, utf8_value.length()));
 | 
|    CFX_WideString sError;
 | 
| -  if (!pObj->DelProperty(pContext, propname.c_str(), sError)) {
 | 
| +  if (!pObj->DelProperty(pRuntime->GetCurrentContext(), propname.c_str(),
 | 
| +                         sError)) {
 | 
|      CFX_ByteString cbName;
 | 
|      cbName.Format("%s.%s", class_name, "DelProperty");
 | 
|      // Probably a missing call to JSFX_Error().
 | 
| @@ -441,23 +439,21 @@ template <FX_BOOL (*F)(IJS_Context*,
 | 
|                         CFX_WideString&)>
 | 
|  void JSGlobalFunc(const char* func_name_string,
 | 
|                    const v8::FunctionCallbackInfo<v8::Value>& info) {
 | 
| -  CJS_Runtime* pRuntime = static_cast<CJS_Runtime*>(
 | 
| -      FXJS_GetCurrentEngineFromIsolate(info.GetIsolate()));
 | 
| +  CJS_Runtime* pRuntime =
 | 
| +      CJS_Runtime::CurrentRuntimeFromIsolate(info.GetIsolate());
 | 
|    if (!pRuntime)
 | 
|      return;
 | 
| -  IJS_Context* pContext = pRuntime->GetCurrentContext();
 | 
|    std::vector<CJS_Value> parameters;
 | 
|    for (unsigned int i = 0; i < (unsigned int)info.Length(); i++) {
 | 
|      parameters.push_back(CJS_Value(pRuntime, info[i]));
 | 
|    }
 | 
|    CJS_Value valueRes(pRuntime);
 | 
|    CFX_WideString sError;
 | 
| -  if (!(*F)(pContext, parameters, valueRes, sError)) {
 | 
| -    FXJS_Error(pRuntime->GetIsolate(),
 | 
| -               JSFormatErrorString(func_name_string, nullptr, sError));
 | 
| +  if (!(*F)(pRuntime->GetCurrentContext(), parameters, valueRes, sError)) {
 | 
| +    pRuntime->Error(JSFormatErrorString(func_name_string, nullptr, sError));
 | 
|      return;
 | 
|    }
 | 
| -  info.GetReturnValue().Set(valueRes.ToV8Value(pRuntime->GetIsolate()));
 | 
| +  info.GetReturnValue().Set(valueRes.ToV8Value(pRuntime));
 | 
|  }
 | 
|  
 | 
|  #define JS_STATIC_GLOBAL_FUN(fun_name)                   \
 | 
| @@ -468,7 +464,7 @@ void JSGlobalFunc(const char* func_name_string,
 | 
|  
 | 
|  #define JS_STATIC_DECLARE_GLOBAL_FUN()  \
 | 
|    static JSMethodSpec global_methods[]; \
 | 
| -  static void DefineJSObjects(v8::Isolate* pIsolate)
 | 
| +  static void DefineJSObjects(CFXJS_Engine* pEngine)
 | 
|  
 | 
|  #define BEGIN_JS_STATIC_GLOBAL_FUN(js_class_name) \
 | 
|    JSMethodSpec js_class_name::global_methods[] = {
 | 
| @@ -477,13 +473,13 @@ void JSGlobalFunc(const char* func_name_string,
 | 
|  
 | 
|  #define END_JS_STATIC_GLOBAL_FUN() END_JS_STATIC_METHOD()
 | 
|  
 | 
| -#define IMPLEMENT_JS_STATIC_GLOBAL_FUN(js_class_name)                        \
 | 
| -  void js_class_name::DefineJSObjects(v8::Isolate* pIsolate) {               \
 | 
| -    for (size_t i = 0; i < FX_ArraySize(global_methods) - 1; ++i) {          \
 | 
| -      FXJS_DefineGlobalMethod(pIsolate,                                      \
 | 
| -                              js_class_name::global_methods[i].pName,        \
 | 
| -                              js_class_name::global_methods[i].pMethodCall); \
 | 
| -    }                                                                        \
 | 
| +#define IMPLEMENT_JS_STATIC_GLOBAL_FUN(js_class_name)               \
 | 
| +  void js_class_name::DefineJSObjects(CFXJS_Engine* pEngine) {      \
 | 
| +    for (size_t i = 0; i < FX_ArraySize(global_methods) - 1; ++i) { \
 | 
| +      pEngine->DefineGlobalMethod(                                  \
 | 
| +          js_class_name::global_methods[i].pName,                   \
 | 
| +          js_class_name::global_methods[i].pMethodCall);            \
 | 
| +    }                                                               \
 | 
|    }
 | 
|  
 | 
|  #endif  // FPDFSDK_JAVASCRIPT_JS_DEFINE_H_
 | 
| 
 |