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"),
};
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 = self.documents.borrow().find_window(pipeline_id);
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);
}

View file

@ -14930,6 +14930,12 @@
"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": [
{
"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>