Вход Регистрация
Файл: library/wysihtml5/test/dom/sandbox_test.js
Строк: 317
<?php
module
("wysihtml5.dom.Sandbox", {
  
teardown: function() {
    var 
iframe;
    while (
iframe document.querySelector("iframe.wysihtml5-sandbox")) {
      
iframe.parentNode.removeChild(iframe);
    }
  },
  
  
getCharset: function(doc) {
    var 
charset doc.characterSet || doc.charset;
    if (/
unicode|utf-8/.test(charset)) {
      return 
"utf-8";
    }
    return 
charset;
  },
  
  eval: function(
iframeWindowcode) {
    try {
      return 
iframeWindow.execScript iframeWindow.execScript(code) : iframeWindow.eval(code);
    } catch(
e) {
      return 
null;
    }
  },
  
  
isUnset: function(evalCodeiframeWindow) {
    var 
value this.eval(iframeWindowevalCode);
    return !
value || value == wysihtml5.EMPTY_FUNCTION;
  }
});


asyncTest("Basic Test", function() {
  
expect(8);
  
  var 
sandbox = new wysihtml5.dom.Sandbox(function(param) {
    
equal(paramsandbox"The parameter passed into the readyCallback is the sandbox instance");
    
    var 
iframes document.querySelectorAll("iframe.wysihtml5-sandbox");
    
equal(iframes.length1"iFrame sandbox inserted into dom tree");
    
    var 
iframe iframes[iframes.length 1],
        
isIframeInvisible iframe.width == && iframe.height == && iframe.frameBorder == 0;
    
ok(isIframeInvisible"iframe is not visible");
    
    var 
isSandboxed iframe.getAttribute("security") == "restricted";
    
ok(isSandboxed"iFrame is sandboxed");
    
    var 
isWindowObject sandbox.getWindow().setInterval && sandbox.getWindow().clearInterval;
    
ok(isWindowObject"wysihtml5.Sandbox.prototype.getWindow() works properly");
    
    var 
isDocumentObject sandbox.getDocument().appendChild && sandbox.getDocument().body;
    
ok(isDocumentObject"wysihtml5.Sandbox.prototype.getDocument() works properly");
    
    
equal(sandbox.getIframe(), iframe"wysihtml5.Sandbox.prototype.getIframe() returns the iframe correctly");
    
equal(typeof(sandbox.getWindow().onerror), "function""window.onerror is set");
    
    
start();
  });
  
  
sandbox.insertInto(document.body);
});


asyncTest("Security test #1", function() {
  
expect(14);
  
  var 
that this;
  
  var 
sandbox = new wysihtml5.dom.Sandbox(function() {
    var 
iframeWindow sandbox.getWindow();
    
    var 
isSafari wysihtml5.browser.USER_AGENT.indexOf("Safari") !== -&& wysihtml5.browser.USER_AGENT.indexOf("Chrome") === 1;
    
    if (
isSafari) {
      
// This test fails in Safari 5, as it's impossible to unset a cookie there
      
ok(true"Cookie is NOT unset (but that's expected in Safari)");
    } else {
      
ok(that.isUnset("document.cookie"iframeWindow), "Cookie is unset");
    }
    
    
ok(that.isUnset("document.open"iframeWindow),         "document.open is unset");
    
ok(that.isUnset("document.write"iframeWindow),        "document.write is unset");
    
ok(that.isUnset("window.parent"iframeWindow),         "window.parent is unset");
    
ok(that.isUnset("window.opener"iframeWindow),         "window.opener is unset");
    
ok(that.isUnset("window.localStorage"iframeWindow),   "localStorage is unset");
    
ok(that.isUnset("window.globalStorage"iframeWindow),  "globalStorage is unset");
    
ok(that.isUnset("window.XMLHttpRequest"iframeWindow), "XMLHttpRequest is an empty function");
    
ok(that.isUnset("window.XDomainRequest"iframeWindow), "XDomainRequest is an empty function");
    
ok(that.isUnset("window.alert"iframeWindow),          "alert is an empty function");
    
ok(that.isUnset("window.prompt"iframeWindow),         "prompt is an empty function");
    
ok(that.isUnset("window.openDatabase"iframeWindow),   "window.openDatabase is unset");
    
ok(that.isUnset("window.indexedDB"iframeWindow),      "window.indexedDB is unset");
    
ok(that.isUnset("window.postMessage"iframeWindow),    "window.openDatabase is unset");
    
    
start();
  });
  
  
sandbox.insertInto(document.body);
});


asyncTest("Security test #2", function() {
  
expect(2);
  
  var 
sandbox = new wysihtml5.dom.Sandbox(function() {
    var 
html '<img src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" onerror="#{script}" onload="try { window.parent._hackedCookie=document.cookie; } catch(e){}; try { window.parent._hackedVariable=1; } catch(e) {}">';
    
sandbox.getDocument().body.innerHTML html;
    
    
setTimeout(function() {
      
equal(window._hackedCookie   || """""Cookie can't be easily stolen");
      
equal(window._hackedVariable || 00"iFrame has no access to parent");
      
      
start();
    }, 
2000);
  });
  
  
sandbox.insertInto(document.body);
});


asyncTest("Check charset & doctype", function() {
  
expect(3);
  
  var 
that this;
  
  var 
sandbox = new wysihtml5.dom.Sandbox(function() {
    var 
iframeDocument sandbox.getDocument(),
        
isQuirksMode   iframeDocument.compatMode == "BackCompat";
    
    
ok(!isQuirksMode"iFrame isn't in quirks mode");
    
equal(that.getCharset(iframeDocument), that.getCharset(document), "Charset correctly inherited by iframe");
    
    
iframeDocument.body.innerHTML '<meta charset="iso-8859-1">&uuml;';
    
    
setTimeout(function() {
      
equal(that.getCharset(iframeDocument), that.getCharset(document), "Charset isn't overwritten");
      
start();
    }, 
500);
  });
  
  
sandbox.insertInto(document.body);
});


asyncTest("Check insertion of single stylesheet", function() {
  
expect(1);
  
  new 
wysihtml5.dom.Sandbox(function(sandbox) {
    var 
doc sandbox.getDocument();
    
equal(doc.getElementsByTagName("link").length1"Correct amount of stylesheets inserted into the dom tree");
    
start();
  }, {
    
stylesheets"https://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/themes/blitzer/jquery-ui.css"
  
}).insertInto(document.body);
});


asyncTest("Check insertion of multiple stylesheets", function() {
  
expect(1);
  
  new 
wysihtml5.dom.Sandbox(function(sandbox) {
    var 
doc sandbox.getDocument();
    
equal(doc.getElementsByTagName("link").length2"Correct amount of stylesheets inserted into the dom tree");
    
start();
  }, {
    
stylesheets: [
      
"https://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/themes/blitzer/jquery-ui.css",
      
"https://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/themes/excite-bike/jquery-ui.css"
    
]
  }).
insertInto(document.body);
});


asyncTest("Check X-UA-Compatible", function() {
  
expect(1);
  
  new 
wysihtml5.dom.Sandbox(function(sandbox) {
    var 
doc                 sandbox.getDocument(),
        
docMode             doc.documentMode;
    
    
ok(doc.documentMode === document.documentMode"iFrame is in in the same document mode as the parent site");
    
start();
  }).
insertInto(document.body);
});
?>
Онлайн: 0
Реклама