Warn when a timer event is processed for a discarded document.

This commit is contained in:
Josh Matthews 2016-12-22 16:56:25 -05:00
parent d918c14247
commit 8ca387c0e0
3 changed files with 25 additions and 2 deletions

View file

@ -1049,8 +1049,11 @@ impl ScriptThread {
TimerSource::FromWorker => panic!("Worker timeouts must not be sent to script thread"), TimerSource::FromWorker => panic!("Worker timeouts must not be sent to script thread"),
}; };
let window = self.documents.borrow().find_window(pipeline_id) let window = self.documents.borrow().find_window(pipeline_id);
.expect("ScriptThread: received fire timer msg for a pipeline not in this script thread. This is a bug."); let window = match window {
Some(w) => w,
None => return warn!("Received fire timer msg for a closed pipeline {}.", pipeline_id),
};
window.handle_fire_timer(id); window.handle_fire_timer(id);
} }

View file

@ -14930,6 +14930,12 @@
"url": "/_mozilla/mozilla/textcontent.html" "url": "/_mozilla/mozilla/textcontent.html"
} }
], ],
"mozilla/timeout-in-discarded-document.html": [
{
"path": "mozilla/timeout-in-discarded-document.html",
"url": "/_mozilla/mozilla/timeout-in-discarded-document.html"
}
],
"mozilla/timer_eventInvalidation.html": [ "mozilla/timer_eventInvalidation.html": [
{ {
"path": "mozilla/timer_eventInvalidation.html", "path": "mozilla/timer_eventInvalidation.html",

View file

@ -0,0 +1,14 @@
<!doctype html>
<meta charset="utf-8">
<title>Timeout in a discarded document doesn't break the browser.</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<iframe></iframe>
<script>
async_test(function(t) {
var i = document.querySelector('iframe');
i.contentWindow.setTimeout(function() {}, 10);
i.remove();
t.step_timeout(function() { t.done() }, 100);
});
</script>