aboutsummaryrefslogtreecommitdiffstats
path: root/components/script
diff options
context:
space:
mode:
authorbors-servo <lbergstrom+bors@mozilla.com>2016-09-07 04:17:36 -0500
committerGitHub <noreply@github.com>2016-09-07 04:17:36 -0500
commitdd33be45485fefd148759c77462c484157026055 (patch)
treee8c3d032fd5cb0134d12565bbf6acf44dc5ae933 /components/script
parentbba3eefde86d7716c35b6dcb6f45c9d42fbe758f (diff)
parent61fcc72d3565e116dc484d702b1c17dcb5ed4a6f (diff)
downloadservo-dd33be45485fefd148759c77462c484157026055.tar.gz
servo-dd33be45485fefd148759c77462c484157026055.zip
Auto merge of #13194 - servo:mutreflectable, r=Ms2ger
Extract mutability out of Reflectable trait. <!-- Reviewable:start --> This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/13194) <!-- Reviewable:end -->
Diffstat (limited to 'components/script')
-rw-r--r--components/script/devtools.rs1
-rw-r--r--components/script/dom/bindings/codegen/CodegenRust.py1
-rw-r--r--components/script/dom/bindings/global.rs17
-rw-r--r--components/script/dom/bindings/iterable.rs5
-rw-r--r--components/script/dom/bindings/reflector.rs8
-rw-r--r--components/script/dom/browsingcontext.rs2
6 files changed, 22 insertions, 12 deletions
diff --git a/components/script/devtools.rs b/components/script/devtools.rs
index 389d652fefa..8f08cab9701 100644
--- a/components/script/devtools.rs
+++ b/components/script/devtools.rs
@@ -16,6 +16,7 @@ use dom::bindings::conversions::{ConversionResult, FromJSValConvertible, jsstrin
use dom::bindings::global::GlobalRef;
use dom::bindings::inheritance::Castable;
use dom::bindings::js::Root;
+use dom::bindings::reflector::Reflectable;
use dom::bindings::str::DOMString;
use dom::browsingcontext::BrowsingContext;
use dom::element::Element;
diff --git a/components/script/dom/bindings/codegen/CodegenRust.py b/components/script/dom/bindings/codegen/CodegenRust.py
index cb7e796c627..71331dfe503 100644
--- a/components/script/dom/bindings/codegen/CodegenRust.py
+++ b/components/script/dom/bindings/codegen/CodegenRust.py
@@ -5452,6 +5452,7 @@ def generate_imports(config, cgthings, descriptors, callbacks=None, dictionaries
'dom::bindings::js::OptionalRootedReference',
'dom::bindings::js::Root',
'dom::bindings::js::RootedReference',
+ 'dom::bindings::reflector::MutReflectable',
'dom::bindings::reflector::Reflectable',
'dom::bindings::utils::DOMClass',
'dom::bindings::utils::DOMJSClass',
diff --git a/components/script/dom/bindings/global.rs b/components/script/dom/bindings/global.rs
index af4cd59a86f..54efb11250d 100644
--- a/components/script/dom/bindings/global.rs
+++ b/components/script/dom/bindings/global.rs
@@ -271,14 +271,6 @@ impl<'a> GlobalRef<'a> {
}
}
- /// Returns the receiver's reflector.
- pub fn reflector(&self) -> &Reflector {
- match *self {
- GlobalRef::Window(ref window) => window.reflector(),
- GlobalRef::Worker(ref worker) => worker.reflector(),
- }
- }
-
/// Returns a wrapper for runnables to ensure they are cancelled if the global
/// is being destroyed.
pub fn get_runnable_wrapper(&self) -> RunnableWrapper {
@@ -297,6 +289,15 @@ impl<'a> GlobalRef<'a> {
}
}
+impl<'a> Reflectable for GlobalRef<'a> {
+ fn reflector(&self) -> &Reflector {
+ match *self {
+ GlobalRef::Window(ref window) => window.reflector(),
+ GlobalRef::Worker(ref worker) => worker.reflector(),
+ }
+ }
+}
+
impl GlobalRoot {
/// Obtain a safe reference to the global object that cannot outlive the
/// lifetime of this root.
diff --git a/components/script/dom/bindings/iterable.rs b/components/script/dom/bindings/iterable.rs
index a3092ed73b6..84381b52655 100644
--- a/components/script/dom/bindings/iterable.rs
+++ b/components/script/dom/bindings/iterable.rs
@@ -12,7 +12,7 @@ use dom::bindings::codegen::Bindings::IterableIteratorBinding::IterableKeyOrValu
use dom::bindings::error::Fallible;
use dom::bindings::global::GlobalRef;
use dom::bindings::js::{JS, Root};
-use dom::bindings::reflector::{Reflector, Reflectable, reflect_dom_object};
+use dom::bindings::reflector::{Reflector, Reflectable, MutReflectable, reflect_dom_object};
use dom::bindings::trace::JSTraceable;
use js::conversions::ToJSValConvertible;
use js::jsapi::{JSContext, JSObject, MutableHandleValue, MutableHandleObject, HandleValue};
@@ -63,6 +63,9 @@ impl<T: Reflectable + JSTraceable + Iterable> Reflectable for IterableIterator<T
fn reflector<'a>(&'a self) -> &'a Reflector {
&self.reflector
}
+}
+
+impl<T: Reflectable + JSTraceable + Iterable> MutReflectable for IterableIterator<T> {
fn init_reflector(&mut self, obj: *mut JSObject) {
self.reflector.set_jsobject(obj);
}
diff --git a/components/script/dom/bindings/reflector.rs b/components/script/dom/bindings/reflector.rs
index 04466ea6926..d5280712a03 100644
--- a/components/script/dom/bindings/reflector.rs
+++ b/components/script/dom/bindings/reflector.rs
@@ -73,11 +73,15 @@ impl Reflector {
pub trait Reflectable {
/// Returns the receiver's reflector.
fn reflector(&self) -> &Reflector;
- /// Initializes the Reflector
- fn init_reflector(&mut self, obj: *mut JSObject);
/// Returns the global object of the realm that the Reflectable was created in.
fn global(&self) -> GlobalRoot where Self: Sized {
global_root_from_reflector(self)
}
}
+
+/// A trait to initialize the `Reflector` for a DOM object.
+pub trait MutReflectable: Reflectable {
+ /// Initializes the Reflector
+ fn init_reflector(&mut self, obj: *mut JSObject);
+}
diff --git a/components/script/dom/browsingcontext.rs b/components/script/dom/browsingcontext.rs
index 18fbe914cef..919b574c27a 100644
--- a/components/script/dom/browsingcontext.rs
+++ b/components/script/dom/browsingcontext.rs
@@ -7,7 +7,7 @@ use dom::bindings::codegen::Bindings::DocumentBinding::DocumentMethods;
use dom::bindings::conversions::{ToJSValConvertible, root_from_handleobject};
use dom::bindings::js::{JS, Root, RootedReference};
use dom::bindings::proxyhandler::{fill_property_descriptor, get_property_descriptor};
-use dom::bindings::reflector::{Reflectable, Reflector};
+use dom::bindings::reflector::{Reflectable, MutReflectable, Reflector};
use dom::bindings::str::DOMString;
use dom::bindings::trace::JSTraceable;
use dom::bindings::utils::WindowProxyHandler;