mirror of
https://github.com/servo/servo.git
synced 2025-07-23 15:23: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) {
|
match self.browsing_contexts.get_mut(&browsing_context_id) {
|
||||||
Some(browsing_context) => {
|
Some(browsing_context) => {
|
||||||
let old_pipeline_id = browsing_context.pipeline_id;
|
let old_pipeline_id = browsing_context.pipeline_id;
|
||||||
browsing_context.update_current_entry(new_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 => {
|
None => {
|
||||||
return warn!(
|
return warn!(
|
||||||
|
@ -2662,6 +2666,7 @@ where
|
||||||
let msg = ConstellationControlMsg::UpdatePipelineId(
|
let msg = ConstellationControlMsg::UpdatePipelineId(
|
||||||
parent_pipeline_id,
|
parent_pipeline_id,
|
||||||
browsing_context_id,
|
browsing_context_id,
|
||||||
|
top_level_id,
|
||||||
new_pipeline_id,
|
new_pipeline_id,
|
||||||
UpdatePipelineIdReason::Traversal,
|
UpdatePipelineIdReason::Traversal,
|
||||||
);
|
);
|
||||||
|
@ -3581,6 +3586,7 @@ where
|
||||||
let msg = ConstellationControlMsg::UpdatePipelineId(
|
let msg = ConstellationControlMsg::UpdatePipelineId(
|
||||||
parent_pipeline_id,
|
parent_pipeline_id,
|
||||||
change.browsing_context_id,
|
change.browsing_context_id,
|
||||||
|
change.top_level_browsing_context_id,
|
||||||
pipeline_id,
|
pipeline_id,
|
||||||
UpdatePipelineIdReason::Navigation,
|
UpdatePipelineIdReason::Navigation,
|
||||||
);
|
);
|
||||||
|
|
|
@ -1429,7 +1429,7 @@ impl ScriptThread {
|
||||||
NotifyVisibilityChange(id, ..) => Some(id),
|
NotifyVisibilityChange(id, ..) => Some(id),
|
||||||
Navigate(id, ..) => Some(id),
|
Navigate(id, ..) => Some(id),
|
||||||
PostMessage { target: id, .. } => Some(id),
|
PostMessage { target: id, .. } => Some(id),
|
||||||
UpdatePipelineId(_, _, id, _) => Some(id),
|
UpdatePipelineId(_, _, _, id, _) => Some(id),
|
||||||
UpdateHistoryState(id, ..) => Some(id),
|
UpdateHistoryState(id, ..) => Some(id),
|
||||||
RemoveHistoryStates(id, ..) => Some(id),
|
RemoveHistoryStates(id, ..) => Some(id),
|
||||||
FocusIFrame(id, ..) => Some(id),
|
FocusIFrame(id, ..) => Some(id),
|
||||||
|
@ -1617,11 +1617,13 @@ impl ScriptThread {
|
||||||
ConstellationControlMsg::UpdatePipelineId(
|
ConstellationControlMsg::UpdatePipelineId(
|
||||||
parent_pipeline_id,
|
parent_pipeline_id,
|
||||||
browsing_context_id,
|
browsing_context_id,
|
||||||
|
top_level_browsing_context_id,
|
||||||
new_pipeline_id,
|
new_pipeline_id,
|
||||||
reason,
|
reason,
|
||||||
) => self.handle_update_pipeline_id(
|
) => self.handle_update_pipeline_id(
|
||||||
parent_pipeline_id,
|
parent_pipeline_id,
|
||||||
browsing_context_id,
|
browsing_context_id,
|
||||||
|
top_level_browsing_context_id,
|
||||||
new_pipeline_id,
|
new_pipeline_id,
|
||||||
reason,
|
reason,
|
||||||
),
|
),
|
||||||
|
@ -2153,6 +2155,7 @@ impl ScriptThread {
|
||||||
&self,
|
&self,
|
||||||
parent_pipeline_id: PipelineId,
|
parent_pipeline_id: PipelineId,
|
||||||
browsing_context_id: BrowsingContextId,
|
browsing_context_id: BrowsingContextId,
|
||||||
|
top_level_browsing_context_id: TopLevelBrowsingContextId,
|
||||||
new_pipeline_id: PipelineId,
|
new_pipeline_id: PipelineId,
|
||||||
reason: UpdatePipelineIdReason,
|
reason: UpdatePipelineIdReason,
|
||||||
) {
|
) {
|
||||||
|
@ -2163,6 +2166,21 @@ impl ScriptThread {
|
||||||
if let Some(frame_element) = frame_element {
|
if let Some(frame_element) = frame_element {
|
||||||
frame_element.update_pipeline_id(new_pipeline_id, reason);
|
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(
|
fn handle_update_history_state_msg(
|
||||||
|
@ -2870,6 +2888,7 @@ impl ScriptThread {
|
||||||
self.handle_update_pipeline_id(
|
self.handle_update_pipeline_id(
|
||||||
parent_pipeline,
|
parent_pipeline,
|
||||||
window_proxy.browsing_context_id(),
|
window_proxy.browsing_context_id(),
|
||||||
|
window_proxy.top_level_browsing_context_id(),
|
||||||
incomplete.pipeline_id,
|
incomplete.pipeline_id,
|
||||||
UpdatePipelineIdReason::Navigation,
|
UpdatePipelineIdReason::Navigation,
|
||||||
);
|
);
|
||||||
|
|
|
@ -303,6 +303,7 @@ pub enum ConstellationControlMsg {
|
||||||
UpdatePipelineId(
|
UpdatePipelineId(
|
||||||
PipelineId,
|
PipelineId,
|
||||||
BrowsingContextId,
|
BrowsingContextId,
|
||||||
|
TopLevelBrowsingContextId,
|
||||||
PipelineId,
|
PipelineId,
|
||||||
UpdatePipelineIdReason,
|
UpdatePipelineIdReason,
|
||||||
),
|
),
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue