Add XRTest.simulateDeviceConnection()

This commit is contained in:
Manish Goregaokar 2019-05-29 15:43:05 -07:00
parent a89d2c6410
commit e95b24bfa6
2 changed files with 40 additions and 5 deletions

View file

@ -6,9 +6,9 @@
[Exposed=Window, Pref="dom.webxr.test"]
interface XRTest {
// // Simulates connecting a device to the system.
// // Used to instantiate a fake device for use in tests.
// Promise<FakeXRDeviceController> simulateDeviceConnection(FakeXRDeviceInit);
// Simulates connecting a device to the system.
// Used to instantiate a fake device for use in tests.
Promise<FakeXRDeviceController> simulateDeviceConnection(FakeXRDeviceInit init);
// // Simulates a device being disconnected from the system.
// Promise<void> simulateDeviceDisconnection(XRDevice);
@ -18,3 +18,8 @@ interface XRTest {
// // Device API methods.
// void simulateUserActivation(Function);
};
dictionary FakeXRDeviceInit {
// TODO: Subject to change to match spec changes.
required boolean supportsImmersive;
};

View file

@ -6,21 +6,30 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
use crate::dom::bindings::codegen::Bindings::XRTestBinding;
use crate::dom::bindings::reflector::{reflect_dom_object, Reflector};
use crate::dom::bindings::codegen::Bindings::XRTestBinding::{
self, FakeXRDeviceInit, XRTestMethods,
};
use crate::dom::bindings::reflector::{reflect_dom_object, DomObject, Reflector};
use crate::dom::bindings::root::DomRoot;
use crate::dom::fakexrdevicecontroller::FakeXRDeviceController;
use crate::dom::globalscope::GlobalScope;
use crate::dom::promise::Promise;
use dom_struct::dom_struct;
use std::cell::Cell;
use std::rc::Rc;
use webvr_traits::WebVRMsg;
#[dom_struct]
pub struct XRTest {
reflector: Reflector,
session_started: Cell<bool>,
}
impl XRTest {
pub fn new_inherited() -> XRTest {
XRTest {
reflector: Reflector::new(),
session_started: Cell::new(false),
}
}
@ -32,3 +41,24 @@ impl XRTest {
)
}
}
impl XRTestMethods for XRTest {
fn SimulateDeviceConnection(&self, init: &FakeXRDeviceInit) -> Rc<Promise> {
let p = Promise::new(&self.global());
if !init.supportsImmersive || self.session_started.get() {
p.reject_native(&());
return p;
}
self.session_started.set(true);
self.global()
.as_window()
.webvr_thread()
.unwrap()
.send(WebVRMsg::CreateMockDisplay);
p.resolve_native(&FakeXRDeviceController::new(&self.global()));
p
}
}