aboutsummaryrefslogtreecommitdiffstats
path: root/components/script
diff options
context:
space:
mode:
Diffstat (limited to 'components/script')
-rw-r--r--components/script/dom/history.rs7
-rw-r--r--components/script/script_thread.rs10
2 files changed, 17 insertions, 0 deletions
diff --git a/components/script/dom/history.rs b/components/script/dom/history.rs
index b158a9d44fd..e18e06cecea 100644
--- a/components/script/dom/history.rs
+++ b/components/script/dom/history.rs
@@ -102,6 +102,13 @@ impl History {
}
}
+ pub fn remove_states(&self, states: Vec<HistoryStateId>) {
+ let _ = self.window
+ .upcast::<GlobalScope>()
+ .resource_threads()
+ .send(CoreResourceMsg::RemoveHistoryStates(states));
+ }
+
// https://html.spec.whatwg.org/multipage/#dom-history-pushstate
// https://html.spec.whatwg.org/multipage/#dom-history-replacestate
fn push_or_replace_state(&self,
diff --git a/components/script/script_thread.rs b/components/script/script_thread.rs
index c188caed353..4e89ba4ceff 100644
--- a/components/script/script_thread.rs
+++ b/components/script/script_thread.rs
@@ -1170,6 +1170,7 @@ impl ScriptThread {
PostMessage(id, ..) => Some(id),
UpdatePipelineId(_, _, id, _) => Some(id),
UpdateHistoryStateId(id, ..) => Some(id),
+ RemoveHistoryStates(id, ..) => Some(id),
FocusIFrame(id, ..) => Some(id),
WebDriverScriptCommand(id, ..) => Some(id),
TickAllAnimations(id) => Some(id),
@@ -1298,6 +1299,8 @@ impl ScriptThread {
reason),
ConstellationControlMsg::UpdateHistoryStateId(pipeline_id, history_state_id) =>
self.handle_update_history_state_id_msg(pipeline_id, history_state_id),
+ ConstellationControlMsg::RemoveHistoryStates(pipeline_id, history_states) =>
+ self.handle_remove_history_states(pipeline_id, history_states),
ConstellationControlMsg::FocusIFrame(parent_pipeline_id, frame_id) =>
self.handle_focus_iframe_msg(parent_pipeline_id, frame_id),
ConstellationControlMsg::WebDriverScriptCommand(pipeline_id, msg) =>
@@ -1683,6 +1686,13 @@ impl ScriptThread {
}
}
+ fn handle_remove_history_states(&self, pipeline_id: PipelineId, history_states: Vec<HistoryStateId>) {
+ match { self.documents.borrow().find_window(pipeline_id) } {
+ None => return warn!("update history state after pipeline {} closed.", pipeline_id),
+ Some(window) => window.History().r().remove_states(history_states),
+ }
+ }
+
/// Window was resized, but this script was not active, so don't reflow yet
fn handle_resize_inactive_msg(&self, id: PipelineId, new_size: WindowSizeData) {
let window = self.documents.borrow().find_window(id)