aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom
diff options
context:
space:
mode:
authorGregory Terzian <gterzian@users.noreply.github.com>2018-05-20 23:49:15 +0800
committerGregory Terzian <gterzian@users.noreply.github.com>2018-05-22 18:11:45 +0800
commit57c0d82944969f7ee645c9208f41fb24e8561d43 (patch)
tree9f0e61c53b8ce41180add6e63c1d564b944613c6 /components/script/dom
parenta297e8f2881d0d1927160d2ebc0e4b26d71f2534 (diff)
downloadservo-57c0d82944969f7ee645c9208f41fb24e8561d43.tar.gz
servo-57c0d82944969f7ee645c9208f41fb24e8561d43.zip
prevent overwriting of salvageable state in later prompt/unload steps
Diffstat (limited to 'components/script/dom')
-rw-r--r--components/script/dom/document.rs16
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.