mirror of
https://github.com/electron/electron.git
synced 2026-04-10 03:01:51 -04:00
fix: values return from the ctx bridge with dynamic property support should themselves support dynamic properties (#28160)
Co-authored-by: Samuel Attard <sattard@slack-corp.com>
This commit is contained in:
@@ -485,13 +485,15 @@ v8::MaybeLocal<v8::Object> CreateProxyForAPI(
|
||||
v8::Local<v8::Value> setter_proxy;
|
||||
if (!getter.IsEmpty()) {
|
||||
if (!PassValueToOtherContext(source_context, destination_context,
|
||||
getter, object_cache, false, 1)
|
||||
getter, object_cache,
|
||||
support_dynamic_properties, 1)
|
||||
.ToLocal(&getter_proxy))
|
||||
continue;
|
||||
}
|
||||
if (!setter.IsEmpty()) {
|
||||
if (!PassValueToOtherContext(source_context, destination_context,
|
||||
setter, object_cache, false, 1)
|
||||
setter, object_cache,
|
||||
support_dynamic_properties, 1)
|
||||
.ToLocal(&setter_proxy))
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -727,6 +727,24 @@ describe('contextBridge', () => {
|
||||
expect(result).to.equal('hi there');
|
||||
});
|
||||
|
||||
it('should work with nested getters', async () => {
|
||||
await makeBindingWindow(() => {
|
||||
contextBridge.internalContextBridge!.overrideGlobalValueWithDynamicPropsFromIsolatedWorld(['thing'], {
|
||||
get foo () {
|
||||
return {
|
||||
get bar () {
|
||||
return 'hi there';
|
||||
}
|
||||
};
|
||||
}
|
||||
});
|
||||
});
|
||||
const result = await callWithBindings(async (root: any) => {
|
||||
return root.thing.foo.bar;
|
||||
});
|
||||
expect(result).to.equal('hi there');
|
||||
});
|
||||
|
||||
it('should work with setters', async () => {
|
||||
await makeBindingWindow(() => {
|
||||
let a: any = null;
|
||||
@@ -746,6 +764,29 @@ describe('contextBridge', () => {
|
||||
expect(result).to.equal(124);
|
||||
});
|
||||
|
||||
it('should work with nested getter / setter combos', async () => {
|
||||
await makeBindingWindow(() => {
|
||||
let a: any = null;
|
||||
contextBridge.internalContextBridge!.overrideGlobalValueWithDynamicPropsFromIsolatedWorld(['thing'], {
|
||||
get thingy () {
|
||||
return {
|
||||
get foo () {
|
||||
return a;
|
||||
},
|
||||
set foo (arg: any) {
|
||||
a = arg + 1;
|
||||
}
|
||||
};
|
||||
}
|
||||
});
|
||||
});
|
||||
const result = await callWithBindings(async (root: any) => {
|
||||
root.thing.thingy.foo = 123;
|
||||
return root.thing.thingy.foo;
|
||||
});
|
||||
expect(result).to.equal(124);
|
||||
});
|
||||
|
||||
it('should work with deep properties', async () => {
|
||||
await makeBindingWindow(() => {
|
||||
contextBridge.internalContextBridge.overrideGlobalValueWithDynamicPropsFromIsolatedWorld(['thing'], {
|
||||
|
||||
Reference in New Issue
Block a user