diff --git a/components/constellation/constellation.rs b/components/constellation/constellation.rs index 58b3bdefe89..3fd889db4be 100644 --- a/components/constellation/constellation.rs +++ b/components/constellation/constellation.rs @@ -1218,28 +1218,14 @@ where FromScriptMsg::TouchEventProcessed(result) => self .compositor_proxy .send(ToCompositorMsg::TouchEventProcessed(result)), - FromScriptMsg::GetBrowsingContextId(pipeline_id, sender) => { + FromScriptMsg::GetBrowsingContextInfo(pipeline_id, sender) => { let result = self .pipelines .get(&pipeline_id) - .map(|pipeline| pipeline.browsing_context_id); + .and_then(|pipeline| self.browsing_contexts.get(&pipeline.browsing_context_id)) + .map(|ctx| (ctx.id, ctx.parent_pipeline_id)); if let Err(e) = sender.send(result) { - warn!("Sending reply to get browsing context failed ({:?}).", e); - } - }, - // TODO(mandreyel): maybe change semantics of this message to - // reflect moving parent_info into BrowsingContext, i.e. message - // could be: GetParentInfo(BrowsingContextId, Sender) - FromScriptMsg::GetParentInfo(pipeline_id, sender) => { - let browsing_context = self.pipelines - .get(&pipeline_id) - .and_then(|pipeline| self.browsing_contexts.get(&pipeline.browsing_context_id)); - if let Some(browsing_context) = browsing_context { - if let Err(e) = sender.send(browsing_context.parent_pipeline_id) { - warn!("Sending reply to get parent info failed ({:?}).", e); - } - } else { - warn!("GetParentInfo for pipeline {} with no browsing context.", pipeline_id) + warn!("Sending reply to get browsing context info failed ({:?}).", e); } }, FromScriptMsg::GetTopForBrowsingContext(browsing_context_id, sender) => { diff --git a/components/script/script_thread.rs b/components/script/script_thread.rs index 4f55d49fc17..a7b50925877 100644 --- a/components/script/script_thread.rs +++ b/components/script/script_thread.rs @@ -2065,24 +2065,21 @@ impl ScriptThread { } } - fn ask_constellation_for_browsing_context_id(&self, pipeline_id: PipelineId) -> Option { + fn ask_constellation_for_browsing_context_info( + &self, + pipeline_id: PipelineId + ) -> Option<(BrowsingContextId, Option)> { let (result_sender, result_receiver) = ipc::channel().unwrap(); - let msg = ScriptMsg::GetBrowsingContextId(pipeline_id, result_sender); + let msg = ScriptMsg::GetBrowsingContextInfo(pipeline_id, result_sender); self.script_sender.send((pipeline_id, msg)).expect("Failed to send to constellation."); - result_receiver.recv().expect("Failed to get frame id from constellation.") + result_receiver.recv().expect("Failed to get browsing context info from constellation.") } - fn ask_constellation_for_parent_info(&self, pipeline_id: PipelineId) -> Option { - let (result_sender, result_receiver) = ipc::channel().unwrap(); - let msg = ScriptMsg::GetParentInfo(pipeline_id, result_sender); - self.script_sender.send((pipeline_id, msg)).expect("Failed to send to constellation."); - result_receiver.recv().expect("Failed to get frame id from constellation.") - } - - fn ask_constellation_for_top_level_info(&self, - sender_pipeline: PipelineId, - browsing_context_id: BrowsingContextId) - -> Option { + fn ask_constellation_for_top_level_info( + &self, + sender_pipeline: PipelineId, + browsing_context_id: BrowsingContextId + ) -> Option { let (result_sender, result_receiver) = ipc::channel().unwrap(); let msg = ScriptMsg::GetTopForBrowsingContext(browsing_context_id, result_sender); self.script_sender.send((sender_pipeline, msg)).expect("Failed to send to constellation."); @@ -2095,25 +2092,29 @@ impl ScriptThread { // get the browsing context for the parent if there is one, // construct a new dissimilar-origin browsing context, add it // to the `window_proxies` map, and return it. - fn remote_window_proxy(&self, - global_to_clone: &GlobalScope, - top_level_browsing_context_id: TopLevelBrowsingContextId, - pipeline_id: PipelineId, - opener: Option) - -> Option> - { - let browsing_context_id = self.ask_constellation_for_browsing_context_id(pipeline_id)?; + fn remote_window_proxy( + &self, + global_to_clone: &GlobalScope, + top_level_browsing_context_id: TopLevelBrowsingContextId, + pipeline_id: PipelineId, + opener: Option + ) -> Option> { + let (browsing_context_id, parent_pipeline_id) = + self.ask_constellation_for_browsing_context_info(pipeline_id)?; if let Some(window_proxy) = self.window_proxies.borrow().get(&browsing_context_id) { return Some(DomRoot::from_ref(window_proxy)); } - let parent = self.ask_constellation_for_parent_info(pipeline_id).and_then(|parent_id| { + + let parent = parent_pipeline_id.and_then(|parent_id| { self.remote_window_proxy(global_to_clone, top_level_browsing_context_id, parent_id, opener) }); - let window_proxy = WindowProxy::new_dissimilar_origin(global_to_clone, - browsing_context_id, - top_level_browsing_context_id, - parent.r(), - opener); + let window_proxy = WindowProxy::new_dissimilar_origin( + global_to_clone, + browsing_context_id, + top_level_browsing_context_id, + parent.r(), + opener + ); self.window_proxies.borrow_mut().insert(browsing_context_id, Dom::from_ref(&*window_proxy)); Some(window_proxy) } diff --git a/components/script_traits/script_msg.rs b/components/script_traits/script_msg.rs index ca8c5463aa8..14edaee58b6 100644 --- a/components/script_traits/script_msg.rs +++ b/components/script_traits/script_msg.rs @@ -108,15 +108,17 @@ pub enum ScriptMsg { Focus, /// Requests that the constellation retrieve the current contents of the clipboard GetClipboardContents(IpcSender), - /// Get the browsing context id for a given pipeline. - GetBrowsingContextId(PipelineId, IpcSender>), - /// Get the parent info for a given pipeline. - GetParentInfo(PipelineId, IpcSender>), /// Get the top-level browsing context info for a given browsing context. GetTopForBrowsingContext( BrowsingContextId, IpcSender>, ), + /// Get the browsing context id of the browsing context in which pipeline is + /// embedded and the parent pipeline id of that browsing context. + GetBrowsingContextInfo( + PipelineId, + IpcSender)>>, + ), /// Get the nth child browsing context ID for a given browsing context, sorted in tree order. GetChildBrowsingContextId( BrowsingContextId, @@ -201,8 +203,7 @@ impl fmt::Debug for ScriptMsg { CreateCanvasPaintThread(..) => "CreateCanvasPaintThread", Focus => "Focus", GetClipboardContents(..) => "GetClipboardContents", - GetBrowsingContextId(..) => "GetBrowsingContextId", - GetParentInfo(..) => "GetParentInfo", + GetBrowsingContextInfo(..) => "GetBrowsingContextInfo", GetTopForBrowsingContext(..) => "GetParentBrowsingContext", GetChildBrowsingContextId(..) => "GetChildBrowsingContextId", LoadComplete => "LoadComplete",