mirror of
https://github.com/servo/servo.git
synced 2025-06-10 09:33:13 +00:00
Ensures that iframe navigation updates the parent iframe element subpage id.
This fixes the case of clicking a link in an iframe, going back, then clicking the link again.
This commit is contained in:
parent
5ce7d8accf
commit
06a79243a7
4 changed files with 40 additions and 0 deletions
|
@ -652,6 +652,10 @@ impl ScriptTask {
|
|||
subpage_id,
|
||||
event_name,
|
||||
event_detail),
|
||||
ConstellationControlMsg::UpdateSubpageId(containing_pipeline_id,
|
||||
old_subpage_id,
|
||||
new_subpage_id) =>
|
||||
self.handle_update_subpage_id(containing_pipeline_id, old_subpage_id, new_subpage_id),
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -817,6 +821,25 @@ impl ScriptTask {
|
|||
}
|
||||
}
|
||||
|
||||
fn handle_update_subpage_id(&self,
|
||||
containing_pipeline_id: PipelineId,
|
||||
old_subpage_id: SubpageId,
|
||||
new_subpage_id: SubpageId) {
|
||||
let borrowed_page = self.root_page();
|
||||
|
||||
let frame_element = borrowed_page.find(containing_pipeline_id).and_then(|page| {
|
||||
let doc = page.document().root();
|
||||
let doc: JSRef<Node> = NodeCast::from_ref(doc.r());
|
||||
|
||||
doc.traverse_preorder()
|
||||
.filter_map(HTMLIFrameElementCast::to_ref)
|
||||
.find(|node| node.subpage_id() == Some(old_subpage_id))
|
||||
.map(Temporary::from_rooted)
|
||||
}).root();
|
||||
|
||||
frame_element.unwrap().r().update_subpage_id(new_subpage_id);
|
||||
}
|
||||
|
||||
/// Handles a notification that reflow completed.
|
||||
fn handle_reflow_complete_msg(&self, pipeline_id: PipelineId, reflow_id: uint) {
|
||||
debug!("Script: Reflow {:?} complete for {:?}", reflow_id, pipeline_id);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue