mirror of
https://github.com/servo/servo.git
synced 2025-07-22 23:03:42 +01:00
Ensure iframe's contentWindow is updated when traversing the session history.
This commit is contained in:
parent
cc131be2e0
commit
edfd15c36f
3 changed files with 29 additions and 3 deletions
|
@ -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,
|
||||
);
|
||||
|
|
|
@ -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,
|
||||
);
|
||||
|
|
|
@ -303,6 +303,7 @@ pub enum ConstellationControlMsg {
|
|||
UpdatePipelineId(
|
||||
PipelineId,
|
||||
BrowsingContextId,
|
||||
TopLevelBrowsingContextId,
|
||||
PipelineId,
|
||||
UpdatePipelineIdReason,
|
||||
),
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue