Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(102)

Unified Diff: LayoutTests/fast/events/window-onerror-isolatedworld-02.html

Issue 19962008: Rewrite the 'window.onerror' tests. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: *facepalm* Created 7 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: LayoutTests/fast/events/window-onerror-isolatedworld-02.html
diff --git a/LayoutTests/fast/events/window-onerror-isolatedworld-02.html b/LayoutTests/fast/events/window-onerror-isolatedworld-02.html
new file mode 100644
index 0000000000000000000000000000000000000000..e502a93eaa63dd8355d9fcad52dbce95869959fa
--- /dev/null
+++ b/LayoutTests/fast/events/window-onerror-isolatedworld-02.html
@@ -0,0 +1,66 @@
+<!DOCTYPE html>
+<html>
+<head>
+</head>
+<body>
+ <p>Test that window.onerror and "error" event listeners from isolated world are
+ invoked for uncaught exceptions in scripts running in isolate worlds as
+ well as for exceptions in the main world.<a href="https://bugs.webkit.org/show_bug.cgi?id=8519">Bug 8519.</a>
+ </p>
+ <pre id="console"></pre>
+ <script>
+ var expectedRecordCount = 10;
+ var recordCount = 0;
+ document.getElementById("console").addEventListener("DOMNodeInserted", function(e) {
+ if (++recordCount === expectedRecordCount && window.testRunner)
+ testRunner.notifyDone();
+ }, false);
+
+
+ var throwExceptions = function(isolatedWorld)
+ {
+ window.addEventListener("load", function(e) {
+ // Do the following call from load listener to make sure error in the setTimeout callback always happens after the error in this listener.
+ setTimeout(function() {
+ throw new Error("Error in " + isolatedWorld + " setTimeout callback.");
+ }, 0);
+ throw new Error("Error in " + isolatedWorld + " load handler.");
+ }, false);
+
+ throw new Error("Error in "+ isolatedWorld + " inline script.");
+ };
+
+ var errorHandlers = function(isolatedWorld)
+ {
+ function lastUrlComponent(url) {
+ return url ? url.match( /[^\/]+\/?$/ )[0] : url;
+ }
+
+ function log(msg) {
+ var record = document.createElement("div");
+ record.innerHTML = msg;
+ document.getElementById("console").appendChild(record);
+ }
+
+ window.onerror = function(msg, url, line) {
+ log(isolatedWorld + " window.onerror: " + msg + " at " + lastUrlComponent(url) + ":" + line, "*");
+ return true;
+ }
+
+ window.addEventListener("error", function(e) {
+ var url = lastUrlComponent(e.filename);
+ log(isolatedWorld + " error event listener: " + e.message + " at " + url + ":" + e.lineno, "*");
+ e.preventDefault();
+ }, false);
+ };
+
+ if (window.testRunner) {
+ testRunner.dumpAsText();
+ testRunner.waitUntilDone();
+ testRunner.evaluateScriptInIsolatedWorld(1, "(" + errorHandlers + ")('isolated world'); (" + throwExceptions + ")('isolated world')");
+ }
+
+ throwExceptions("main world");
+ </script>
+</body>
+</html>

Powered by Google App Engine
This is Rietveld 408576698