Skip to content
Permalink
Browse files

Add XRTest.simulateDeviceConnection()

  • Loading branch information...
Manishearth committed May 29, 2019
1 parent a89d2c6 commit e95b24bfa6665e2f4d1168c8593ab72c5bfddba9
Showing with 40 additions and 5 deletions.
  1. +8 −3 components/script/dom/webidls/XRTest.webidl
  2. +32 −2 components/script/dom/xrtest.rs
@@ -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;
};
@@ -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
}
}

0 comments on commit e95b24b

Please sign in to comment.
You can’t perform that action at this time.