aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/script_thread.rs
diff options
context:
space:
mode:
Diffstat (limited to 'components/script/script_thread.rs')
-rw-r--r--components/script/script_thread.rs23
1 files changed, 23 insertions, 0 deletions
diff --git a/components/script/script_thread.rs b/components/script/script_thread.rs
index 20a8602a249..b913c5bbae0 100644
--- a/components/script/script_thread.rs
+++ b/components/script/script_thread.rs
@@ -708,6 +708,11 @@ impl ScriptThread {
self.handle_viewport(id, rect);
})
}
+ FromConstellation(ConstellationControlMsg::SetScrollState(id, scroll_offset)) => {
+ self.profile_event(ScriptThreadEventCategory::SetScrollState, || {
+ self.handle_set_scroll_state(id, &scroll_offset);
+ })
+ }
FromConstellation(ConstellationControlMsg::TickAllAnimations(
pipeline_id)) => {
if !animation_ticks.contains(&pipeline_id) {
@@ -850,6 +855,9 @@ impl ScriptThread {
ScriptThreadEventCategory::NetworkEvent => ProfilerCategory::ScriptNetworkEvent,
ScriptThreadEventCategory::Resize => ProfilerCategory::ScriptResize,
ScriptThreadEventCategory::ScriptEvent => ProfilerCategory::ScriptEvent,
+ ScriptThreadEventCategory::SetScrollState => {
+ ProfilerCategory::ScriptSetScrollState
+ }
ScriptThreadEventCategory::UpdateReplacedElement => {
ProfilerCategory::ScriptUpdateReplacedElement
}
@@ -877,6 +885,8 @@ impl ScriptThread {
self.handle_resize_inactive_msg(id, new_size),
ConstellationControlMsg::Viewport(..) =>
panic!("should have handled Viewport already"),
+ ConstellationControlMsg::SetScrollState(..) =>
+ panic!("should have handled SetScrollState already"),
ConstellationControlMsg::Resize(..) =>
panic!("should have handled Resize already"),
ConstellationControlMsg::ExitPipeline(..) =>
@@ -1077,6 +1087,19 @@ impl ScriptThread {
panic!("Page rect message sent to nonexistent pipeline");
}
+ fn handle_set_scroll_state(&self, id: PipelineId, scroll_state: &Point2D<f32>) {
+ let context = self.browsing_context.get();
+ if let Some(context) = context {
+ if let Some(inner_context) = context.find(id) {
+ let window = inner_context.active_window();
+ window.update_viewport_for_scroll(-scroll_state.x, -scroll_state.y);
+ return
+ }
+ }
+
+ panic!("Set scroll state message message sent to nonexistent pipeline: {:?}", id);
+ }
+
fn handle_new_layout(&self, new_layout_info: NewLayoutInfo) {
let NewLayoutInfo {
containing_pipeline_id,