mirror of
https://github.com/servo/servo.git
synced 2025-07-22 23:03:42 +01:00
Do not allow XR session on non user-activated events
This commit is contained in:
parent
9138d1dfed
commit
ea7b581537
9 changed files with 54 additions and 15 deletions
|
@ -690,6 +690,9 @@ pub struct ScriptThread {
|
|||
|
||||
/// A set of all nodes ever created in this script thread
|
||||
node_ids: DomRefCell<HashSet<String>>,
|
||||
|
||||
/// Code is running as a consequence of a user interaction
|
||||
is_user_interacting: Cell<bool>,
|
||||
}
|
||||
|
||||
/// In the event of thread panic, all data on the stack runs its destructor. However, there
|
||||
|
@ -1030,6 +1033,24 @@ impl ScriptThread {
|
|||
})
|
||||
}
|
||||
|
||||
pub fn set_user_interacting(interacting: bool) {
|
||||
SCRIPT_THREAD_ROOT.with(|root| {
|
||||
if let Some(script_thread) = root.get() {
|
||||
let script_thread = unsafe { &*script_thread };
|
||||
script_thread.is_user_interacting.set(interacting);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
pub fn is_user_interacting() -> bool {
|
||||
SCRIPT_THREAD_ROOT.with(|root| {
|
||||
root.get().map_or(false, |script_thread| {
|
||||
let script_thread = unsafe { &*script_thread };
|
||||
script_thread.is_user_interacting.get()
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
pub fn get_fully_active_document_ids() -> HashSet<PipelineId> {
|
||||
SCRIPT_THREAD_ROOT.with(|root| {
|
||||
root.get().map_or(HashSet::new(), |script_thread| {
|
||||
|
@ -1339,6 +1360,7 @@ impl ScriptThread {
|
|||
event_loop_waker: state.event_loop_waker,
|
||||
|
||||
node_ids: Default::default(),
|
||||
is_user_interacting: Cell::new(false),
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -3356,6 +3378,9 @@ impl ScriptThread {
|
|||
///
|
||||
/// TODO: Actually perform DOM event dispatch.
|
||||
fn handle_event(&self, pipeline_id: PipelineId, event: CompositorEvent) {
|
||||
// Assuming all CompositionEvent are generated by user interactions.
|
||||
ScriptThread::set_user_interacting(true);
|
||||
|
||||
match event {
|
||||
ResizeEvent(new_size, size_type) => {
|
||||
self.handle_resize_event(pipeline_id, new_size, size_type);
|
||||
|
@ -3489,6 +3514,8 @@ impl ScriptThread {
|
|||
document.dispatch_composition_event(composition_event);
|
||||
},
|
||||
}
|
||||
|
||||
ScriptThread::set_user_interacting(false);
|
||||
}
|
||||
|
||||
fn handle_mouse_event(
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue