file_bug475636.sjs 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. jsURL = "javascript:" + escape('window.parent.postMessage("JS uri ran", "*");\
  2. return \'\
  3. <script>\
  4. window.parent.postMessage("Able to access private: " +\
  5. window.parent.private, "*");\
  6. </script>\'');
  7. dataURL = "data:text/html," + escape('<!DOCTYPE HTML>\
  8. <script>\
  9. try {\
  10. window.parent.postMessage("Able to access private: " +\
  11. window.parent.private, "*");\
  12. }\
  13. catch (e) {\
  14. window.parent.postMessage("pass", "*");\
  15. }\
  16. </script>');
  17. tests = [
  18. // Plain document should work as normal
  19. '<!DOCTYPE HTML>\
  20. <script>\
  21. try {\
  22. window.parent.private;\
  23. window.parent.postMessage("pass", "*");\
  24. }\
  25. catch (e) {\
  26. window.parent.postMessage("Unble to access private", "*");\
  27. }\
  28. </script>',
  29. // refresh to plain doc
  30. { refresh: "file_bug475636.sjs?1",
  31. doc: '<!DOCTYPE HTML>' },
  32. // meta-refresh to plain doc
  33. '<!DOCTYPE HTML>\
  34. <head>\
  35. <meta http-equiv="refresh" content="0; url=file_bug475636.sjs?1">\
  36. </head>',
  37. // refresh to data url
  38. { refresh: dataURL,
  39. doc: '<!DOCTYPE HTML>' },
  40. // meta-refresh to data url
  41. '<!DOCTYPE HTML>\
  42. <head>\
  43. <meta http-equiv="refresh" content="0; url=' + dataURL + '">\
  44. </head>',
  45. // refresh to js url should not be followed
  46. { refresh: jsURL,
  47. doc:
  48. '<!DOCTYPE HTML>\
  49. <script>\
  50. setTimeout(function() {\
  51. window.parent.postMessage("pass", "*");\
  52. }, 2000);\
  53. </script>' },
  54. // meta refresh to js url should not be followed
  55. '<!DOCTYPE HTML>\
  56. <head>\
  57. <meta http-equiv="refresh" content="0; url=' + jsURL + '">\
  58. </head>\
  59. <script>\
  60. setTimeout(function() {\
  61. window.parent.postMessage("pass", "*");\
  62. }, 2000);\
  63. </script>'
  64. ];
  65. function handleRequest(request, response)
  66. {
  67. dump("@@@@@@@@@hi there: " + request.queryString + "\n");
  68. test = tests[parseInt(request.queryString, 10) - 1];
  69. response.setHeader("Content-Type", "text/html");
  70. if (!test) {
  71. response.write('<script>parent.postMessage("done", "*");</script>');
  72. }
  73. else if (typeof test == "string") {
  74. response.write(test);
  75. }
  76. else if (test.refresh) {
  77. response.setHeader("Refresh", "0; url=" + test.refresh);
  78. response.write(test.doc);
  79. }
  80. }