blob: d923f68191891e88700a1c0589a23188d3a9d8d2 [file] [log] [blame]
/*
Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
Available via Academic Free License >= 2.1 OR the modified BSD license.
see: http://dojotoolkit.org/license for details
*/
if(!dojo._hasResource["dojox.secure.sandbox"]){
dojo._hasResource["dojox.secure.sandbox"]=true;
dojo.provide("dojox.secure.sandbox");
dojo.require("dojox.secure.DOM");
dojo.require("dojox.secure.capability");
dojo.require("dojo.NodeList-fx");
(function(){
var _1=setTimeout;
var _2=setInterval;
if({}.__proto__){
var _3=function(_4){
var _5=Array.prototype[_4];
if(_5&&!_5.fixed){
(Array.prototype[_4]=function(){
if(this==window){
throw new TypeError("Called with wrong this");
}
return _5.apply(this,arguments);
}).fixed=true;
}
};
_3("concat");
_3("reverse");
_3("sort");
_3("slice");
_3("forEach");
_3("filter");
_3("reduce");
_3("reduceRight");
_3("every");
_3("map");
_3("some");
}
var _6=function(){
return dojo.xhrGet.apply(dojo,arguments);
};
dojox.secure.sandbox=function(_7){
var _8=dojox.secure.DOM(_7);
_7=_8(_7);
var _9=_7.ownerDocument;
var _a,_b=dojox.secure._safeDojoFunctions(_7,_8);
var _c=[];
var _d=["isNaN","isFinite","parseInt","parseFloat","escape","unescape","encodeURI","encodeURIComponent","decodeURI","decodeURIComponent","alert","confirm","prompt","Error","EvalError","RangeError","ReferenceError","SyntaxError","TypeError","Date","RegExp","Number","Object","Array","String","Math","setTimeout","setInterval","clearTimeout","clearInterval","dojo","get","set","forEach","load","evaluate"];
for(var i in _b){
_d.push(i);
_c.push("var "+i+"=dojo."+i);
}
eval(_c.join(";"));
function _e(_f,_10){
_10=""+_10;
if(dojox.secure.badProps.test(_10)){
throw new Error("bad property access");
}
if(_f.__get__){
return _f.__get__(_10);
}
return _f[_10];
};
function set(obj,_11,_12){
_11=""+_11;
_e(obj,_11);
if(obj.__set){
return obj.__set(_11);
}
obj[_11]=_12;
return _12;
};
function _13(obj,fun){
if(typeof fun!="function"){
throw new TypeError();
}
if("length" in obj){
if(obj.__get__){
var len=obj.__get__("length");
for(var i=0;i<len;i++){
if(i in obj){
fun.call(obj,obj.__get__(i),i,obj);
}
}
}else{
len=obj.length;
for(i=0;i<len;i++){
if(i in obj){
fun.call(obj,obj[i],i,obj);
}
}
}
}else{
for(i in obj){
fun.call(obj,_e(obj,i),i,obj);
}
}
};
function _14(_15,_16,_17){
var _18,_19,_1a;
var arg;
for(var i=0,l=arguments.length;typeof (arg=arguments[i])=="function"&&i<l;i++){
if(_18){
_a(_18,arg.prototype);
}else{
_19=arg;
var F=function(){
};
F.prototype=arg.prototype;
_18=new F;
}
}
if(arg){
for(var j in arg){
var _1b=arg[j];
if(typeof _1b=="function"){
arg[j]=function(){
if(this instanceof _14){
return arguments.callee.__rawMethod__.apply(this,arguments);
}
throw new Error("Method called on wrong object");
};
arg[j].__rawMethod__=_1b;
}
}
if(arg.hasOwnProperty("constructor")){
_1a=arg.constructor;
}
}
_18=_18?_a(_18,arg):arg;
function _14(){
if(_19){
_19.apply(this,arguments);
}
if(_1a){
_1a.apply(this,arguments);
}
};
_a(_14,arguments[i]);
_18.constructor=_14;
_14.prototype=_18;
return _14;
};
function _1c(_1d){
if(typeof _1d!="function"){
throw new Error("String is not allowed in setTimeout/setInterval");
}
};
function _1e(_1f,_20){
_1c(_1f);
return _1(_1f,_20);
};
function _21(_22,_23){
_1c(_22);
return _2(_22,_23);
};
function _24(_25){
return _8.evaluate(_25);
};
var _26=_8.load=function(url){
if(url.match(/^[\w\s]*:/)){
throw new Error("Access denied to cross-site requests");
}
return _6({url:(new _b._Url(_8.rootUrl,url))+"",secure:true});
};
_8.evaluate=function(_27){
dojox.secure.capability.validate(_27,_d,{document:1,element:1});
if(_27.match(/^\s*[\[\{]/)){
var _28=eval("("+_27+")");
}else{
eval(_27);
}
};
return {loadJS:function(url){
_8.rootUrl=url;
return _6({url:url,secure:true}).addCallback(function(_29){
_24(_29,_7);
});
},loadHTML:function(url){
_8.rootUrl=url;
return _6({url:url,secure:true}).addCallback(function(_2a){
_7.innerHTML=_2a;
});
},evaluate:function(_2b){
return _8.evaluate(_2b);
}};
};
})();
dojox.secure._safeDojoFunctions=function(_2c,_2d){
var _2e=["mixin","require","isString","isArray","isFunction","isObject","isArrayLike","isAlien","hitch","delegate","partial","trim","disconnect","subscribe","unsubscribe","Deferred","toJson","style","attr"];
var doc=_2c.ownerDocument;
var _2f=dojox.secure.unwrap;
dojo.NodeList.prototype.addContent.safetyCheck=function(_30){
_2d.safeHTML(_30);
};
dojo.NodeList.prototype.style.safetyCheck=function(_31,_32){
if(_31=="behavior"){
throw new Error("Can not set behavior");
}
_2d.safeCSS(_32);
};
dojo.NodeList.prototype.attr.safetyCheck=function(_33,_34){
if(_34&&(_33=="src"||_33=="href"||_33=="style")){
throw new Error("Illegal to set "+_33);
}
};
var _35={query:function(_36,_37){
return _2d(dojo.query(_36,_2f(_37||_2c)));
},connect:function(el,_38){
var obj=el;
arguments[0]=_2f(el);
if(obj!=arguments[0]&&_38.substring(0,2)!="on"){
throw new Error("Invalid event name for element");
}
return dojo.connect.apply(dojo,arguments);
},body:function(){
return _2c;
},byId:function(id){
return _2c.ownerDocument.getElementById(id);
},fromJson:function(str){
dojox.secure.capability.validate(str,[],{});
return dojo.fromJson(str);
}};
for(var i=0;i<_2e.length;i++){
_35[_2e[i]]=dojo[_2e[i]];
}
return _35;
};
}