diff options
author | Josh Matthews <josh@joshmatthews.net> | 2019-03-07 18:58:53 -0500 |
---|---|---|
committer | Josh Matthews <josh@joshmatthews.net> | 2019-03-07 18:58:53 -0500 |
commit | edfd15c36f9c050512ebdfab3553cd3a7f6ff06f (patch) | |
tree | 89e8a02b8c1981f58f9ef95f153a387bbf49ac30 | |
parent | cc131be2e0f48924ffc8cdfc017fc23c361f1140 (diff) | |
download | servo-edfd15c36f9c050512ebdfab3553cd3a7f6ff06f.tar.gz servo-edfd15c36f9c050512ebdfab3553cd3a7f6ff06f.zip |
Ensure iframe's contentWindow is updated when traversing the session history.
-rw-r--r-- | components/constellation/constellation.rs | 10 | ||||
-rw-r--r-- | components/script/script_thread.rs | 21 | ||||
-rw-r--r-- | components/script_traits/lib.rs | 1 |
3 files changed, 29 insertions, 3 deletions
diff --git a/components/constellation/constellation.rs b/components/constellation/constellation.rs index 2b6df7d456a..f8804c4af7c 100644 --- a/components/constellation/constellation.rs +++ b/components/constellation/constellation.rs @@ -2640,12 +2640,16 @@ where }, }; - let (old_pipeline_id, parent_pipeline_id) = + let (old_pipeline_id, parent_pipeline_id, top_level_id) = match self.browsing_contexts.get_mut(&browsing_context_id) { Some(browsing_context) => { let old_pipeline_id = browsing_context.pipeline_id; browsing_context.update_current_entry(new_pipeline_id); - (old_pipeline_id, browsing_context.parent_pipeline_id) + ( + old_pipeline_id, + browsing_context.parent_pipeline_id, + browsing_context.top_level_id, + ) }, None => { return warn!( @@ -2662,6 +2666,7 @@ where let msg = ConstellationControlMsg::UpdatePipelineId( parent_pipeline_id, browsing_context_id, + top_level_id, new_pipeline_id, UpdatePipelineIdReason::Traversal, ); @@ -3581,6 +3586,7 @@ where let msg = ConstellationControlMsg::UpdatePipelineId( parent_pipeline_id, change.browsing_context_id, + change.top_level_browsing_context_id, pipeline_id, UpdatePipelineIdReason::Navigation, ); diff --git a/components/script/script_thread.rs b/components/script/script_thread.rs index 4076a56f9ca..448acd23790 100644 --- a/components/script/script_thread.rs +++ b/components/script/script_thread.rs @@ -1429,7 +1429,7 @@ impl ScriptThread { NotifyVisibilityChange(id, ..) => Some(id), Navigate(id, ..) => Some(id), PostMessage { target: id, .. } => Some(id), - UpdatePipelineId(_, _, id, _) => Some(id), + UpdatePipelineId(_, _, _, id, _) => Some(id), UpdateHistoryState(id, ..) => Some(id), RemoveHistoryStates(id, ..) => Some(id), FocusIFrame(id, ..) => Some(id), @@ -1617,11 +1617,13 @@ impl ScriptThread { ConstellationControlMsg::UpdatePipelineId( parent_pipeline_id, browsing_context_id, + top_level_browsing_context_id, new_pipeline_id, reason, ) => self.handle_update_pipeline_id( parent_pipeline_id, browsing_context_id, + top_level_browsing_context_id, new_pipeline_id, reason, ), @@ -2153,6 +2155,7 @@ impl ScriptThread { &self, parent_pipeline_id: PipelineId, browsing_context_id: BrowsingContextId, + top_level_browsing_context_id: TopLevelBrowsingContextId, new_pipeline_id: PipelineId, reason: UpdatePipelineIdReason, ) { @@ -2163,6 +2166,21 @@ impl ScriptThread { if let Some(frame_element) = frame_element { frame_element.update_pipeline_id(new_pipeline_id, reason); } + + if let Some(window) = self.documents.borrow().find_window(new_pipeline_id) { + // Ensure that the state of any local window proxies accurately reflects + // the new pipeline. + let _ = self.local_window_proxy( + &*window, + browsing_context_id, + top_level_browsing_context_id, + Some(parent_pipeline_id), + // Any local window proxy has already been created, so there + // is no need to pass along existing opener information that + // will be discarded. + None, + ); + } } fn handle_update_history_state_msg( @@ -2870,6 +2888,7 @@ impl ScriptThread { self.handle_update_pipeline_id( parent_pipeline, window_proxy.browsing_context_id(), + window_proxy.top_level_browsing_context_id(), incomplete.pipeline_id, UpdatePipelineIdReason::Navigation, ); diff --git a/components/script_traits/lib.rs b/components/script_traits/lib.rs index e2bc5c4d1ed..724d76daede 100644 --- a/components/script_traits/lib.rs +++ b/components/script_traits/lib.rs @@ -303,6 +303,7 @@ pub enum ConstellationControlMsg { UpdatePipelineId( PipelineId, BrowsingContextId, + TopLevelBrowsingContextId, PipelineId, UpdatePipelineIdReason, ), |