aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--components/constellation/constellation.rs10
-rw-r--r--components/script/script_thread.rs21
-rw-r--r--components/script_traits/lib.rs1
3 files changed, 29 insertions, 3 deletions
diff --git a/components/constellation/constellation.rs b/components/constellation/constellation.rs
index 2b6df7d456a..f8804c4af7c 100644
--- a/components/constellation/constellation.rs
+++ b/components/constellation/constellation.rs
@@ -2640,12 +2640,16 @@ where
},
};
- let (old_pipeline_id, parent_pipeline_id) =
+ let (old_pipeline_id, parent_pipeline_id, top_level_id) =
match self.browsing_contexts.get_mut(&browsing_context_id) {
Some(browsing_context) => {
let old_pipeline_id = browsing_context.pipeline_id;
browsing_context.update_current_entry(new_pipeline_id);
- (old_pipeline_id, browsing_context.parent_pipeline_id)
+ (
+ old_pipeline_id,
+ browsing_context.parent_pipeline_id,
+ browsing_context.top_level_id,
+ )
},
None => {
return warn!(
@@ -2662,6 +2666,7 @@ where
let msg = ConstellationControlMsg::UpdatePipelineId(
parent_pipeline_id,
browsing_context_id,
+ top_level_id,
new_pipeline_id,
UpdatePipelineIdReason::Traversal,
);
@@ -3581,6 +3586,7 @@ where
let msg = ConstellationControlMsg::UpdatePipelineId(
parent_pipeline_id,
change.browsing_context_id,
+ change.top_level_browsing_context_id,
pipeline_id,
UpdatePipelineIdReason::Navigation,
);
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,
);
diff --git a/components/script_traits/lib.rs b/components/script_traits/lib.rs
index e2bc5c4d1ed..724d76daede 100644
--- a/components/script_traits/lib.rs
+++ b/components/script_traits/lib.rs
@@ -303,6 +303,7 @@ pub enum ConstellationControlMsg {
UpdatePipelineId(
PipelineId,
BrowsingContextId,
+ TopLevelBrowsingContextId,
PipelineId,
UpdatePipelineIdReason,
),