diff options
author | Gregory Terzian <gterzian@users.noreply.github.com> | 2018-05-20 23:49:15 +0800 |
---|---|---|
committer | Gregory Terzian <gterzian@users.noreply.github.com> | 2018-05-22 18:11:45 +0800 |
commit | 57c0d82944969f7ee645c9208f41fb24e8561d43 (patch) | |
tree | 9f0e61c53b8ce41180add6e63c1d564b944613c6 /components/script | |
parent | a297e8f2881d0d1927160d2ebc0e4b26d71f2534 (diff) | |
download | servo-57c0d82944969f7ee645c9208f41fb24e8561d43.tar.gz servo-57c0d82944969f7ee645c9208f41fb24e8561d43.zip |
prevent overwriting of salvageable state in later prompt/unload steps
Diffstat (limited to 'components/script')
-rw-r--r-- | components/script/dom/document.rs | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/components/script/dom/document.rs b/components/script/dom/document.rs index 3b6b92246f1..16adcd7edbd 100644 --- a/components/script/dom/document.rs +++ b/components/script/dom/document.rs @@ -1654,7 +1654,9 @@ impl Document { ); // TODO: Step 6, decrease the event loop's termination nesting level by 1. // Step 7 - self.salvageable.set(!has_listeners); + if has_listeners { + self.salvageable.set(false); + } let mut can_unload = true; // TODO: Step 8 send a message to embedder to prompt user. // Step 9 @@ -1662,9 +1664,11 @@ impl Document { for iframe in self.iter_iframes() { // TODO: handle the case of cross origin iframes. let document = document_from_node(&*iframe); - if !document.prompt_to_unload(true) { - self.salvageable.set(document.salvageable()); - can_unload = false; + can_unload = document.prompt_to_unload(true); + if !document.salvageable() { + self.salvageable.set(false); + } + if !can_unload { break; } } @@ -1715,7 +1719,9 @@ impl Document { ); self.fired_unload.set(true); // Step 9 - self.salvageable.set(!has_listeners); + if has_listeners { + self.salvageable.set(false); + } } // TODO: Step 8, decrease the event loop's termination nesting level by 1. |