Bug 1356546: Part 3 - Use StructuredCloneHolder as transport for proxied message listeners. r=aswan
MozReview-Commit-ID: 2YeNuGkmY3k
--- a/toolkit/components/extensions/ExtensionChild.jsm
+++ b/toolkit/components/extensions/ExtensionChild.jsm
@@ -722,17 +722,19 @@ class ChildAPIManager {
}
switch (name || messageName) {
case "API:RunListener":
let map = this.listeners.get(data.path);
let listener = map.ids.get(data.listenerId);
if (listener) {
- return this.context.runSafe(listener, ...data.args);
+ let args = data.args.deserialize(this.context.cloneScope);
+
+ return this.context.runSafeWithoutClone(listener, ...args);
}
if (!map.removedIds.has(data.listenerId)) {
Services.console.logStringMessage(
`Unknown listener at childId=${data.childId} path=${data.path} listenerId=${data.listenerId}\n`);
}
break;
case "API:CallResult":
--- a/toolkit/components/extensions/ExtensionParent.jsm
+++ b/toolkit/components/extensions/ExtensionParent.jsm
@@ -644,17 +644,17 @@ ParentAPIManager = {
function listener(...listenerArgs) {
return context.sendMessage(
context.parentMessageManager,
"API:RunListener",
{
childId,
listenerId: data.listenerId,
path: data.path,
- args: listenerArgs,
+ args: new StructuredCloneHolder(listenerArgs),
},
{
recipient: {childId},
});
}
context.listenerProxies.set(data.listenerId, listener);