Replace calls to v8::Isolate::GetCurrent(), part 3 Fixed: pdfium:1737 Change-Id: I3b83015078ad46a733b18e54299be592d5b164a2 Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/86296 Commit-Queue: Daniel Hosseinian <dhoss@chromium.org> Reviewed-by: Tom Sepez <tsepez@chromium.org>
diff --git a/fxjs/cfxjs_engine.cpp b/fxjs/cfxjs_engine.cpp index 9f15613..6335c2a 100644 --- a/fxjs/cfxjs_engine.cpp +++ b/fxjs/cfxjs_engine.cpp
@@ -638,7 +638,8 @@ } // static -CJS_Object* CFXJS_Engine::GetObjectPrivate(v8::Local<v8::Object> pObj) { +CJS_Object* CFXJS_Engine::GetObjectPrivate(v8::Isolate* pIsolate, + v8::Local<v8::Object> pObj) { auto* pData = CFXJS_PerObjectData::GetFromObject(pObj); if (pData) return pData->m_pPrivate.get(); @@ -656,7 +657,7 @@ if (!pProtoData) return nullptr; - auto* pIsolateData = FXJS_PerIsolateData::Get(v8::Isolate::GetCurrent()); + auto* pIsolateData = FXJS_PerIsolateData::Get(pIsolate); if (!pIsolateData) return nullptr;
diff --git a/fxjs/cfxjs_engine.h b/fxjs/cfxjs_engine.h index 45dc664..7094c3f 100644 --- a/fxjs/cfxjs_engine.h +++ b/fxjs/cfxjs_engine.h
@@ -84,7 +84,8 @@ using Destructor = std::function<void(v8::Local<v8::Object> obj)>; static uint32_t GetObjDefnID(v8::Local<v8::Object> pObj); - static CJS_Object* GetObjectPrivate(v8::Local<v8::Object> pObj); + static CJS_Object* GetObjectPrivate(v8::Isolate* pIsolate, + v8::Local<v8::Object> pObj); static void SetObjectPrivate(v8::Local<v8::Object> pObj, std::unique_ptr<CJS_Object> p); static void FreeObjectPrivate(v8::Local<v8::Object> pObj);
diff --git a/fxjs/cjs_app.cpp b/fxjs/cjs_app.cpp index c9f1ca6..b3f2de2 100644 --- a/fxjs/cjs_app.cpp +++ b/fxjs/cjs_app.cpp
@@ -93,7 +93,7 @@ CJS_Result CJS_App::get_active_docs(CJS_Runtime* pRuntime) { v8::Local<v8::Object> pObj = pRuntime->GetThisObj(); - auto pJSDocument = JSGetObject<CJS_Document>(pObj); + auto pJSDocument = JSGetObject<CJS_Document>(pRuntime->GetIsolate(), pObj); if (!pJSDocument) return CJS_Result::Failure(JSMessage::kObjectTypeError); v8::Local<v8::Array> aDocs = pRuntime->NewArray(); @@ -317,8 +317,8 @@ if (pRetObj.IsEmpty()) return CJS_Result::Failure(JSMessage::kBadObjectError); - auto* pJS_TimerObj = - static_cast<CJS_TimerObj*>(CFXJS_Engine::GetObjectPrivate(pRetObj)); + auto* pJS_TimerObj = static_cast<CJS_TimerObj*>( + CFXJS_Engine::GetObjectPrivate(pRuntime->GetIsolate(), pRetObj)); pJS_TimerObj->SetTimer(pTimerRef); return CJS_Result::Success(pRetObj); @@ -346,8 +346,8 @@ if (pRetObj.IsEmpty()) return CJS_Result::Failure(JSMessage::kBadObjectError); - auto* pJS_TimerObj = - static_cast<CJS_TimerObj*>(CFXJS_Engine::GetObjectPrivate(pRetObj)); + auto* pJS_TimerObj = static_cast<CJS_TimerObj*>( + CFXJS_Engine::GetObjectPrivate(pRuntime->GetIsolate(), pRetObj)); pJS_TimerObj->SetTimer(pTimerRef); return CJS_Result::Success(pRetObj); @@ -379,7 +379,7 @@ return; v8::Local<v8::Object> pObj = pRuntime->ToObject(param); - auto pTimer = JSGetObject<CJS_TimerObj>(pObj); + auto pTimer = JSGetObject<CJS_TimerObj>(pRuntime->GetIsolate(), pObj); if (!pTimer) return;
diff --git a/fxjs/cjs_document.cpp b/fxjs/cjs_document.cpp index 7520da2..3f598cd 100644 --- a/fxjs/cjs_document.cpp +++ b/fxjs/cjs_document.cpp
@@ -260,8 +260,8 @@ if (pFieldObj.IsEmpty()) return CJS_Result::Failure(JSMessage::kBadObjectError); - auto* pJSField = - static_cast<CJS_Field*>(CFXJS_Engine::GetObjectPrivate(pFieldObj)); + auto* pJSField = static_cast<CJS_Field*>( + CFXJS_Engine::GetObjectPrivate(pRuntime->GetIsolate(), pFieldObj)); if (!pJSField) return CJS_Result::Failure(JSMessage::kBadObjectError); @@ -1038,8 +1038,8 @@ if (pObj.IsEmpty()) return CJS_Result::Failure(JSMessage::kBadObjectError); - auto* pJS_Annot = - static_cast<CJS_Annot*>(CFXJS_Engine::GetObjectPrivate(pObj)); + auto* pJS_Annot = static_cast<CJS_Annot*>( + CFXJS_Engine::GetObjectPrivate(pRuntime->GetIsolate(), pObj)); if (!pJS_Annot) return CJS_Result::Failure(JSMessage::kBadObjectError); @@ -1073,8 +1073,8 @@ if (pObj.IsEmpty()) return CJS_Result::Failure(JSMessage::kBadObjectError); - auto* pJS_Annot = - static_cast<CJS_Annot*>(CFXJS_Engine::GetObjectPrivate(pObj)); + auto* pJS_Annot = static_cast<CJS_Annot*>( + CFXJS_Engine::GetObjectPrivate(pRuntime->GetIsolate(), pObj)); pJS_Annot->SetSDKAnnot(pSDKAnnotCur->AsBAAnnot()); pRuntime->PutArrayElement( annots, i, @@ -1119,7 +1119,7 @@ return CJS_Result::Failure(JSMessage::kTypeError); v8::Local<v8::Object> pObj = pRuntime->ToObject(params[1]); - if (!JSGetObject<CJS_Icon>(pObj)) + if (!JSGetObject<CJS_Icon>(pRuntime->GetIsolate(), pObj)) return CJS_Result::Failure(JSMessage::kTypeError); WideString swIconName = pRuntime->ToWideString(params[0]); @@ -1141,8 +1141,8 @@ if (pObj.IsEmpty()) return CJS_Result::Failure(JSMessage::kBadObjectError); - auto* pJS_Icon = - static_cast<CJS_Icon*>(CFXJS_Engine::GetObjectPrivate(pObj)); + auto* pJS_Icon = static_cast<CJS_Icon*>( + CFXJS_Engine::GetObjectPrivate(pRuntime->GetIsolate(), pObj)); pJS_Icon->SetIconName(name); pRuntime->PutArrayElement(Icons, i++, pJS_Icon @@ -1173,7 +1173,8 @@ if (pObj.IsEmpty()) return CJS_Result::Failure(JSMessage::kBadObjectError); - auto* pJSIcon = static_cast<CJS_Icon*>(CFXJS_Engine::GetObjectPrivate(pObj)); + auto* pJSIcon = static_cast<CJS_Icon*>( + CFXJS_Engine::GetObjectPrivate(pRuntime->GetIsolate(), pObj)); if (!pJSIcon) return CJS_Result::Failure(JSMessage::kBadObjectError);
diff --git a/fxjs/cjs_event_context.cpp b/fxjs/cjs_event_context.cpp index 888d429..302d011 100644 --- a/fxjs/cjs_event_context.cpp +++ b/fxjs/cjs_event_context.cpp
@@ -65,12 +65,12 @@ return nullptr; auto* pFormFillEnv = GetFormFillEnv(); - auto* pJSDocument = - static_cast<CJS_Document*>(CFXJS_Engine::GetObjectPrivate(pDocObj)); + auto* pJSDocument = static_cast<CJS_Document*>( + CFXJS_Engine::GetObjectPrivate(m_pRuntime->GetIsolate(), pDocObj)); pJSDocument->SetFormFillEnv(pFormFillEnv); - auto* pJSField = - static_cast<CJS_Field*>(CFXJS_Engine::GetObjectPrivate(pFieldObj)); + auto* pJSField = static_cast<CJS_Field*>( + CFXJS_Engine::GetObjectPrivate(m_pRuntime->GetIsolate(), pFieldObj)); pJSField->AttachField(pJSDocument, SourceName()); return pJSField; } @@ -87,12 +87,12 @@ return nullptr; auto* pFormFillEnv = GetFormFillEnv(); - auto* pJSDocument = - static_cast<CJS_Document*>(CFXJS_Engine::GetObjectPrivate(pDocObj)); + auto* pJSDocument = static_cast<CJS_Document*>( + CFXJS_Engine::GetObjectPrivate(m_pRuntime->GetIsolate(), pDocObj)); pJSDocument->SetFormFillEnv(pFormFillEnv); - auto* pJSField = - static_cast<CJS_Field*>(CFXJS_Engine::GetObjectPrivate(pFieldObj)); + auto* pJSField = static_cast<CJS_Field*>( + CFXJS_Engine::GetObjectPrivate(m_pRuntime->GetIsolate(), pFieldObj)); pJSField->AttachField(pJSDocument, TargetName()); return pJSField; }
diff --git a/fxjs/cjs_field.cpp b/fxjs/cjs_field.cpp index 3ffae49..e6addf8 100644 --- a/fxjs/cjs_field.cpp +++ b/fxjs/cjs_field.cpp
@@ -2264,7 +2264,8 @@ if (pObj.IsEmpty()) return CJS_Result::Failure(JSMessage::kBadObjectError); - auto* pJS_Icon = static_cast<CJS_Icon*>(CFXJS_Engine::GetObjectPrivate(pObj)); + auto* pJS_Icon = static_cast<CJS_Icon*>( + CFXJS_Engine::GetObjectPrivate(pRuntime->GetIsolate(), pObj)); return pJS_Icon ? CJS_Result::Success(pJS_Icon->ToV8Object()) : CJS_Result::Failure(JSMessage::kBadObjectError); } @@ -2377,8 +2378,8 @@ if (pObj.IsEmpty()) return CJS_Result::Failure(JSMessage::kBadObjectError); - auto* pJSField = - static_cast<CJS_Field*>(CFXJS_Engine::GetObjectPrivate(pObj)); + auto* pJSField = static_cast<CJS_Field*>( + CFXJS_Engine::GetObjectPrivate(pRuntime->GetIsolate(), pObj)); pJSField->AttachField(m_pJSDoc.Get(), *pStr); pRuntime->PutArrayElement(FormFieldArray, j++, pJSField
diff --git a/fxjs/cjs_global.cpp b/fxjs/cjs_global.cpp index 5d10ae7..849c00f 100644 --- a/fxjs/cjs_global.cpp +++ b/fxjs/cjs_global.cpp
@@ -25,7 +25,7 @@ void JSSpecialPropQuery(v8::Local<v8::String> property, const v8::PropertyCallbackInfo<v8::Integer>& info) { - auto pObj = JSGetObject<CJS_Global>(info.Holder()); + auto pObj = JSGetObject<CJS_Global>(info.GetIsolate(), info.Holder()); if (!pObj) return; @@ -44,7 +44,7 @@ void JSSpecialPropGet(v8::Local<v8::String> property, const v8::PropertyCallbackInfo<v8::Value>& info) { - auto pObj = JSGetObject<CJS_Global>(info.Holder()); + auto pObj = JSGetObject<CJS_Global>(info.GetIsolate(), info.Holder()); if (!pObj) return; @@ -66,7 +66,7 @@ void JSSpecialPropPut(v8::Local<v8::String> property, v8::Local<v8::Value> value, const v8::PropertyCallbackInfo<v8::Value>& info) { - auto pObj = JSGetObject<CJS_Global>(info.Holder()); + auto pObj = JSGetObject<CJS_Global>(info.GetIsolate(), info.Holder()); if (!pObj) return; @@ -84,7 +84,7 @@ void JSSpecialPropDel(v8::Local<v8::String> property, const v8::PropertyCallbackInfo<v8::Boolean>& info) { - auto pObj = JSGetObject<CJS_Global>(info.Holder()); + auto pObj = JSGetObject<CJS_Global>(info.GetIsolate(), info.Holder()); if (!pObj) return;
diff --git a/fxjs/cjs_globalarrays.cpp b/fxjs/cjs_globalarrays.cpp index 407b620..89b2b68 100644 --- a/fxjs/cjs_globalarrays.cpp +++ b/fxjs/cjs_globalarrays.cpp
@@ -10,21 +10,22 @@ #include "v8/include/v8-container.h" #include "v8/include/v8-isolate.h" -#define GLOBAL_ARRAY(rt, name, ...) \ - { \ - static const wchar_t* const values[] = {__VA_ARGS__}; \ - v8::Local<v8::Array> array = (rt)->NewArray(); \ - v8::Local<v8::Context> ctx = (rt)->GetIsolate()->GetCurrentContext(); \ - for (size_t i = 0; i < pdfium::size(values); ++i) \ - array->Set(ctx, i, (rt)->NewString(values[i])).FromJust(); \ - (rt)->SetConstArray((name), array); \ - (rt)->DefineGlobalConst( \ - (name), [](const v8::FunctionCallbackInfo<v8::Value>& info) { \ - CJS_Object* pObj = CFXJS_Engine::GetObjectPrivate(info.Holder()); \ - CJS_Runtime* pCurrentRuntime = pObj->GetRuntime(); \ - if (pCurrentRuntime) \ - info.GetReturnValue().Set(pCurrentRuntime->GetConstArray(name)); \ - }); \ +#define GLOBAL_ARRAY(rt, name, ...) \ + { \ + static const wchar_t* const values[] = {__VA_ARGS__}; \ + v8::Local<v8::Array> array = (rt)->NewArray(); \ + v8::Local<v8::Context> ctx = (rt)->GetIsolate()->GetCurrentContext(); \ + for (size_t i = 0; i < pdfium::size(values); ++i) \ + array->Set(ctx, i, (rt)->NewString(values[i])).FromJust(); \ + (rt)->SetConstArray((name), array); \ + (rt)->DefineGlobalConst( \ + (name), [](const v8::FunctionCallbackInfo<v8::Value>& info) { \ + CJS_Object* pObj = CFXJS_Engine::GetObjectPrivate(info.GetIsolate(), \ + info.Holder()); \ + CJS_Runtime* pCurrentRuntime = pObj->GetRuntime(); \ + if (pCurrentRuntime) \ + info.GetReturnValue().Set(pCurrentRuntime->GetConstArray(name)); \ + }); \ } // static
diff --git a/fxjs/cjs_publicmethods.cpp b/fxjs/cjs_publicmethods.cpp index 420551d..d724f2e 100644 --- a/fxjs/cjs_publicmethods.cpp +++ b/fxjs/cjs_publicmethods.cpp
@@ -141,7 +141,8 @@ const std::vector<v8::Local<v8::Value>>&)> void JSGlobalFunc(const char* func_name_string, const v8::FunctionCallbackInfo<v8::Value>& info) { - CJS_Object* pObj = CFXJS_Engine::GetObjectPrivate(info.Holder()); + CJS_Object* pObj = + CFXJS_Engine::GetObjectPrivate(info.GetIsolate(), info.Holder()); if (!pObj) return;
diff --git a/fxjs/cjs_runtime.cpp b/fxjs/cjs_runtime.cpp index 91d2499..53568c0 100644 --- a/fxjs/cjs_runtime.cpp +++ b/fxjs/cjs_runtime.cpp
@@ -155,7 +155,7 @@ if (pThis.IsEmpty()) return; - auto pJSDocument = JSGetObject<CJS_Document>(pThis); + auto pJSDocument = JSGetObject<CJS_Document>(GetIsolate(), pThis); if (!pJSDocument) return;
diff --git a/fxjs/js_define.h b/fxjs/js_define.h index a4314d7..17f4ed7 100644 --- a/fxjs/js_define.h +++ b/fxjs/js_define.h
@@ -51,11 +51,11 @@ void JSDestructor(v8::Local<v8::Object> obj); template <class C> -UnownedPtr<C> JSGetObject(v8::Local<v8::Object> obj) { +UnownedPtr<C> JSGetObject(v8::Isolate* isolate, v8::Local<v8::Object> obj) { if (CFXJS_Engine::GetObjDefnID(obj) != C::GetObjDefnID()) return nullptr; - CJS_Object* pJSObj = CFXJS_Engine::GetObjectPrivate(obj); + CJS_Object* pJSObj = CFXJS_Engine::GetObjectPrivate(isolate, obj); if (!pJSObj) return nullptr; @@ -67,7 +67,7 @@ const char* class_name_string, v8::Local<v8::String> property, const v8::PropertyCallbackInfo<v8::Value>& info) { - auto pObj = JSGetObject<C>(info.Holder()); + auto pObj = JSGetObject<C>(info.GetIsolate(), info.Holder()); if (!pObj) return; @@ -92,7 +92,7 @@ v8::Local<v8::String> property, v8::Local<v8::Value> value, const v8::PropertyCallbackInfo<void>& info) { - auto pObj = JSGetObject<C>(info.Holder()); + auto pObj = JSGetObject<C>(info.GetIsolate(), info.Holder()); if (!pObj) return; @@ -113,7 +113,7 @@ void JSMethod(const char* method_name_string, const char* class_name_string, const v8::FunctionCallbackInfo<v8::Value>& info) { - auto pObj = JSGetObject<C>(info.Holder()); + auto pObj = JSGetObject<C>(info.GetIsolate(), info.Holder()); if (!pObj) return;