From 8ea3cbf18a72efed413b75d95f71099c16886ac2 Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Tue, 6 May 2014 12:16:03 +0200 Subject: Enter a compartment when calling callbacks. --- src/components/script/dom/bindings/codegen/CodegenRust.py | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) (limited to 'src/components/script/dom/bindings/codegen/CodegenRust.py') diff --git a/src/components/script/dom/bindings/codegen/CodegenRust.py b/src/components/script/dom/bindings/codegen/CodegenRust.py index 3e86f722869..4429298f5a4 100644 --- a/src/components/script/dom/bindings/codegen/CodegenRust.py +++ b/src/components/script/dom/bindings/codegen/CodegenRust.py @@ -4859,14 +4859,21 @@ class CallbackMember(CGNativeMember): # Avoid weird 0-sized arrays replacements["argvDecl"] = "" - return string.Template( - # Newlines and semicolons are in the values + # Newlines and semicolons are in the values + pre = string.Template( "${setupCall}" "${declRval}" - "${argvDecl}" + "${argvDecl}").substitute(replacements) + body = string.Template( "${convertArgs}" "${doCall}" "${returnResult}").substitute(replacements) + return CGList([ + CGGeneric(pre), + CGWrapper(CGIndenter(CGGeneric(body)), + pre="with_compartment(cx, self.parent.callback, || {\n", + post="})") + ], "\n").define() def getResultConversion(self): replacements = { @@ -4889,7 +4896,7 @@ class CallbackMember(CGNativeMember): assignRetval = string.Template( self.getRetvalInfo(self.retvalType, False)[2]).substitute(replacements) - return convertType.define() + "\n" + assignRetval + return convertType.define() + "\n" + assignRetval + "\n" def getArgConversions(self): # Just reget the arglist from self.originalSig, because our superclasses -- cgit v1.2.3