aboutsummaryrefslogtreecommitdiffstats
path: root/components/script
diff options
context:
space:
mode:
authorJosh Matthews <josh@joshmatthews.net>2019-03-07 18:58:53 -0500
committerJosh Matthews <josh@joshmatthews.net>2019-03-07 18:58:53 -0500
commitedfd15c36f9c050512ebdfab3553cd3a7f6ff06f (patch)
tree89e8a02b8c1981f58f9ef95f153a387bbf49ac30 /components/script
parentcc131be2e0f48924ffc8cdfc017fc23c361f1140 (diff)
downloadservo-edfd15c36f9c050512ebdfab3553cd3a7f6ff06f.tar.gz
servo-edfd15c36f9c050512ebdfab3553cd3a7f6ff06f.zip
Ensure iframe's contentWindow is updated when traversing the session history.
Diffstat (limited to 'components/script')
-rw-r--r--components/script/script_thread.rs21
1 files changed, 20 insertions, 1 deletions
diff --git a/components/script/script_thread.rs b/components/script/script_thread.rs
index 4076a56f9ca..448acd23790 100644
--- a/components/script/script_thread.rs
+++ b/components/script/script_thread.rs
@@ -1429,7 +1429,7 @@ impl ScriptThread {
NotifyVisibilityChange(id, ..) => Some(id),
Navigate(id, ..) => Some(id),
PostMessage { target: id, .. } => Some(id),
- UpdatePipelineId(_, _, id, _) => Some(id),
+ UpdatePipelineId(_, _, _, id, _) => Some(id),
UpdateHistoryState(id, ..) => Some(id),
RemoveHistoryStates(id, ..) => Some(id),
FocusIFrame(id, ..) => Some(id),
@@ -1617,11 +1617,13 @@ impl ScriptThread {
ConstellationControlMsg::UpdatePipelineId(
parent_pipeline_id,
browsing_context_id,
+ top_level_browsing_context_id,
new_pipeline_id,
reason,
) => self.handle_update_pipeline_id(
parent_pipeline_id,
browsing_context_id,
+ top_level_browsing_context_id,
new_pipeline_id,
reason,
),
@@ -2153,6 +2155,7 @@ impl ScriptThread {
&self,
parent_pipeline_id: PipelineId,
browsing_context_id: BrowsingContextId,
+ top_level_browsing_context_id: TopLevelBrowsingContextId,
new_pipeline_id: PipelineId,
reason: UpdatePipelineIdReason,
) {
@@ -2163,6 +2166,21 @@ impl ScriptThread {
if let Some(frame_element) = frame_element {
frame_element.update_pipeline_id(new_pipeline_id, reason);
}
+
+ if let Some(window) = self.documents.borrow().find_window(new_pipeline_id) {
+ // Ensure that the state of any local window proxies accurately reflects
+ // the new pipeline.
+ let _ = self.local_window_proxy(
+ &*window,
+ browsing_context_id,
+ top_level_browsing_context_id,
+ Some(parent_pipeline_id),
+ // Any local window proxy has already been created, so there
+ // is no need to pass along existing opener information that
+ // will be discarded.
+ None,
+ );
+ }
}
fn handle_update_history_state_msg(
@@ -2870,6 +2888,7 @@ impl ScriptThread {
self.handle_update_pipeline_id(
parent_pipeline,
window_proxy.browsing_context_id(),
+ window_proxy.top_level_browsing_context_id(),
incomplete.pipeline_id,
UpdatePipelineIdReason::Navigation,
);