www

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | Submodules | README | LICENSE

commit f7e6843d68920f4a90afa1d5354742922ebf4d2c
parent 95003c88e4f5d05e2f7aea9c166f3f3f7ab752aa
Author: Simon Kornblith <simon@simonster.com>
Date:   Sun, 24 Oct 2010 19:04:44 +0000

a marginally better solution to XPCCrossOriginWrapper woes achieved by binding child sandboxes to the same locations as parent sandboxes

this won't work if a web/search translator wants to call getTranslatorObject on another web/search translator, but that doesn't happen at the moment, so it should sufficie


Diffstat:
Mchrome/content/zotero/xpcom/translate.js | 28++++++++++++++--------------
1 file changed, 14 insertions(+), 14 deletions(-)

diff --git a/chrome/content/zotero/xpcom/translate.js b/chrome/content/zotero/xpcom/translate.js @@ -929,21 +929,20 @@ Zotero.Translate.prototype._generateSandbox = function() { var sandboxLocation = "http://www.example.com/"; if(this.type == "web") { // use real URL, not proxied version, to create sandbox - sandboxLocation = this.document.defaultView; - Zotero.debug("Translate: Binding sandbox to "+this.document.location.href, 4); - } else { - if (this.type == "search") { - // generate sandbox for search by extracting domain from translator target - if(this.translator && this.translator[0] && this.translator[0].target) { - // so that web translators work too - const searchSandboxRe = /^http:\/\/[\w.]+\//; - var tempURL = this.translator[0].target.replace(/\\/g, "").replace(/\^/g, ""); - var m = searchSandboxRe.exec(tempURL); - if(m) sandboxLocation = m[0]; - } + var sandboxLocation = this.document.defaultView; + } else if(this.type == "search") { + // generate sandbox for search by extracting domain from translator target + if(this.translator && this.translator[0] && this.translator[0].target) { + // so that web translators work too + const searchSandboxRe = /^http:\/\/[\w.]+\//; + var tempURL = this.translator[0].target.replace(/\\/g, "").replace(/\^/g, ""); + var m = searchSandboxRe.exec(tempURL); + if(m) sandboxLocation = m[0]; } - Zotero.debug("Translate: Binding sandbox to "+sandboxLocation, 4); + } else if(this._sandboxLocation) { + sandboxLocation = this._sandboxLocation; } + Zotero.debug("Translate: Binding sandbox to "+(typeof sandboxLocation == "object" ? sandboxLocation.document.location : sandboxLocation), 4); // set up sandbox this._sandbox = new Components.utils.Sandbox(sandboxLocation); @@ -1002,6 +1001,7 @@ Zotero.Translate.prototype._generateSandbox = function() { var translation = new Zotero.Translate(type); translation._parentTranslator = me; + translation._sandboxLocation = sandboxLocation; if(type == "export" && (me.type == "web" || me.type == "search")) { throw("for security reasons, web and search translators may not call export translators"); @@ -1016,7 +1016,7 @@ Zotero.Translate.prototype._generateSandbox = function() { translation.setHandler(arg1, function(obj, item) { try { - if(Zotero.isFx4) { + if(Zotero.isFx4 && (me.type == "web" || me.type == "search")) { // item is wrapped in an XPCCrossOriginWrapper that we can't get rid of // except by making a deep copy. seems to be due to // https://bugzilla.mozilla.org/show_bug.cgi?id=580128