servo: Merge #5333 - Ensures that iframe navigation updates the parent iframe element subpage id (from glennw:fix-iframe-subpage); r=jdm

This fixes the case of clicking a link in an iframe, going back, then clicking the link again.

Source-Repo: https://github.com/servo/servo
Source-Revision: 2f85c5bb502c2582d34772db979e27c741ee76e3
This commit is contained in:
Glenn Watson
2015-03-23 23:03:45 -06:00
parent 57e4f960bb
commit 99fb8dc2ab
4 changed files with 40 additions and 0 deletions

View File

@@ -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);