7000847: add type tag to v8::External calls in callback and osr_converter

The v8::External API now requires an EmbedderPointerTypeTag parameter
for both New() and Value() methods to improve V8 sandbox type safety.

Updated calls in:
- callback.cc: TranslatorHolder constructor and CallTranslator
- osr_converter.cc: OffscreenSharedTextureValue converter

Ref: https://chromium-review.googlesource.com/c/v8/v8/+/7000847
This commit is contained in:
Keeley Hammond
2026-01-27 17:46:01 -08:00
parent 14bfb80a08
commit bbd93f24d8
2 changed files with 10 additions and 4 deletions

View File

@@ -87,10 +87,12 @@ v8::Local<v8::Value> Converter<electron::OffscreenSharedTextureValue>::ToV8(
// GC collects the object.
auto* monitor = new OffscreenReleaseHolderMonitor(val.releaser_holder);
auto releaserHolder = v8::External::New(isolate, monitor);
auto releaserHolder =
v8::External::New(isolate, monitor, v8::kExternalPointerTypeTagDefault);
auto releaserFunc = [](const v8::FunctionCallbackInfo<v8::Value>& info) {
auto* mon = static_cast<OffscreenReleaseHolderMonitor*>(
info.Data().As<v8::External>()->Value());
info.Data().As<v8::External>()->Value(
v8::kExternalPointerTypeTagDefault));
// Release the shared texture, so that future frames can be generated.
mon->ReleaseTexture();
// Release the monitor happens at GC, don't release here.

View File

@@ -14,7 +14,10 @@ namespace {
struct TranslatorHolder {
explicit TranslatorHolder(v8::Isolate* isolate)
: handle(isolate, v8::External::New(isolate, this)) {
: handle(isolate,
v8::External::New(isolate,
this,
v8::kExternalPointerTypeTagDefault)) {
handle.SetWeak(this, &GC, v8::WeakCallbackType::kParameter);
}
~TranslatorHolder() {
@@ -57,7 +60,8 @@ void CallTranslator(v8::Local<v8::External> external,
}
}
auto* holder = static_cast<TranslatorHolder*>(external->Value());
auto* holder = static_cast<TranslatorHolder*>(
external->Value(v8::kExternalPointerTypeTagDefault));
holder->translator.Run(args);
// Free immediately for one-time callback.