diff options
Diffstat (limited to 'components')
-rw-r--r-- | components/script/dom/document.rs | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/components/script/dom/document.rs b/components/script/dom/document.rs index 5c9cd57b128..9a33121b5ae 100644 --- a/components/script/dom/document.rs +++ b/components/script/dom/document.rs @@ -483,6 +483,36 @@ impl Document { self.dirty_all_nodes(); self.window().reflow(ReflowGoal::Full, ReflowReason::CachedPageNeededReflow); self.window().resume(); + // html.spec.whatwg.org/multipage/browsing-the-web.html#history-traversal + // Step 6 + if self.ready_state.get() == DocumentReadyState::Complete { + let document = Trusted::new(self); + self.window.dom_manipulation_task_source().queue( + task!(fire_pageshow_event: move || { + let document = document.root(); + let window = document.window(); + if document.page_showing.get() || !window.is_alive() { + return; + } + document.page_showing.set(true); + let event = PageTransitionEvent::new( + window, + atom!("pageshow"), + false, // bubbles + false, // cancelable + true, // persisted + ); + let event = event.upcast::<Event>(); + event.set_trusted(true); + // FIXME(nox): Why are errors silenced here? + let _ = window.upcast::<EventTarget>().dispatch_event_with_target( + document.upcast(), + &event, + ); + }), + self.window.upcast(), + ).unwrap(); + } } else { self.window().suspend(); } |