Skip to content

Commit beffc43

Browse files
committed
post-message: remove unnecessary call to constellation
1 parent 8916a42 commit beffc43

File tree

3 files changed

+56
-19
lines changed

3 files changed

+56
-19
lines changed

components/constellation/constellation.rs

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4149,14 +4149,34 @@ where
41494149
},
41504150
Some(browsing_context) => browsing_context.pipeline_id,
41514151
};
4152-
let source_browsing_context = match self.pipelines.get(&source_pipeline) {
4153-
Some(pipeline) => pipeline.top_level_browsing_context_id,
4154-
None => return warn!("PostMessage from closed pipeline {:?}", source_pipeline),
4155-
};
4152+
let (source_top_level_browsing_context_id, source_browsing_context_id) =
4153+
match self.pipelines.get(&source_pipeline) {
4154+
Some(pipeline) => (
4155+
pipeline.top_level_browsing_context_id,
4156+
pipeline.browsing_context_id,
4157+
),
4158+
None => return warn!("PostMessage from closed pipeline {:?}", source_pipeline),
4159+
};
4160+
let source_parent_pipeline_id =
4161+
match self.browsing_contexts.get(&source_browsing_context_id) {
4162+
Some(bc) => bc.parent_pipeline_id,
4163+
None => return warn!("PostMessage from closed pipeline {:?}", source_pipeline),
4164+
};
4165+
4166+
let source_parent = source_parent_pipeline_id.and_then(|parent_id| {
4167+
let parent_bc = match self.pipelines.get(&parent_id) {
4168+
Some(pipeline) => pipeline.browsing_context_id,
4169+
None => return None,
4170+
};
4171+
Some(parent_bc)
4172+
});
4173+
41564174
let msg = ConstellationControlMsg::PostMessage {
41574175
target: pipeline_id,
4176+
source_parent,
41584177
source: source_pipeline,
4159-
source_browsing_context: source_browsing_context,
4178+
source_browsing_context: source_browsing_context_id,
4179+
source_top_level_browsing_context: source_top_level_browsing_context_id,
41604180
target_origin: origin,
41614181
source_origin,
41624182
data,

components/script/script_thread.rs

Lines changed: 26 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1951,15 +1951,19 @@ impl ScriptThread {
19511951
),
19521952
ConstellationControlMsg::PostMessage {
19531953
target: target_pipeline_id,
1954+
source_parent,
19541955
source: source_pipeline_id,
19551956
source_browsing_context,
1957+
source_top_level_browsing_context,
19561958
target_origin: origin,
19571959
source_origin,
19581960
data,
19591961
} => self.handle_post_message_msg(
19601962
target_pipeline_id,
1963+
source_parent,
19611964
source_pipeline_id,
19621965
source_browsing_context,
1966+
source_top_level_browsing_context,
19631967
origin,
19641968
source_origin,
19651969
data,
@@ -2605,8 +2609,10 @@ impl ScriptThread {
26052609
fn handle_post_message_msg(
26062610
&self,
26072611
pipeline_id: PipelineId,
2612+
source_parent: Option<BrowsingContextId>,
26082613
source_pipeline_id: PipelineId,
2609-
source_browsing_context: TopLevelBrowsingContextId,
2614+
source_browsing_context: BrowsingContextId,
2615+
source_top_level_browsing_context: TopLevelBrowsingContextId,
26102616
origin: Option<ImmutableOrigin>,
26112617
source_origin: ImmutableOrigin,
26122618
data: StructuredSerializedData,
@@ -2619,8 +2625,9 @@ impl ScriptThread {
26192625
// send the required info as part of postmessage instead.
26202626
let source = match self.remote_window_proxy(
26212627
&*window.global(),
2628+
source_top_level_browsing_context,
26222629
source_browsing_context,
2623-
source_pipeline_id,
2630+
source_parent,
26242631
None,
26252632
) {
26262633
None => {
@@ -3082,20 +3089,20 @@ impl ScriptThread {
30823089
&self,
30833090
global_to_clone: &GlobalScope,
30843091
top_level_browsing_context_id: TopLevelBrowsingContextId,
3085-
pipeline_id: PipelineId,
3092+
browsing_context_id: BrowsingContextId,
3093+
parent: Option<BrowsingContextId>,
30863094
opener: Option<BrowsingContextId>,
30873095
) -> Option<DomRoot<WindowProxy>> {
3088-
let (browsing_context_id, parent_pipeline_id) =
3089-
self.ask_constellation_for_browsing_context_info(pipeline_id)?;
30903096
if let Some(window_proxy) = self.window_proxies.borrow().get(&browsing_context_id) {
30913097
return Some(DomRoot::from_ref(window_proxy));
30923098
}
30933099

3094-
let parent_browsing_context = parent_pipeline_id.and_then(|parent_id| {
3100+
let parent_browsing_context = parent.and_then(|parent_bc| {
30953101
self.remote_window_proxy(
30963102
global_to_clone,
30973103
top_level_browsing_context_id,
3098-
parent_id,
3104+
parent_bc,
3105+
None,
30993106
opener,
31003107
)
31013108
});
@@ -3147,12 +3154,18 @@ impl ScriptThread {
31473154
});
31483155
let parent_browsing_context = match (parent_info, iframe.as_ref()) {
31493156
(_, Some(iframe)) => Some(window_from_node(&**iframe).window_proxy()),
3150-
(Some(parent_id), _) => self.remote_window_proxy(
3151-
window.upcast(),
3152-
top_level_browsing_context_id,
3153-
parent_id,
3154-
opener,
3155-
),
3157+
(Some(parent_id), _) => {
3158+
let (browsing_context_id, _) = self
3159+
.ask_constellation_for_browsing_context_info(parent_id)
3160+
.expect("Couldn't get bc info for parent.");
3161+
self.remote_window_proxy(
3162+
window.upcast(),
3163+
top_level_browsing_context_id,
3164+
browsing_context_id,
3165+
None,
3166+
opener,
3167+
)
3168+
},
31563169
_ => None,
31573170
};
31583171

components/script_traits/lib.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -340,10 +340,14 @@ pub enum ConstellationControlMsg {
340340
PostMessage {
341341
/// The target of the message.
342342
target: PipelineId,
343+
/// The parent of the source, if any.
344+
source_parent: Option<BrowsingContextId>,
343345
/// The source of the message.
344346
source: PipelineId,
347+
/// The browsing context associated with the source pipeline.
348+
source_browsing_context: BrowsingContextId,
345349
/// The top level browsing context associated with the source pipeline.
346-
source_browsing_context: TopLevelBrowsingContextId,
350+
source_top_level_browsing_context: TopLevelBrowsingContextId,
347351
/// The expected origin of the target.
348352
target_origin: Option<ImmutableOrigin>,
349353
/// The source origin of the message.

0 commit comments

Comments
 (0)