Bug 1356546: Part 3 - Use StructuredCloneHolder as transport for proxied message listeners. r=aswan draft
authorKris Maglione <maglione.k@gmail.com>
Sat, 06 May 2017 21:21:37 -0700
changeset 582063 53fa565137d7f676c9da7ef6a3e992f7a515f168
parent 582062 af66552457b99e1955ba30d3105bdcfc0af17333
child 582064 0e5d4b4575a17533724b4f885c41157ce7361f16
child 585269 3e738474910fb6f48defae781f38c733d59f4593
push id59956
push usermaglione.k@gmail.com
push dateSat, 20 May 2017 22:13:12 +0000
reviewersaswan
bugs1356546
milestone55.0a1
Bug 1356546: Part 3 - Use StructuredCloneHolder as transport for proxied message listeners. r=aswan MozReview-Commit-ID: 2YeNuGkmY3k
toolkit/components/extensions/ExtensionChild.jsm
toolkit/components/extensions/ExtensionParent.jsm
--- 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);