mirror of
https://github.com/servo/servo.git
synced 2025-07-22 14:53:49 +01:00
Touch handler: Fix race condition and rate-limit move events (#35537)
* TouchSequenceInfo is added to store information about a touch sequence. For details about TouchSequenceInfo, see the code comments. The handling_touch_move attribute is added to the TouchHandler, indicating that the script is processing the touch move event. When handling_touch_move is set to true, the touch move event does not need to be sent to the script thread. Signed-off-by: kongbai1996 <1782765876@qq.com> * move touch state, active_touch_point and handling_touch_move to TouchSequenceInfo form TouchHandler. remove TouchSequenceInfo end_sequence property, add Finished state mark sequence end. if preventDefault on touchup, do not prevent Fling. Signed-off-by: kongbai1996 <1782765876@qq.com> * Refactor Touchhandler - Add a newtype wrapper for the TouchSequenceId - Move more state back into the TouchSequenceState - Rename TouchAction to TouchMoveAction, since it only covers immediate actions now. Everything else is handled via state, since it needs to wait on the handler. Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com> * Fix test-tidy Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com> * Fix clippy missing-default lint Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com> * Fix remaining clippy lints Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com> * Remove accidental committed test file Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com> * Remove wrong todo comment (move events that are sent to script are just raw touchpoints, no merging needed) Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com> * Fix preventdefault after long touch_down handler Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com> --------- Signed-off-by: kongbai1996 <1782765876@qq.com> Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com> Co-authored-by: Jonathan Schwender <schwenderjonathan@gmail.com>
This commit is contained in:
parent
374bfc6983
commit
f3a8bf8ca2
9 changed files with 746 additions and 278 deletions
|
@ -62,8 +62,9 @@ use webrender_traits::{
|
|||
};
|
||||
|
||||
pub use crate::script_msg::{
|
||||
DOMMessage, EventResult, IFrameSizeMsg, Job, JobError, JobResult, JobResultValue, JobType,
|
||||
LayoutMsg, LogEntry, SWManagerMsg, SWManagerSenders, ScopeThings, ScriptMsg, ServiceWorkerMsg,
|
||||
DOMMessage, IFrameSizeMsg, Job, JobError, JobResult, JobResultValue, JobType, LayoutMsg,
|
||||
LogEntry, SWManagerMsg, SWManagerSenders, ScopeThings, ScriptMsg, ServiceWorkerMsg,
|
||||
TouchEventResult,
|
||||
};
|
||||
use crate::serializable::{BlobData, BlobImpl};
|
||||
use crate::transferable::MessagePortImpl;
|
||||
|
|
|
@ -14,7 +14,7 @@ use base::Epoch;
|
|||
use canvas_traits::canvas::{CanvasId, CanvasMsg};
|
||||
use devtools_traits::{ScriptToDevtoolsControlMsg, WorkerId};
|
||||
use embedder_traits::{
|
||||
EmbedderMsg, MediaSessionEvent, TouchAction, TouchEventType, TraversalDirection,
|
||||
EmbedderMsg, MediaSessionEvent, TouchEventType, TouchSequenceId, TraversalDirection,
|
||||
};
|
||||
use euclid::default::Size2D as UntypedSize2D;
|
||||
use euclid::Size2D;
|
||||
|
@ -62,13 +62,13 @@ impl fmt::Debug for LayoutMsg {
|
|||
}
|
||||
}
|
||||
|
||||
/// Whether a DOM event was prevented by web content
|
||||
/// Whether the default action for a touch event was prevented by web content
|
||||
#[derive(Debug, Deserialize, Serialize)]
|
||||
pub enum EventResult {
|
||||
pub enum TouchEventResult {
|
||||
/// Allowed by web content
|
||||
DefaultAllowed(TouchAction),
|
||||
DefaultAllowed(TouchSequenceId, TouchEventType),
|
||||
/// Prevented by web content
|
||||
DefaultPrevented(TouchEventType),
|
||||
DefaultPrevented(TouchSequenceId, TouchEventType),
|
||||
}
|
||||
|
||||
/// A log entry reported to the constellation
|
||||
|
@ -217,7 +217,7 @@ pub enum ScriptMsg {
|
|||
/// Update the pipeline Url, which can change after redirections.
|
||||
SetFinalUrl(ServoUrl),
|
||||
/// Script has handled a touch event, and either prevented or allowed default actions.
|
||||
TouchEventProcessed(EventResult),
|
||||
TouchEventProcessed(TouchEventResult),
|
||||
/// A log entry, with the top-level browsing context id and thread name
|
||||
LogEntry(Option<String>, LogEntry),
|
||||
/// Discard the document.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue