auto merge of #5006 : Ms2ger/servo/script_task, r=saneyuki

This commit is contained in:
bors-servo 2015-02-21 10:48:46 -07:00
commit 31c8f97b4b

View file

@ -27,7 +27,6 @@ use dom::element::{Element, ActivationElementHelpers};
use dom::event::{Event, EventHelpers, EventBubbles, EventCancelable}; use dom::event::{Event, EventHelpers, EventBubbles, EventCancelable};
use dom::uievent::UIEvent; use dom::uievent::UIEvent;
use dom::eventtarget::EventTarget; use dom::eventtarget::EventTarget;
use dom::htmliframeelement::HTMLIFrameElement;
use dom::keyboardevent::KeyboardEvent; use dom::keyboardevent::KeyboardEvent;
use dom::mouseevent::MouseEvent; use dom::mouseevent::MouseEvent;
use dom::node::{self, Node, NodeHelpers, NodeDamage}; use dom::node::{self, Node, NodeHelpers, NodeDamage};
@ -752,31 +751,28 @@ impl ScriptTask {
fn load(&self, pipeline_id: PipelineId, fn load(&self, pipeline_id: PipelineId,
parent: Option<(PipelineId, SubpageId)>, load_data: LoadData) { parent: Option<(PipelineId, SubpageId)>, load_data: LoadData) {
let url = load_data.url.clone(); let url = load_data.url.clone();
debug!("ScriptTask: loading {:?} on page {:?}", url, pipeline_id); debug!("ScriptTask: loading {} on page {:?}", url.serialize(), pipeline_id);
let borrowed_page = self.page.borrow_mut(); let borrowed_page = self.page.borrow_mut();
let frame_element = parent.and_then(|(parent_id, subpage_id)| { let frame_element = parent.and_then(|(parent_id, subpage_id)| {
// In the case a parent id exists but the matching page // In the case a parent id exists but the matching page
// cannot be found, this means the page exists in a different // cannot be found, this means the page exists in a different
// script task (due to origin) so it shouldn't be returned. // script task (due to origin) so it shouldn't be returned.
// TODO: window.parent will continue to return self in that // TODO: window.parent will continue to return self in that
// case, which is wrong. We should be returning an object that // case, which is wrong. We should be returning an object that
// denies access to most properties (per // denies access to most properties (per
// https://github.com/servo/servo/issues/3939#issuecomment-62287025). // https://github.com/servo/servo/issues/3939#issuecomment-62287025).
borrowed_page.find(parent_id).and_then(|page| { borrowed_page.find(parent_id).and_then(|page| {
let match_iframe = |&:&node: &JSRef<HTMLIFrameElement>| { let doc = page.frame().as_ref().unwrap().document.root();
node.subpage_id().map_or(false, |id| id == subpage_id) let doc: JSRef<Node> = NodeCast::from_ref(doc.r());
};
let doc = page.frame().as_ref().unwrap().document.root(); doc.traverse_preorder()
let doc: JSRef<Node> = NodeCast::from_ref(doc.r()); .filter_map(HTMLIFrameElementCast::to_ref)
.find(|node| node.subpage_id() == Some(subpage_id))
doc.traverse_preorder() .map(ElementCast::from_ref)
.filter_map(|node| HTMLIFrameElementCast::to_ref(node)) .map(Temporary::from_rooted)
.find(match_iframe) })
.map(|node| Temporary::from_rooted(ElementCast::from_ref(node)))
})
}).root(); }).root();
let page = borrowed_page.find(pipeline_id).expect("ScriptTask: received a load let page = borrowed_page.find(pipeline_id).expect("ScriptTask: received a load