aboutsummaryrefslogtreecommitdiffstats
path: root/components/webvr
diff options
context:
space:
mode:
Diffstat (limited to 'components/webvr')
-rw-r--r--components/webvr/webvr_thread.rs26
1 files changed, 26 insertions, 0 deletions
diff --git a/components/webvr/webvr_thread.rs b/components/webvr/webvr_thread.rs
index e90ddbf7df5..2cd4c81ab35 100644
--- a/components/webvr/webvr_thread.rs
+++ b/components/webvr/webvr_thread.rs
@@ -14,6 +14,7 @@ use script_traits::ConstellationMsg;
use servo_config::pref;
use std::collections::hash_map::Entry;
use std::collections::{HashMap, HashSet};
+use std::sync::mpsc;
use std::{thread, time};
use webvr_traits::webvr::*;
use webvr_traits::{WebVRMsg, WebVRPoseInformation, WebVRResult};
@@ -46,6 +47,7 @@ pub struct WebVRThread {
vr_compositor_chan: WebVRCompositorSender,
polling_events: bool,
presenting: HashMap<u32, PipelineId>,
+ mock: Option<mpsc::Sender<MockVRControlMsg>>,
}
impl WebVRThread {
@@ -65,6 +67,7 @@ impl WebVRThread {
vr_compositor_chan: vr_compositor_chan,
polling_events: false,
presenting: HashMap::new(),
+ mock: None,
}
}
@@ -131,6 +134,13 @@ impl WebVRThread {
WebVRMsg::GetGamepadsForDisplay(display_id, sender) => {
self.handle_get_gamepads_for_display(display_id, sender);
},
+
+ WebVRMsg::CreateMockDisplay => {
+ self.handle_create_mock();
+ },
+ WebVRMsg::MessageMockDisplay(msg) => {
+ self.handle_message_mock_display(msg);
+ },
WebVRMsg::Exit => break,
}
}
@@ -302,6 +312,22 @@ impl WebVRThread {
sender.send(Ok(data)).unwrap();
}
+ fn handle_create_mock(&mut self) {
+ if self.mock.is_some() {
+ warn!("Mock display already created");
+ return;
+ }
+ self.mock = Some(self.service.register_mock_with_remote());
+ }
+
+ fn handle_message_mock_display(&mut self, msg: MockVRControlMsg) {
+ self.mock
+ .as_ref()
+ .expect("Mock Display not yet set up")
+ .send(msg)
+ .expect("Could not send message to mock display");
+ }
+
fn poll_events(&mut self, sender: IpcSender<bool>) {
loop {
let events = self.service.poll_events();