test_onerror_message.html (3473B)
1 <!DOCTYPE HTML> 2 <html> 3 <!-- 4 https://bugzilla.mozilla.org/show_bug.cgi?id=743049 5 --> 6 <head> 7 <meta charset="UTF-8"> 8 <title>Test for Bug 743049</title> 9 <script src="/tests/SimpleTest/SimpleTest.js"></script> 10 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> 11 </head> 12 <body> 13 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=743049">Mozilla Bug 743049</a> 14 <p id="display"></p> 15 <div id="content" style="display: none"> 16 <iframe id="frame"></iframe> 17 </div> 18 <pre id="test"> 19 <script type="application/javascript"> 20 "use strict"; 21 22 /** Test for Bug 743049 */ 23 24 var expected = [ 25 { name: "Error", message: "foo", filename: String(location), lineNumber: 44 }, 26 { name: "Error", message: "foo", filename: "bar", lineNumber: 123 }, 27 { name: "", message: "uncaught exception: [object Object]", filename: location.href, lineNumber: 77 }, 28 { name: "", message: "uncaught exception: [object Object]", filename: location.href, lineNumber: 77 }, 29 { name: "Error", message: "msg", filename: location.href, lineNumber: 52 }, 30 { name: "MyException", message: "msg", filename: location.href, lineNumber: 54}, 31 { name: "InvalidStateError", message: "XMLHttpRequest.responseType setter: Cannot set 'responseType' property on XMLHttpRequest after 'send()' (when its state is LOADING or DONE).", filename: String(location), lineNumber: 59 }, 32 { name: "ReferenceError", message: "xxx is not defined", filename: String(location), lineNumber: 61 }, 33 { name: "ReferenceError", message: "xxx is not defined", filename: String(location), lineNumber: 63 } 34 ]; 35 36 var counter = 0; 37 var origin = location.protocol + "//" + location.host; 38 postMessage(counter, origin); 39 window.onmessage = function(e) { 40 if (e.origin !== origin) 41 return; 42 try { 43 if (e.data == 0) { 44 throw new Error("foo"); 45 } else if (e.data == 1) { 46 throw new Error("foo","bar", 123); 47 } else if (e.data == 2) { 48 throw {}; 49 } else if (e.data == 3) { 50 throw {name:"DuckError",message:"foo",filename:"bar",lineNumber:123}; 51 } else if (e.data == 4) { 52 throw new DOMException("msg"); 53 } else if (e.data == 5) { 54 throw new DOMException("msg", "MyException"); 55 } else if (e.data == 6) { 56 var x = new XMLHttpRequest(); 57 x.open("GET", location, false); 58 var a = x.send(); 59 x.responseType = "arraybuffer"; 60 } else if (e.data == 7) { 61 throw new ReferenceError("xxx is not defined"); 62 } else if (e.data == 8) { 63 new xxx; 64 } else { 65 SimpleTest.finish(); 66 return; 67 } 68 } catch (e) { 69 if (e instanceof Error || typeof e.message=="string" && e.name != "DuckError" && 70 ("filename" in e || "fileName" in e) && "lineNumber" in e) { 71 is(e.message, expected[counter].message, counter + " catch message"); 72 is(e.filename || e.fileName, expected[counter].filename, counter + " catch filename"); 73 is(e.lineNumber, expected[counter].lineNumber, counter + " catch lineno"); 74 } else { 75 is("uncaught exception: " + e, expected[counter].message, counter + " catch message"); 76 } 77 throw e; 78 } 79 ok(false, counter + " Error should be thrown or test should finish"); 80 }; 81 window.onerror = function(message, filename, lineno) { 82 is(message, Error.prototype.toString.call(expected[counter]), counter + " onerror message"); 83 is(filename, expected[counter].filename, counter + " onerror filename"); 84 is(lineno, expected[counter].lineNumber, counter + " onerror lineno"); 85 postMessage(++counter, origin); 86 return true; 87 }; 88 89 SimpleTest.waitForExplicitFinish(); 90 91 </script> 92 </pre> 93 </body> 94 </html>