mirror of
https://github.com/servo/servo.git
synced 2025-06-25 01:24:37 +01:00
Use Cell/RefCell for interior mutability of NodeList, Performance, TestBinding, and ValidityState.
This commit is contained in:
parent
2215e2ca80
commit
aaa8c838d2
3 changed files with 12 additions and 9 deletions
|
@ -7,7 +7,6 @@ use dom::bindings::js::{JS, JSRef, Temporary};
|
|||
use dom::bindings::utils::{Reflectable, Reflector, reflect_dom_object};
|
||||
use dom::performancetiming::{PerformanceTiming, PerformanceTimingMethods};
|
||||
use dom::window::Window;
|
||||
|
||||
use time;
|
||||
|
||||
pub type DOMHighResTimeStamp = f64;
|
||||
|
@ -20,9 +19,10 @@ pub struct Performance {
|
|||
|
||||
impl Performance {
|
||||
fn new_inherited(window: &JSRef<Window>) -> Performance {
|
||||
let timing = PerformanceTiming::new(window).root().root_ref().unrooted();
|
||||
Performance {
|
||||
reflector_: Reflector::new(),
|
||||
timing: PerformanceTiming::new(window).root().root_ref().unrooted(),
|
||||
timing: timing,
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -15,10 +15,12 @@ use servo_util::str::DOMString;
|
|||
use js::jsapi::JSContext;
|
||||
use js::jsval::{JSVal, NullValue};
|
||||
|
||||
use std::cell::Cell;
|
||||
|
||||
#[deriving(Encodable)]
|
||||
pub struct TestBinding {
|
||||
pub reflector: Reflector,
|
||||
pub window: JS<Window>,
|
||||
pub window: Cell<JS<Window>>,
|
||||
}
|
||||
|
||||
pub trait TestBindingMethods {
|
||||
|
@ -243,19 +245,19 @@ pub trait TestBindingMethods {
|
|||
|
||||
impl<'a> TestBindingMethods for JSRef<'a, TestBinding> {
|
||||
fn InterfaceAttribute(&self) -> Temporary<Blob> {
|
||||
let window = self.window.root();
|
||||
let window = self.window.get().root();
|
||||
Blob::new(&*window)
|
||||
}
|
||||
fn GetInterfaceAttributeNullable(&self) -> Option<Temporary<Blob>> {
|
||||
let window = self.window.root();
|
||||
let window = self.window.get().root();
|
||||
Some(Blob::new(&*window))
|
||||
}
|
||||
fn ReceiveInterface(&self) -> Temporary<Blob> {
|
||||
let window = self.window.root();
|
||||
let window = self.window.get().root();
|
||||
Blob::new(&*window)
|
||||
}
|
||||
fn ReceiveNullableInterface(&self) -> Option<Temporary<Blob>> {
|
||||
let window = self.window.root();
|
||||
let window = self.window.get().root();
|
||||
Some(Blob::new(&*window))
|
||||
}
|
||||
}
|
||||
|
|
|
@ -6,11 +6,12 @@ use dom::bindings::codegen::BindingDeclarations::ValidityStateBinding;
|
|||
use dom::bindings::js::{JS, JSRef, Temporary};
|
||||
use dom::bindings::utils::{Reflectable, Reflector, reflect_dom_object};
|
||||
use dom::window::Window;
|
||||
use std::cell::Cell;
|
||||
|
||||
#[deriving(Encodable)]
|
||||
pub struct ValidityState {
|
||||
pub reflector_: Reflector,
|
||||
pub window: JS<Window>,
|
||||
pub window: Cell<JS<Window>>,
|
||||
pub state: u8,
|
||||
}
|
||||
|
||||
|
@ -18,7 +19,7 @@ impl ValidityState {
|
|||
pub fn new_inherited(window: &JSRef<Window>) -> ValidityState {
|
||||
ValidityState {
|
||||
reflector_: Reflector::new(),
|
||||
window: window.unrooted(),
|
||||
window: Cell::new(window.unrooted()),
|
||||
state: 0,
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue