diff options
-rw-r--r-- | components/compositing/constellation.rs | 22 | ||||
-rw-r--r-- | components/msg/constellation_msg.rs | 2 | ||||
-rw-r--r-- | components/script/dom/htmliframeelement.rs | 33 |
3 files changed, 19 insertions, 38 deletions
diff --git a/components/compositing/constellation.rs b/components/compositing/constellation.rs index 0da135022d4..edc19ce07a5 100644 --- a/components/compositing/constellation.rs +++ b/components/compositing/constellation.rs @@ -135,10 +135,6 @@ pub struct Constellation<LTF, STF> { /// A list of in-process senders to `WebGLPaintTask`s. webgl_paint_tasks: Vec<Sender<CanvasMsg>>, - - /// A list of senders that are waiting to be notified whenever a pipeline or subpage ID comes - /// in. - subpage_id_senders: HashMap<(PipelineId, SubpageId), Vec<IpcSender<PipelineId>>>, } /// State needed to construct a constellation. @@ -284,7 +280,6 @@ impl<LTF: LayoutTaskFactory, STF: ScriptTaskFactory> Constellation<LTF, STF> { webdriver: WebDriverData::new(), canvas_paint_tasks: Vec::new(), webgl_paint_tasks: Vec::new(), - subpage_id_senders: HashMap::new(), }; let namespace_id = constellation.next_pipeline_namespace_id(); PipelineNamespace::install(namespace_id); @@ -517,9 +512,9 @@ impl<LTF: LayoutTaskFactory, STF: ScriptTaskFactory> Constellation<LTF, STF> { let is_ready = self.handle_is_ready_to_save_image(pipeline_states); self.compositor_proxy.send(CompositorMsg::IsReadyToSaveImageReply(is_ready)); } - ConstellationMsg::RemoveIFrame(containing_pipeline_id, subpage_id) => { + ConstellationMsg::RemoveIFrame(pipeline_id) => { debug!("constellation got remove iframe message"); - self.handle_remove_iframe_msg(containing_pipeline_id, subpage_id); + self.handle_remove_iframe_msg(pipeline_id); } ConstellationMsg::NewFavicon(url) => { debug!("constellation got new favicon message"); @@ -679,14 +674,6 @@ impl<LTF: LayoutTaskFactory, STF: ScriptTaskFactory> Constellation<LTF, STF> { self.subpage_map.insert((load_info.containing_pipeline_id, load_info.new_subpage_id), load_info.new_pipeline_id); - // If anyone is waiting to know the pipeline ID, send that information now. - if let Some(subpage_id_senders) = self.subpage_id_senders.remove(&(load_info.containing_pipeline_id, - load_info.new_subpage_id)) { - for subpage_id_sender in subpage_id_senders.into_iter() { - subpage_id_sender.send(load_info.new_pipeline_id).unwrap(); - } - } - self.push_pending_frame(load_info.new_pipeline_id, old_pipeline_id); } @@ -960,10 +947,7 @@ impl<LTF: LayoutTaskFactory, STF: ScriptTaskFactory> Constellation<LTF, STF> { self.focus_parent_pipeline(pipeline_id); } - fn handle_remove_iframe_msg(&mut self, - containing_pipeline_id: PipelineId, - subpage_id: SubpageId) { - let pipeline_id = self.find_subpage(containing_pipeline_id, subpage_id).id; + fn handle_remove_iframe_msg(&mut self, pipeline_id: PipelineId) { let frame_id = self.pipeline_to_frame_map.get(&pipeline_id).map(|id| *id); match frame_id { Some(frame_id) => { diff --git a/components/msg/constellation_msg.rs b/components/msg/constellation_msg.rs index 857161c316d..81701bc92b9 100644 --- a/components/msg/constellation_msg.rs +++ b/components/msg/constellation_msg.rs @@ -276,7 +276,7 @@ pub enum Msg { /// Query the constellation to see if the current compositor output is stable IsReadyToSaveImage(HashMap<PipelineId, Epoch>), /// Notification that this iframe should be removed. - RemoveIFrame(PipelineId, SubpageId), + RemoveIFrame(PipelineId), /// Favicon detected NewFavicon(Url), /// <head> tag finished parsing diff --git a/components/script/dom/htmliframeelement.rs b/components/script/dom/htmliframeelement.rs index a29beac4107..88ffc7a6981 100644 --- a/components/script/dom/htmliframeelement.rs +++ b/components/script/dom/htmliframeelement.rs @@ -431,24 +431,21 @@ impl VirtualMethods for HTMLIFrameElement { } // https://html.spec.whatwg.org/multipage/#a-browsing-context-is-discarded - match (self.containing_page_pipeline_id(), self.subpage_id()) { - (Some(containing_pipeline_id), Some(subpage_id)) => { - let window = window_from_node(self); - let window = window.r(); - - let ConstellationChan(ref chan) = window.constellation_chan(); - let msg = ConstellationMsg::RemoveIFrame(containing_pipeline_id, - subpage_id); - chan.send(msg).unwrap(); - - // Resetting the subpage id to None is required here so that - // if this iframe is subsequently re-added to the document - // the load doesn't think that it's a navigation, but instead - // a new iframe. Without this, the constellation gets very - // confused. - self.subpage_id.set(None); - } - _ => {} + if let Some(pipeline_id) = self.pipeline_id.get() { + let window = window_from_node(self); + let window = window.r(); + + let ConstellationChan(ref chan) = window.constellation_chan(); + let msg = ConstellationMsg::RemoveIFrame(pipeline_id); + chan.send(msg).unwrap(); + + // Resetting the subpage id to None is required here so that + // if this iframe is subsequently re-added to the document + // the load doesn't think that it's a navigation, but instead + // a new iframe. Without this, the constellation gets very + // confused. + self.subpage_id.set(None); + self.pipeline_id.set(None); } } } |