diff options
Diffstat (limited to 'components/constellation')
-rw-r--r-- | components/constellation/browsingcontext.rs | 8 | ||||
-rw-r--r-- | components/constellation/constellation.rs | 18 | ||||
-rw-r--r-- | components/constellation/pipeline.rs | 1 |
3 files changed, 23 insertions, 4 deletions
diff --git a/components/constellation/browsingcontext.rs b/components/constellation/browsingcontext.rs index d90cb79cadd..4f15638fcff 100644 --- a/components/constellation/browsingcontext.rs +++ b/components/constellation/browsingcontext.rs @@ -24,6 +24,9 @@ pub struct NewBrowsingContextInfo { /// Whether this browsing context is in private browsing mode. pub is_private: bool, + /// Whether this browsing context inherits a secure context. + pub inherited_secure_context: Option<bool>, + /// Whether this browsing context should be treated as visible for the /// purposes of scheduling and resource management. pub is_visible: bool, @@ -51,6 +54,9 @@ pub struct BrowsingContext { /// Whether this browsing context is in private browsing mode. pub is_private: bool, + /// Whether this browsing context inherits a secure context. + pub inherited_secure_context: Option<bool>, + /// Whether this browsing context should be treated as visible for the /// purposes of scheduling and resource management. pub is_visible: bool, @@ -78,6 +84,7 @@ impl BrowsingContext { parent_pipeline_id: Option<PipelineId>, size: Size2D<f32, CSSPixel>, is_private: bool, + inherited_secure_context: Option<bool>, is_visible: bool, ) -> BrowsingContext { let mut pipelines = HashSet::new(); @@ -88,6 +95,7 @@ impl BrowsingContext { top_level_id, size, is_private, + inherited_secure_context, is_visible, pipeline_id, parent_pipeline_id, diff --git a/components/constellation/constellation.rs b/components/constellation/constellation.rs index e01dc7e76ef..6fbd449a236 100644 --- a/components/constellation/constellation.rs +++ b/components/constellation/constellation.rs @@ -1249,6 +1249,7 @@ where parent_pipeline_id: Option<PipelineId>, size: Size2D<f32, CSSPixel>, is_private: bool, + inherited_secure_context: Option<bool>, is_visible: bool, ) { debug!("Creating new browsing context {}", browsing_context_id); @@ -1283,6 +1284,7 @@ where parent_pipeline_id, size, is_private, + inherited_secure_context, is_visible, ); self.browsing_contexts @@ -1541,6 +1543,7 @@ where None, Referrer::NoReferrer, None, + None, ); let ctx_id = BrowsingContextId::from(top_level_browsing_context_id); let pipeline_id = match self.browsing_contexts.get(&ctx_id) { @@ -2911,6 +2914,7 @@ where None, Referrer::NoReferrer, None, + None, ); let sandbox = IFrameSandboxState::IFrameSandboxed; let is_private = false; @@ -3027,6 +3031,7 @@ where None, Referrer::NoReferrer, None, + None, ); let sandbox = IFrameSandboxState::IFrameUnsandboxed; let is_private = false; @@ -3071,6 +3076,7 @@ where new_browsing_context_info: Some(NewBrowsingContextInfo { parent_pipeline_id: None, is_private: is_private, + inherited_secure_context: None, is_visible: is_visible, }), window_size, @@ -3178,6 +3184,7 @@ where new_pipeline_id, is_private, mut replace, + .. } = load_info.info; // If no url is specified, reload. @@ -3293,9 +3300,9 @@ where Some(pipeline) => (pipeline.event_loop.clone(), pipeline.browsing_context_id), None => return warn!("Script loaded url in closed iframe {}.", parent_pipeline_id), }; - let (is_parent_private, is_parent_visible) = + let (is_parent_private, is_parent_visible, is_parent_secure) = match self.browsing_contexts.get(&parent_browsing_context_id) { - Some(ctx) => (ctx.is_private, ctx.is_visible), + Some(ctx) => (ctx.is_private, ctx.is_visible, ctx.inherited_secure_context), None => { return warn!( "New iframe {} loaded in closed parent browsing context {}.", @@ -3327,6 +3334,7 @@ where new_browsing_context_info: Some(NewBrowsingContextInfo { parent_pipeline_id: Some(parent_pipeline_id), is_private: is_private, + inherited_secure_context: is_parent_secure, is_visible: is_parent_visible, }), window_size: load_info.window_size.initial_viewport, @@ -3356,9 +3364,9 @@ where ); }, }; - let (is_opener_private, is_opener_visible) = + let (is_opener_private, is_opener_visible, is_opener_secure) = match self.browsing_contexts.get(&opener_browsing_context_id) { - Some(ctx) => (ctx.is_private, ctx.is_visible), + Some(ctx) => (ctx.is_private, ctx.is_visible, ctx.inherited_secure_context), None => { return warn!( "New auxiliary {} loaded in closed opener browsing context {}.", @@ -3416,6 +3424,7 @@ where // Auxiliary browsing contexts are always top-level. parent_pipeline_id: None, is_private: is_opener_private, + inherited_secure_context: is_opener_secure, is_visible: is_opener_visible, }), window_size: self.window_size.initial_viewport, @@ -4747,6 +4756,7 @@ where new_context_info.parent_pipeline_id, change.window_size, new_context_info.is_private, + new_context_info.inherited_secure_context, new_context_info.is_visible, ); self.update_activity(change.new_pipeline_id); diff --git a/components/constellation/pipeline.rs b/components/constellation/pipeline.rs index 108bc403e42..c368b57f2a1 100644 --- a/components/constellation/pipeline.rs +++ b/components/constellation/pipeline.rs @@ -573,6 +573,7 @@ impl UnprivilegedPipelineContent { layout_is_busy: layout_thread_busy_flag.clone(), player_context: self.player_context.clone(), event_loop_waker, + inherited_secure_context: self.load_data.inherited_secure_context.clone(), }, self.load_data.clone(), self.opts.profile_script_events, |