aboutsummaryrefslogtreecommitdiffstats
path: root/components/script
diff options
context:
space:
mode:
authorAnthony Ramine <n.oxyde@gmail.com>2017-02-21 11:27:05 +0100
committerAnthony Ramine <n.oxyde@gmail.com>2017-02-24 01:50:51 +0100
commit31e9d81c0f8fdfa4bb8ab27fda804b8d424e5378 (patch)
tree2a60d1308916da48c5c3958572865f48f03c60e3 /components/script
parent64885c4213c97c818f37026c7071975f299466fb (diff)
downloadservo-31e9d81c0f8fdfa4bb8ab27fda804b8d424e5378.tar.gz
servo-31e9d81c0f8fdfa4bb8ab27fda804b8d424e5378.zip
Make #[dom_struct] a proc_macro attribute
Diffstat (limited to 'components/script')
-rw-r--r--components/script/Cargo.toml1
-rw-r--r--components/script/docs/JS-Servos-only-GC.md2
-rw-r--r--components/script/dom/attr.rs1
-rw-r--r--components/script/dom/beforeunloadevent.rs1
-rw-r--r--components/script/dom/bindings/iterable.rs1
-rw-r--r--components/script/dom/blob.rs1
-rw-r--r--components/script/dom/bluetooth.rs1
-rw-r--r--components/script/dom/bluetoothadvertisingevent.rs1
-rw-r--r--components/script/dom/bluetoothcharacteristicproperties.rs1
-rw-r--r--components/script/dom/bluetoothdevice.rs1
-rw-r--r--components/script/dom/bluetoothpermissionresult.rs1
-rw-r--r--components/script/dom/bluetoothremotegattcharacteristic.rs1
-rw-r--r--components/script/dom/bluetoothremotegattdescriptor.rs1
-rw-r--r--components/script/dom/bluetoothremotegattserver.rs1
-rw-r--r--components/script/dom/bluetoothremotegattservice.rs1
-rw-r--r--components/script/dom/bluetoothuuid.rs1
-rw-r--r--components/script/dom/browsingcontext.rs1
-rw-r--r--components/script/dom/canvasgradient.rs1
-rw-r--r--components/script/dom/canvaspattern.rs1
-rw-r--r--components/script/dom/canvasrenderingcontext2d.rs1
-rw-r--r--components/script/dom/characterdata.rs1
-rw-r--r--components/script/dom/client.rs1
-rw-r--r--components/script/dom/closeevent.rs1
-rw-r--r--components/script/dom/comment.rs1
-rw-r--r--components/script/dom/crypto.rs1
-rw-r--r--components/script/dom/css.rs1
-rw-r--r--components/script/dom/cssconditionrule.rs1
-rw-r--r--components/script/dom/cssfontfacerule.rs1
-rw-r--r--components/script/dom/cssgroupingrule.rs1
-rw-r--r--components/script/dom/cssimportrule.rs1
-rw-r--r--components/script/dom/csskeyframerule.rs1
-rw-r--r--components/script/dom/csskeyframesrule.rs1
-rw-r--r--components/script/dom/cssmediarule.rs1
-rw-r--r--components/script/dom/cssnamespacerule.rs1
-rw-r--r--components/script/dom/cssrule.rs1
-rw-r--r--components/script/dom/cssrulelist.rs1
-rw-r--r--components/script/dom/cssstyledeclaration.rs1
-rw-r--r--components/script/dom/cssstylerule.rs1
-rw-r--r--components/script/dom/cssstylesheet.rs1
-rw-r--r--components/script/dom/csssupportsrule.rs1
-rw-r--r--components/script/dom/cssviewportrule.rs1
-rw-r--r--components/script/dom/customevent.rs1
-rw-r--r--components/script/dom/dedicatedworkerglobalscope.rs1
-rw-r--r--components/script/dom/dissimilaroriginlocation.rs1
-rw-r--r--components/script/dom/dissimilaroriginwindow.rs1
-rw-r--r--components/script/dom/document.rs1
-rw-r--r--components/script/dom/documentfragment.rs1
-rw-r--r--components/script/dom/documenttype.rs1
-rw-r--r--components/script/dom/domexception.rs1
-rw-r--r--components/script/dom/domimplementation.rs1
-rw-r--r--components/script/dom/dommatrix.rs1
-rw-r--r--components/script/dom/dommatrixreadonly.rs1
-rw-r--r--components/script/dom/domparser.rs1
-rw-r--r--components/script/dom/dompoint.rs1
-rw-r--r--components/script/dom/dompointreadonly.rs1
-rw-r--r--components/script/dom/domquad.rs1
-rw-r--r--components/script/dom/domrect.rs1
-rw-r--r--components/script/dom/domrectlist.rs1
-rw-r--r--components/script/dom/domrectreadonly.rs1
-rw-r--r--components/script/dom/domstringmap.rs1
-rw-r--r--components/script/dom/domtokenlist.rs1
-rw-r--r--components/script/dom/element.rs1
-rw-r--r--components/script/dom/errorevent.rs1
-rw-r--r--components/script/dom/event.rs1
-rw-r--r--components/script/dom/eventsource.rs1
-rw-r--r--components/script/dom/eventtarget.rs1
-rw-r--r--components/script/dom/extendableevent.rs1
-rw-r--r--components/script/dom/extendablemessageevent.rs1
-rw-r--r--components/script/dom/file.rs1
-rw-r--r--components/script/dom/filelist.rs1
-rw-r--r--components/script/dom/filereader.rs1
-rw-r--r--components/script/dom/filereadersync.rs1
-rw-r--r--components/script/dom/focusevent.rs1
-rw-r--r--components/script/dom/forcetouchevent.rs1
-rw-r--r--components/script/dom/formdata.rs1
-rw-r--r--components/script/dom/globalscope.rs1
-rw-r--r--components/script/dom/hashchangeevent.rs1
-rw-r--r--components/script/dom/headers.rs1
-rw-r--r--components/script/dom/history.rs1
-rw-r--r--components/script/dom/htmlanchorelement.rs1
-rw-r--r--components/script/dom/htmlappletelement.rs1
-rw-r--r--components/script/dom/htmlareaelement.rs1
-rw-r--r--components/script/dom/htmlaudioelement.rs1
-rw-r--r--components/script/dom/htmlbaseelement.rs1
-rw-r--r--components/script/dom/htmlbodyelement.rs1
-rw-r--r--components/script/dom/htmlbrelement.rs1
-rwxr-xr-xcomponents/script/dom/htmlbuttonelement.rs1
-rw-r--r--components/script/dom/htmlcanvaselement.rs1
-rw-r--r--components/script/dom/htmlcollection.rs1
-rw-r--r--components/script/dom/htmldataelement.rs1
-rw-r--r--components/script/dom/htmldatalistelement.rs1
-rw-r--r--components/script/dom/htmldetailselement.rs1
-rw-r--r--components/script/dom/htmldialogelement.rs1
-rw-r--r--components/script/dom/htmldirectoryelement.rs1
-rw-r--r--components/script/dom/htmldivelement.rs1
-rw-r--r--components/script/dom/htmldlistelement.rs1
-rw-r--r--components/script/dom/htmlelement.rs1
-rw-r--r--components/script/dom/htmlembedelement.rs1
-rw-r--r--components/script/dom/htmlfieldsetelement.rs1
-rw-r--r--components/script/dom/htmlfontelement.rs1
-rw-r--r--components/script/dom/htmlformcontrolscollection.rs1
-rwxr-xr-xcomponents/script/dom/htmlformelement.rs1
-rw-r--r--components/script/dom/htmlframeelement.rs1
-rw-r--r--components/script/dom/htmlframesetelement.rs1
-rw-r--r--components/script/dom/htmlheadelement.rs1
-rw-r--r--components/script/dom/htmlheadingelement.rs1
-rw-r--r--components/script/dom/htmlhrelement.rs1
-rw-r--r--components/script/dom/htmlhtmlelement.rs1
-rw-r--r--components/script/dom/htmliframeelement.rs1
-rw-r--r--components/script/dom/htmlimageelement.rs1
-rwxr-xr-xcomponents/script/dom/htmlinputelement.rs1
-rw-r--r--components/script/dom/htmllabelelement.rs1
-rw-r--r--components/script/dom/htmllegendelement.rs1
-rw-r--r--components/script/dom/htmllielement.rs1
-rw-r--r--components/script/dom/htmllinkelement.rs1
-rw-r--r--components/script/dom/htmlmapelement.rs1
-rw-r--r--components/script/dom/htmlmediaelement.rs1
-rw-r--r--components/script/dom/htmlmetaelement.rs1
-rw-r--r--components/script/dom/htmlmeterelement.rs1
-rw-r--r--components/script/dom/htmlmodelement.rs1
-rwxr-xr-xcomponents/script/dom/htmlobjectelement.rs1
-rw-r--r--components/script/dom/htmlolistelement.rs1
-rw-r--r--components/script/dom/htmloptgroupelement.rs1
-rw-r--r--components/script/dom/htmloptionelement.rs1
-rw-r--r--components/script/dom/htmloptionscollection.rs1
-rw-r--r--components/script/dom/htmloutputelement.rs1
-rw-r--r--components/script/dom/htmlparagraphelement.rs1
-rw-r--r--components/script/dom/htmlparamelement.rs1
-rw-r--r--components/script/dom/htmlpreelement.rs1
-rw-r--r--components/script/dom/htmlprogresselement.rs1
-rw-r--r--components/script/dom/htmlquoteelement.rs1
-rw-r--r--components/script/dom/htmlscriptelement.rs1
-rwxr-xr-xcomponents/script/dom/htmlselectelement.rs1
-rw-r--r--components/script/dom/htmlsourceelement.rs1
-rw-r--r--components/script/dom/htmlspanelement.rs1
-rw-r--r--components/script/dom/htmlstyleelement.rs1
-rw-r--r--components/script/dom/htmltablecaptionelement.rs1
-rw-r--r--components/script/dom/htmltablecellelement.rs1
-rw-r--r--components/script/dom/htmltablecolelement.rs1
-rw-r--r--components/script/dom/htmltabledatacellelement.rs1
-rw-r--r--components/script/dom/htmltableelement.rs1
-rw-r--r--components/script/dom/htmltableheadercellelement.rs1
-rw-r--r--components/script/dom/htmltablerowelement.rs1
-rw-r--r--components/script/dom/htmltablesectionelement.rs1
-rw-r--r--components/script/dom/htmltemplateelement.rs1
-rwxr-xr-xcomponents/script/dom/htmltextareaelement.rs1
-rw-r--r--components/script/dom/htmltimeelement.rs1
-rw-r--r--components/script/dom/htmltitleelement.rs1
-rw-r--r--components/script/dom/htmltrackelement.rs1
-rw-r--r--components/script/dom/htmlulistelement.rs1
-rw-r--r--components/script/dom/htmlunknownelement.rs1
-rw-r--r--components/script/dom/htmlvideoelement.rs1
-rw-r--r--components/script/dom/imagedata.rs1
-rw-r--r--components/script/dom/keyboardevent.rs1
-rw-r--r--components/script/dom/location.rs1
-rw-r--r--components/script/dom/mediaerror.rs1
-rw-r--r--components/script/dom/medialist.rs1
-rw-r--r--components/script/dom/mediaquerylist.rs1
-rw-r--r--components/script/dom/mediaquerylistevent.rs1
-rw-r--r--components/script/dom/messageevent.rs1
-rw-r--r--components/script/dom/mimetype.rs1
-rw-r--r--components/script/dom/mimetypearray.rs1
-rw-r--r--components/script/dom/mouseevent.rs1
-rw-r--r--components/script/dom/namednodemap.rs1
-rw-r--r--components/script/dom/navigator.rs1
-rw-r--r--components/script/dom/node.rs1
-rw-r--r--components/script/dom/nodeiterator.rs1
-rw-r--r--components/script/dom/nodelist.rs1
-rw-r--r--components/script/dom/pagetransitionevent.rs1
-rw-r--r--components/script/dom/performance.rs1
-rw-r--r--components/script/dom/performancetiming.rs1
-rw-r--r--components/script/dom/permissions.rs1
-rw-r--r--components/script/dom/permissionstatus.rs1
-rw-r--r--components/script/dom/plugin.rs1
-rw-r--r--components/script/dom/pluginarray.rs1
-rw-r--r--components/script/dom/popstateevent.rs1
-rw-r--r--components/script/dom/processinginstruction.rs1
-rw-r--r--components/script/dom/progressevent.rs1
-rw-r--r--components/script/dom/promise.rs1
-rw-r--r--components/script/dom/promisenativehandler.rs1
-rw-r--r--components/script/dom/radionodelist.rs1
-rw-r--r--components/script/dom/range.rs1
-rw-r--r--components/script/dom/request.rs1
-rw-r--r--components/script/dom/response.rs1
-rw-r--r--components/script/dom/screen.rs1
-rw-r--r--components/script/dom/serviceworker.rs1
-rw-r--r--components/script/dom/serviceworkercontainer.rs1
-rw-r--r--components/script/dom/serviceworkerglobalscope.rs1
-rw-r--r--components/script/dom/serviceworkerregistration.rs1
-rw-r--r--components/script/dom/servoparser/mod.rs1
-rw-r--r--components/script/dom/storage.rs1
-rw-r--r--components/script/dom/storageevent.rs1
-rw-r--r--components/script/dom/stylesheet.rs1
-rw-r--r--components/script/dom/stylesheetlist.rs1
-rw-r--r--components/script/dom/svgelement.rs1
-rw-r--r--components/script/dom/svggraphicselement.rs1
-rw-r--r--components/script/dom/svgsvgelement.rs1
-rw-r--r--components/script/dom/testbinding.rs1
-rw-r--r--components/script/dom/testbindingiterable.rs1
-rw-r--r--components/script/dom/testbindingpairiterable.rs1
-rw-r--r--components/script/dom/testbindingproxy.rs2
-rw-r--r--components/script/dom/testrunner.rs1
-rw-r--r--components/script/dom/text.rs1
-rw-r--r--components/script/dom/textdecoder.rs1
-rw-r--r--components/script/dom/textencoder.rs1
-rw-r--r--components/script/dom/touch.rs1
-rw-r--r--components/script/dom/touchevent.rs1
-rw-r--r--components/script/dom/touchlist.rs1
-rw-r--r--components/script/dom/transitionevent.rs1
-rw-r--r--components/script/dom/treewalker.rs1
-rw-r--r--components/script/dom/uievent.rs1
-rw-r--r--components/script/dom/url.rs1
-rw-r--r--components/script/dom/urlsearchparams.rs1
-rwxr-xr-xcomponents/script/dom/validitystate.rs1
-rw-r--r--components/script/dom/vr.rs1
-rw-r--r--components/script/dom/vrdisplay.rs1
-rw-r--r--components/script/dom/vrdisplaycapabilities.rs1
-rw-r--r--components/script/dom/vrdisplayevent.rs1
-rw-r--r--components/script/dom/vreyeparameters.rs1
-rw-r--r--components/script/dom/vrfieldofview.rs1
-rw-r--r--components/script/dom/vrframedata.rs1
-rw-r--r--components/script/dom/vrpose.rs1
-rw-r--r--components/script/dom/vrstageparameters.rs1
-rw-r--r--components/script/dom/webglactiveinfo.rs1
-rw-r--r--components/script/dom/webglbuffer.rs1
-rw-r--r--components/script/dom/webglcontextevent.rs1
-rw-r--r--components/script/dom/webglframebuffer.rs1
-rw-r--r--components/script/dom/webglobject.rs1
-rw-r--r--components/script/dom/webglprogram.rs1
-rw-r--r--components/script/dom/webglrenderbuffer.rs1
-rw-r--r--components/script/dom/webglrenderingcontext.rs1
-rw-r--r--components/script/dom/webglshader.rs1
-rw-r--r--components/script/dom/webglshaderprecisionformat.rs1
-rw-r--r--components/script/dom/webgltexture.rs1
-rw-r--r--components/script/dom/webgluniformlocation.rs1
-rw-r--r--components/script/dom/websocket.rs1
-rw-r--r--components/script/dom/window.rs1
-rw-r--r--components/script/dom/worker.rs1
-rw-r--r--components/script/dom/workerglobalscope.rs1
-rw-r--r--components/script/dom/workerlocation.rs1
-rw-r--r--components/script/dom/workernavigator.rs1
-rw-r--r--components/script/dom/xmldocument.rs1
-rw-r--r--components/script/dom/xmlhttprequest.rs1
-rw-r--r--components/script/dom/xmlhttprequesteventtarget.rs1
-rw-r--r--components/script/dom/xmlhttprequestupload.rs1
-rw-r--r--components/script/lib.rs2
246 files changed, 248 insertions, 1 deletions
diff --git a/components/script/Cargo.toml b/components/script/Cargo.toml
index eb737dfb2b6..3e2cdcdca7d 100644
--- a/components/script/Cargo.toml
+++ b/components/script/Cargo.toml
@@ -37,6 +37,7 @@ cookie = {version = "0.2.5", features = ["serialize-rustc"]}
cssparser = {version = "0.10", features = ["heapsize", "serde"]}
deny_public_fields = {path = "../deny_public_fields"}
devtools_traits = {path = "../devtools_traits"}
+dom_struct = {path = "../dom_struct"}
domobject_derive = {path = "../domobject_derive"}
encoding = "0.2"
euclid = "0.11"
diff --git a/components/script/docs/JS-Servos-only-GC.md b/components/script/docs/JS-Servos-only-GC.md
index e2ca71dad8b..e5549a61063 100644
--- a/components/script/docs/JS-Servos-only-GC.md
+++ b/components/script/docs/JS-Servos-only-GC.md
@@ -138,6 +138,8 @@ Let's look at [Servo's implementation][document-rs] of the DOM's
[document-mdn]: https://developer.mozilla.org/en-US/docs/Web/API/document
```rust
+use dom_struct::dom_struct;
+
#[dom_struct]
pub struct Document {
node: Node,
diff --git a/components/script/dom/attr.rs b/components/script/dom/attr.rs
index 29c3279ad08..55f2adcfdb6 100644
--- a/components/script/dom/attr.rs
+++ b/components/script/dom/attr.rs
@@ -12,6 +12,7 @@ use dom::bindings::str::DOMString;
use dom::element::{AttributeMutation, Element};
use dom::virtualmethods::vtable_for;
use dom::window::Window;
+use dom_struct::dom_struct;
use html5ever_atoms::{Prefix, LocalName, Namespace};
use servo_atoms::Atom;
use std::borrow::ToOwned;
diff --git a/components/script/dom/beforeunloadevent.rs b/components/script/dom/beforeunloadevent.rs
index 3787bb5b62d..f0b152e0fdd 100644
--- a/components/script/dom/beforeunloadevent.rs
+++ b/components/script/dom/beforeunloadevent.rs
@@ -14,6 +14,7 @@ use dom::bindings::reflector::reflect_dom_object;
use dom::bindings::str::DOMString;
use dom::event::{Event, EventBubbles, EventCancelable};
use dom::window::Window;
+use dom_struct::dom_struct;
use servo_atoms::Atom;
// https://html.spec.whatwg.org/multipage/#beforeunloadevent
diff --git a/components/script/dom/bindings/iterable.rs b/components/script/dom/bindings/iterable.rs
index f10bd320b85..845ecbaa8cd 100644
--- a/components/script/dom/bindings/iterable.rs
+++ b/components/script/dom/bindings/iterable.rs
@@ -14,6 +14,7 @@ use dom::bindings::js::{JS, Root};
use dom::bindings::reflector::{DomObject, Reflector, reflect_dom_object};
use dom::bindings::trace::JSTraceable;
use dom::globalscope::GlobalScope;
+use dom_struct::dom_struct;
use js::conversions::ToJSValConvertible;
use js::jsapi::{HandleValue, Heap, JSContext, JSObject, MutableHandleObject};
use js::jsval::UndefinedValue;
diff --git a/components/script/dom/blob.rs b/components/script/dom/blob.rs
index 06ec986386c..e4e623d799d 100644
--- a/components/script/dom/blob.rs
+++ b/components/script/dom/blob.rs
@@ -11,6 +11,7 @@ use dom::bindings::js::{JS, Root};
use dom::bindings::reflector::{DomObject, Reflector, reflect_dom_object};
use dom::bindings::str::DOMString;
use dom::globalscope::GlobalScope;
+use dom_struct::dom_struct;
use encoding::all::UTF_8;
use encoding::types::{EncoderTrap, Encoding};
use ipc_channel::ipc;
diff --git a/components/script/dom/bluetooth.rs b/components/script/dom/bluetooth.rs
index 18ac71ad843..3c3b88a27ac 100644
--- a/components/script/dom/bluetooth.rs
+++ b/components/script/dom/bluetooth.rs
@@ -30,6 +30,7 @@ use dom::eventtarget::EventTarget;
use dom::globalscope::GlobalScope;
use dom::permissions::{get_descriptor_permission_state, PermissionAlgorithm};
use dom::promise::Promise;
+use dom_struct::dom_struct;
use ipc_channel::ipc::{self, IpcSender};
use ipc_channel::router::ROUTER;
use js::conversions::ConversionResult;
diff --git a/components/script/dom/bluetoothadvertisingevent.rs b/components/script/dom/bluetoothadvertisingevent.rs
index cc65aa4cd96..604a1c82025 100644
--- a/components/script/dom/bluetoothadvertisingevent.rs
+++ b/components/script/dom/bluetoothadvertisingevent.rs
@@ -14,6 +14,7 @@ use dom::bluetoothdevice::BluetoothDevice;
use dom::event::{Event, EventBubbles, EventCancelable};
use dom::globalscope::GlobalScope;
use dom::window::Window;
+use dom_struct::dom_struct;
use servo_atoms::Atom;
// https://webbluetoothcg.github.io/web-bluetooth/#bluetoothadvertisingevent
diff --git a/components/script/dom/bluetoothcharacteristicproperties.rs b/components/script/dom/bluetoothcharacteristicproperties.rs
index ccb5a37a6a8..a477c130a2d 100644
--- a/components/script/dom/bluetoothcharacteristicproperties.rs
+++ b/components/script/dom/bluetoothcharacteristicproperties.rs
@@ -8,6 +8,7 @@ use dom::bindings::codegen::Bindings::BluetoothCharacteristicPropertiesBinding::
use dom::bindings::js::Root;
use dom::bindings::reflector::{Reflector, reflect_dom_object};
use dom::globalscope::GlobalScope;
+use dom_struct::dom_struct;
// https://webbluetoothcg.github.io/web-bluetooth/#characteristicproperties
#[dom_struct]
diff --git a/components/script/dom/bluetoothdevice.rs b/components/script/dom/bluetoothdevice.rs
index d33aab9be97..ff11d8130b3 100644
--- a/components/script/dom/bluetoothdevice.rs
+++ b/components/script/dom/bluetoothdevice.rs
@@ -24,6 +24,7 @@ use dom::bluetoothremotegattservice::BluetoothRemoteGATTService;
use dom::eventtarget::EventTarget;
use dom::globalscope::GlobalScope;
use dom::promise::Promise;
+use dom_struct::dom_struct;
use ipc_channel::ipc::{self, IpcSender};
use js::jsapi::JSContext;
use std::cell::Cell;
diff --git a/components/script/dom/bluetoothpermissionresult.rs b/components/script/dom/bluetoothpermissionresult.rs
index 4f228e6c75c..da5de4bf5b1 100644
--- a/components/script/dom/bluetoothpermissionresult.rs
+++ b/components/script/dom/bluetoothpermissionresult.rs
@@ -18,6 +18,7 @@ use dom::bluetoothdevice::BluetoothDevice;
use dom::globalscope::GlobalScope;
use dom::permissionstatus::PermissionStatus;
use dom::promise::Promise;
+use dom_struct::dom_struct;
use ipc_channel::ipc::IpcSender;
use js::jsapi::JSContext;
use std::rc::Rc;
diff --git a/components/script/dom/bluetoothremotegattcharacteristic.rs b/components/script/dom/bluetoothremotegattcharacteristic.rs
index 81210e4b170..d6a39c154e3 100644
--- a/components/script/dom/bluetoothremotegattcharacteristic.rs
+++ b/components/script/dom/bluetoothremotegattcharacteristic.rs
@@ -25,6 +25,7 @@ use dom::bluetoothuuid::{BluetoothDescriptorUUID, BluetoothUUID};
use dom::eventtarget::EventTarget;
use dom::globalscope::GlobalScope;
use dom::promise::Promise;
+use dom_struct::dom_struct;
use ipc_channel::ipc::IpcSender;
use js::jsapi::JSContext;
use std::rc::Rc;
diff --git a/components/script/dom/bluetoothremotegattdescriptor.rs b/components/script/dom/bluetoothremotegattdescriptor.rs
index c0ddd6dabe5..c9e24c499be 100644
--- a/components/script/dom/bluetoothremotegattdescriptor.rs
+++ b/components/script/dom/bluetoothremotegattdescriptor.rs
@@ -19,6 +19,7 @@ use dom::bluetooth::{AsyncBluetoothListener, response_async};
use dom::bluetoothremotegattcharacteristic::{BluetoothRemoteGATTCharacteristic, MAXIMUM_ATTRIBUTE_LENGTH};
use dom::globalscope::GlobalScope;
use dom::promise::Promise;
+use dom_struct::dom_struct;
use ipc_channel::ipc::IpcSender;
use js::jsapi::JSContext;
use std::rc::Rc;
diff --git a/components/script/dom/bluetoothremotegattserver.rs b/components/script/dom/bluetoothremotegattserver.rs
index cd90b854907..4a67e03e984 100644
--- a/components/script/dom/bluetoothremotegattserver.rs
+++ b/components/script/dom/bluetoothremotegattserver.rs
@@ -15,6 +15,7 @@ use dom::bluetoothdevice::BluetoothDevice;
use dom::bluetoothuuid::{BluetoothServiceUUID, BluetoothUUID};
use dom::globalscope::GlobalScope;
use dom::promise::Promise;
+use dom_struct::dom_struct;
use ipc_channel::ipc::IpcSender;
use js::jsapi::JSContext;
use std::cell::Cell;
diff --git a/components/script/dom/bluetoothremotegattservice.rs b/components/script/dom/bluetoothremotegattservice.rs
index 9b0ce5a3a3d..347604df311 100644
--- a/components/script/dom/bluetoothremotegattservice.rs
+++ b/components/script/dom/bluetoothremotegattservice.rs
@@ -17,6 +17,7 @@ use dom::bluetoothuuid::{BluetoothCharacteristicUUID, BluetoothServiceUUID, Blue
use dom::eventtarget::EventTarget;
use dom::globalscope::GlobalScope;
use dom::promise::Promise;
+use dom_struct::dom_struct;
use js::jsapi::JSContext;
use std::rc::Rc;
diff --git a/components/script/dom/bluetoothuuid.rs b/components/script/dom/bluetoothuuid.rs
index e16d8141e50..a4ef66568a6 100644
--- a/components/script/dom/bluetoothuuid.rs
+++ b/components/script/dom/bluetoothuuid.rs
@@ -8,6 +8,7 @@ use dom::bindings::error::Fallible;
use dom::bindings::reflector::Reflector;
use dom::bindings::str::DOMString;
use dom::window::Window;
+use dom_struct::dom_struct;
use regex::Regex;
pub type UUID = DOMString;
diff --git a/components/script/dom/browsingcontext.rs b/components/script/dom/browsingcontext.rs
index 5e523d6982a..77c6eac2941 100644
--- a/components/script/dom/browsingcontext.rs
+++ b/components/script/dom/browsingcontext.rs
@@ -15,6 +15,7 @@ use dom::dissimilaroriginwindow::DissimilarOriginWindow;
use dom::element::Element;
use dom::globalscope::GlobalScope;
use dom::window::Window;
+use dom_struct::dom_struct;
use js::JSCLASS_IS_GLOBAL;
use js::glue::{CreateWrapperProxyHandler, ProxyTraps, NewWindowProxy};
use js::glue::{GetProxyPrivate, SetProxyExtra, GetProxyExtra};
diff --git a/components/script/dom/canvasgradient.rs b/components/script/dom/canvasgradient.rs
index 6491148e5aa..994582f509b 100644
--- a/components/script/dom/canvasgradient.rs
+++ b/components/script/dom/canvasgradient.rs
@@ -14,6 +14,7 @@ use dom::bindings::num::Finite;
use dom::bindings::reflector::{Reflector, reflect_dom_object};
use dom::bindings::str::DOMString;
use dom::globalscope::GlobalScope;
+use dom_struct::dom_struct;
// https://html.spec.whatwg.org/multipage/#canvasgradient
#[dom_struct]
diff --git a/components/script/dom/canvaspattern.rs b/components/script/dom/canvaspattern.rs
index 5fdb911c73a..6a6d6789918 100644
--- a/components/script/dom/canvaspattern.rs
+++ b/components/script/dom/canvaspattern.rs
@@ -8,6 +8,7 @@ use dom::bindings::js::Root;
use dom::bindings::reflector::{Reflector, reflect_dom_object};
use dom::canvasgradient::ToFillOrStrokeStyle;
use dom::globalscope::GlobalScope;
+use dom_struct::dom_struct;
use euclid::size::Size2D;
// https://html.spec.whatwg.org/multipage/#canvaspattern
diff --git a/components/script/dom/canvasrenderingcontext2d.rs b/components/script/dom/canvasrenderingcontext2d.rs
index 065b966d939..6a84c781b23 100644
--- a/components/script/dom/canvasrenderingcontext2d.rs
+++ b/components/script/dom/canvasrenderingcontext2d.rs
@@ -33,6 +33,7 @@ use dom::htmlcanvaselement::utils as canvas_utils;
use dom::htmlimageelement::HTMLImageElement;
use dom::imagedata::ImageData;
use dom::node::{Node, NodeDamage, window_from_node};
+use dom_struct::dom_struct;
use euclid::matrix2d::Matrix2D;
use euclid::point::Point2D;
use euclid::rect::Rect;
diff --git a/components/script/dom/characterdata.rs b/components/script/dom/characterdata.rs
index a2c456317dc..be4fc4d0ac1 100644
--- a/components/script/dom/characterdata.rs
+++ b/components/script/dom/characterdata.rs
@@ -19,6 +19,7 @@ use dom::element::Element;
use dom::node::{Node, NodeDamage};
use dom::processinginstruction::ProcessingInstruction;
use dom::text::Text;
+use dom_struct::dom_struct;
use servo_config::opts;
use std::cell::Ref;
diff --git a/components/script/dom/client.rs b/components/script/dom/client.rs
index d9d43ce7e01..7910ffc8dfa 100644
--- a/components/script/dom/client.rs
+++ b/components/script/dom/client.rs
@@ -9,6 +9,7 @@ use dom::bindings::reflector::{Reflector, reflect_dom_object};
use dom::bindings::str::{DOMString, USVString};
use dom::serviceworker::ServiceWorker;
use dom::window::Window;
+use dom_struct::dom_struct;
use servo_url::ServoUrl;
use std::default::Default;
use uuid::Uuid;
diff --git a/components/script/dom/closeevent.rs b/components/script/dom/closeevent.rs
index a4ad9893d80..f052c0eff44 100644
--- a/components/script/dom/closeevent.rs
+++ b/components/script/dom/closeevent.rs
@@ -12,6 +12,7 @@ use dom::bindings::reflector::reflect_dom_object;
use dom::bindings::str::DOMString;
use dom::event::{Event, EventBubbles, EventCancelable};
use dom::globalscope::GlobalScope;
+use dom_struct::dom_struct;
use servo_atoms::Atom;
#[dom_struct]
diff --git a/components/script/dom/comment.rs b/components/script/dom/comment.rs
index 9efe8c8164c..ad512132698 100644
--- a/components/script/dom/comment.rs
+++ b/components/script/dom/comment.rs
@@ -11,6 +11,7 @@ use dom::characterdata::CharacterData;
use dom::document::Document;
use dom::node::Node;
use dom::window::Window;
+use dom_struct::dom_struct;
/// An HTML comment.
#[dom_struct]
diff --git a/components/script/dom/crypto.rs b/components/script/dom/crypto.rs
index 0067dd1c51a..fc71faa660a 100644
--- a/components/script/dom/crypto.rs
+++ b/components/script/dom/crypto.rs
@@ -10,6 +10,7 @@ use dom::bindings::error::{Error, Fallible};
use dom::bindings::js::Root;
use dom::bindings::reflector::{Reflector, reflect_dom_object};
use dom::globalscope::GlobalScope;
+use dom_struct::dom_struct;
use js::jsapi::{JSContext, JSObject};
use js::jsapi::Type;
use servo_rand::{ServoRng, Rng};
diff --git a/components/script/dom/css.rs b/components/script/dom/css.rs
index bf264f14322..e24b3657775 100644
--- a/components/script/dom/css.rs
+++ b/components/script/dom/css.rs
@@ -8,6 +8,7 @@ use dom::bindings::error::Fallible;
use dom::bindings::reflector::Reflector;
use dom::bindings::str::DOMString;
use dom::window::Window;
+use dom_struct::dom_struct;
use style::parser::ParserContext;
use style::supports::{Declaration, parse_condition_or_declaration};
diff --git a/components/script/dom/cssconditionrule.rs b/components/script/dom/cssconditionrule.rs
index dace5f612c7..02c52bcf28f 100644
--- a/components/script/dom/cssconditionrule.rs
+++ b/components/script/dom/cssconditionrule.rs
@@ -9,6 +9,7 @@ use dom::cssgroupingrule::CSSGroupingRule;
use dom::cssmediarule::CSSMediaRule;
use dom::cssstylesheet::CSSStyleSheet;
use dom::csssupportsrule::CSSSupportsRule;
+use dom_struct::dom_struct;
use parking_lot::RwLock;
use std::sync::Arc;
use style::stylesheets::CssRules as StyleCssRules;
diff --git a/components/script/dom/cssfontfacerule.rs b/components/script/dom/cssfontfacerule.rs
index 61234f8846a..b9ef949c1b7 100644
--- a/components/script/dom/cssfontfacerule.rs
+++ b/components/script/dom/cssfontfacerule.rs
@@ -9,6 +9,7 @@ use dom::bindings::str::DOMString;
use dom::cssrule::{CSSRule, SpecificCSSRule};
use dom::cssstylesheet::CSSStyleSheet;
use dom::window::Window;
+use dom_struct::dom_struct;
use parking_lot::RwLock;
use std::sync::Arc;
use style::font_face::FontFaceRule;
diff --git a/components/script/dom/cssgroupingrule.rs b/components/script/dom/cssgroupingrule.rs
index b793b04b28c..ec608b2bc77 100644
--- a/components/script/dom/cssgroupingrule.rs
+++ b/components/script/dom/cssgroupingrule.rs
@@ -11,6 +11,7 @@ use dom::bindings::str::DOMString;
use dom::cssrule::CSSRule;
use dom::cssrulelist::{CSSRuleList, RulesSource};
use dom::cssstylesheet::CSSStyleSheet;
+use dom_struct::dom_struct;
use parking_lot::RwLock;
use std::sync::Arc;
use style::stylesheets::CssRules as StyleCssRules;
diff --git a/components/script/dom/cssimportrule.rs b/components/script/dom/cssimportrule.rs
index 582a6f597f9..6ef354ec43e 100644
--- a/components/script/dom/cssimportrule.rs
+++ b/components/script/dom/cssimportrule.rs
@@ -9,6 +9,7 @@ use dom::bindings::str::DOMString;
use dom::cssrule::{CSSRule, SpecificCSSRule};
use dom::cssstylesheet::CSSStyleSheet;
use dom::window::Window;
+use dom_struct::dom_struct;
use parking_lot::RwLock;
use std::sync::Arc;
use style::stylesheets::ImportRule;
diff --git a/components/script/dom/csskeyframerule.rs b/components/script/dom/csskeyframerule.rs
index db0a88edc6f..0f620bdc764 100644
--- a/components/script/dom/csskeyframerule.rs
+++ b/components/script/dom/csskeyframerule.rs
@@ -11,6 +11,7 @@ use dom::cssrule::{CSSRule, SpecificCSSRule};
use dom::cssstyledeclaration::{CSSModificationAccess, CSSStyleDeclaration, CSSStyleOwner};
use dom::cssstylesheet::CSSStyleSheet;
use dom::window::Window;
+use dom_struct::dom_struct;
use parking_lot::RwLock;
use std::sync::Arc;
use style::keyframes::Keyframe;
diff --git a/components/script/dom/csskeyframesrule.rs b/components/script/dom/csskeyframesrule.rs
index 1c94e0e99fb..977c953265c 100644
--- a/components/script/dom/csskeyframesrule.rs
+++ b/components/script/dom/csskeyframesrule.rs
@@ -15,6 +15,7 @@ use dom::cssrule::{CSSRule, SpecificCSSRule};
use dom::cssrulelist::{CSSRuleList, RulesSource};
use dom::cssstylesheet::CSSStyleSheet;
use dom::window::Window;
+use dom_struct::dom_struct;
use parking_lot::RwLock;
use servo_atoms::Atom;
use std::sync::Arc;
diff --git a/components/script/dom/cssmediarule.rs b/components/script/dom/cssmediarule.rs
index 438b390aea5..31923cb29dd 100644
--- a/components/script/dom/cssmediarule.rs
+++ b/components/script/dom/cssmediarule.rs
@@ -13,6 +13,7 @@ use dom::cssrule::SpecificCSSRule;
use dom::cssstylesheet::CSSStyleSheet;
use dom::medialist::MediaList;
use dom::window::Window;
+use dom_struct::dom_struct;
use parking_lot::RwLock;
use std::sync::Arc;
use style::media_queries::parse_media_query_list;
diff --git a/components/script/dom/cssnamespacerule.rs b/components/script/dom/cssnamespacerule.rs
index 5f451d3b798..51f60fafd08 100644
--- a/components/script/dom/cssnamespacerule.rs
+++ b/components/script/dom/cssnamespacerule.rs
@@ -10,6 +10,7 @@ use dom::bindings::str::DOMString;
use dom::cssrule::{CSSRule, SpecificCSSRule};
use dom::cssstylesheet::CSSStyleSheet;
use dom::window::Window;
+use dom_struct::dom_struct;
use parking_lot::RwLock;
use std::sync::Arc;
use style::stylesheets::NamespaceRule;
diff --git a/components/script/dom/cssrule.rs b/components/script/dom/cssrule.rs
index 4fa4041a8d7..277d7323a21 100644
--- a/components/script/dom/cssrule.rs
+++ b/components/script/dom/cssrule.rs
@@ -18,6 +18,7 @@ use dom::cssstylesheet::CSSStyleSheet;
use dom::csssupportsrule::CSSSupportsRule;
use dom::cssviewportrule::CSSViewportRule;
use dom::window::Window;
+use dom_struct::dom_struct;
use std::cell::Cell;
use style::stylesheets::CssRule as StyleCssRule;
diff --git a/components/script/dom/cssrulelist.rs b/components/script/dom/cssrulelist.rs
index f667638b022..0b6351d237c 100644
--- a/components/script/dom/cssrulelist.rs
+++ b/components/script/dom/cssrulelist.rs
@@ -12,6 +12,7 @@ use dom::csskeyframerule::CSSKeyframeRule;
use dom::cssrule::CSSRule;
use dom::cssstylesheet::CSSStyleSheet;
use dom::window::Window;
+use dom_struct::dom_struct;
use parking_lot::RwLock;
use std::sync::Arc;
use style::stylesheets::{CssRules, KeyframesRule, RulesMutateError};
diff --git a/components/script/dom/cssstyledeclaration.rs b/components/script/dom/cssstyledeclaration.rs
index 12bf4386433..a2a77125a97 100644
--- a/components/script/dom/cssstyledeclaration.rs
+++ b/components/script/dom/cssstyledeclaration.rs
@@ -13,6 +13,7 @@ use dom::cssrule::CSSRule;
use dom::element::Element;
use dom::node::{Node, window_from_node};
use dom::window::Window;
+use dom_struct::dom_struct;
use parking_lot::RwLock;
use servo_url::ServoUrl;
use std::ascii::AsciiExt;
diff --git a/components/script/dom/cssstylerule.rs b/components/script/dom/cssstylerule.rs
index 5bd40dbe88c..3c4c8c815d1 100644
--- a/components/script/dom/cssstylerule.rs
+++ b/components/script/dom/cssstylerule.rs
@@ -11,6 +11,7 @@ use dom::cssrule::{CSSRule, SpecificCSSRule};
use dom::cssstyledeclaration::{CSSModificationAccess, CSSStyleDeclaration, CSSStyleOwner};
use dom::cssstylesheet::CSSStyleSheet;
use dom::window::Window;
+use dom_struct::dom_struct;
use parking_lot::RwLock;
use std::sync::Arc;
use style::stylesheets::StyleRule;
diff --git a/components/script/dom/cssstylesheet.rs b/components/script/dom/cssstylesheet.rs
index d0f6ed869c3..f8397a732c2 100644
--- a/components/script/dom/cssstylesheet.rs
+++ b/components/script/dom/cssstylesheet.rs
@@ -13,6 +13,7 @@ use dom::cssrulelist::{CSSRuleList, RulesSource};
use dom::element::Element;
use dom::stylesheet::StyleSheet;
use dom::window::Window;
+use dom_struct::dom_struct;
use std::cell::Cell;
use std::sync::Arc;
use style::stylesheets::Stylesheet as StyleStyleSheet;
diff --git a/components/script/dom/csssupportsrule.rs b/components/script/dom/csssupportsrule.rs
index 3e52fa3afc5..7b1e77a6c8f 100644
--- a/components/script/dom/csssupportsrule.rs
+++ b/components/script/dom/csssupportsrule.rs
@@ -12,6 +12,7 @@ use dom::cssconditionrule::CSSConditionRule;
use dom::cssrule::SpecificCSSRule;
use dom::cssstylesheet::CSSStyleSheet;
use dom::window::Window;
+use dom_struct::dom_struct;
use parking_lot::RwLock;
use std::sync::Arc;
use style::parser::ParserContext;
diff --git a/components/script/dom/cssviewportrule.rs b/components/script/dom/cssviewportrule.rs
index 25ca1b292c8..c784a26f442 100644
--- a/components/script/dom/cssviewportrule.rs
+++ b/components/script/dom/cssviewportrule.rs
@@ -9,6 +9,7 @@ use dom::bindings::str::DOMString;
use dom::cssrule::{CSSRule, SpecificCSSRule};
use dom::cssstylesheet::CSSStyleSheet;
use dom::window::Window;
+use dom_struct::dom_struct;
use parking_lot::RwLock;
use std::sync::Arc;
use style::viewport::ViewportRule;
diff --git a/components/script/dom/customevent.rs b/components/script/dom/customevent.rs
index f11f2643dad..dd9c1001593 100644
--- a/components/script/dom/customevent.rs
+++ b/components/script/dom/customevent.rs
@@ -13,6 +13,7 @@ use dom::bindings::str::DOMString;
use dom::bindings::trace::RootedTraceableBox;
use dom::event::Event;
use dom::globalscope::GlobalScope;
+use dom_struct::dom_struct;
use js::jsapi::{HandleValue, JSContext};
use js::jsval::JSVal;
use servo_atoms::Atom;
diff --git a/components/script/dom/dedicatedworkerglobalscope.rs b/components/script/dom/dedicatedworkerglobalscope.rs
index 03e3cebe5e1..14dd070f44d 100644
--- a/components/script/dom/dedicatedworkerglobalscope.rs
+++ b/components/script/dom/dedicatedworkerglobalscope.rs
@@ -20,6 +20,7 @@ use dom::globalscope::GlobalScope;
use dom::messageevent::MessageEvent;
use dom::worker::{TrustedWorkerAddress, WorkerErrorHandler, WorkerMessageHandler};
use dom::workerglobalscope::WorkerGlobalScope;
+use dom_struct::dom_struct;
use ipc_channel::ipc::{self, IpcReceiver, IpcSender};
use ipc_channel::router::ROUTER;
use js::jsapi::{HandleValue, JS_SetInterruptCallback};
diff --git a/components/script/dom/dissimilaroriginlocation.rs b/components/script/dom/dissimilaroriginlocation.rs
index 6f5eda8c402..b4cd2d84e5d 100644
--- a/components/script/dom/dissimilaroriginlocation.rs
+++ b/components/script/dom/dissimilaroriginlocation.rs
@@ -11,6 +11,7 @@ use dom::bindings::reflector::reflect_dom_object;
use dom::bindings::str::DOMString;
use dom::bindings::str::USVString;
use dom::dissimilaroriginwindow::DissimilarOriginWindow;
+use dom_struct::dom_struct;
/// Represents a dissimilar-origin `Location` that exists in another script thread.
///
diff --git a/components/script/dom/dissimilaroriginwindow.rs b/components/script/dom/dissimilaroriginwindow.rs
index 518adb0f341..9867e642906 100644
--- a/components/script/dom/dissimilaroriginwindow.rs
+++ b/components/script/dom/dissimilaroriginwindow.rs
@@ -10,6 +10,7 @@ use dom::bindings::str::DOMString;
use dom::browsingcontext::BrowsingContext;
use dom::dissimilaroriginlocation::DissimilarOriginLocation;
use dom::globalscope::GlobalScope;
+use dom_struct::dom_struct;
use ipc_channel::ipc;
use js::jsapi::{JSContext, HandleValue};
use js::jsval::{JSVal, UndefinedValue};
diff --git a/components/script/dom/document.rs b/components/script/dom/document.rs
index 4b693f0448d..a14a809e785 100644
--- a/components/script/dom/document.rs
+++ b/components/script/dom/document.rs
@@ -87,6 +87,7 @@ use dom::treewalker::TreeWalker;
use dom::uievent::UIEvent;
use dom::webglcontextevent::WebGLContextEvent;
use dom::window::{ReflowReason, Window};
+use dom_struct::dom_struct;
use encoding::EncodingRef;
use encoding::all::UTF_8;
use euclid::point::Point2D;
diff --git a/components/script/dom/documentfragment.rs b/components/script/dom/documentfragment.rs
index 554fb8fe3b3..6f2a123dd06 100644
--- a/components/script/dom/documentfragment.rs
+++ b/components/script/dom/documentfragment.rs
@@ -16,6 +16,7 @@ use dom::htmlcollection::HTMLCollection;
use dom::node::{Node, window_from_node};
use dom::nodelist::NodeList;
use dom::window::Window;
+use dom_struct::dom_struct;
use servo_atoms::Atom;
// https://dom.spec.whatwg.org/#documentfragment
diff --git a/components/script/dom/documenttype.rs b/components/script/dom/documenttype.rs
index c48805eed79..2b03ce2e07b 100644
--- a/components/script/dom/documenttype.rs
+++ b/components/script/dom/documenttype.rs
@@ -11,6 +11,7 @@ use dom::bindings::js::Root;
use dom::bindings::str::DOMString;
use dom::document::Document;
use dom::node::Node;
+use dom_struct::dom_struct;
// https://dom.spec.whatwg.org/#documenttype
/// The `DOCTYPE` tag.
diff --git a/components/script/dom/domexception.rs b/components/script/dom/domexception.rs
index 7428a986c48..628ae5ceed5 100644
--- a/components/script/dom/domexception.rs
+++ b/components/script/dom/domexception.rs
@@ -9,6 +9,7 @@ use dom::bindings::js::Root;
use dom::bindings::reflector::{Reflector, reflect_dom_object};
use dom::bindings::str::DOMString;
use dom::globalscope::GlobalScope;
+use dom_struct::dom_struct;
#[repr(u16)]
#[derive(JSTraceable, Copy, Clone, Debug, HeapSizeOf)]
diff --git a/components/script/dom/domimplementation.rs b/components/script/dom/domimplementation.rs
index 1de0a24863b..e0f9d69a45a 100644
--- a/components/script/dom/domimplementation.rs
+++ b/components/script/dom/domimplementation.rs
@@ -23,6 +23,7 @@ use dom::htmltitleelement::HTMLTitleElement;
use dom::node::Node;
use dom::text::Text;
use dom::xmldocument::XMLDocument;
+use dom_struct::dom_struct;
use script_traits::DocumentActivity;
// https://dom.spec.whatwg.org/#domimplementation
diff --git a/components/script/dom/dommatrix.rs b/components/script/dom/dommatrix.rs
index dbe7a27516c..eb33d42efcf 100644
--- a/components/script/dom/dommatrix.rs
+++ b/components/script/dom/dommatrix.rs
@@ -10,6 +10,7 @@ use dom::bindings::js::Root;
use dom::bindings::reflector::reflect_dom_object;
use dom::dommatrixreadonly::{dommatrixinit_to_matrix, DOMMatrixReadOnly, entries_to_matrix};
use dom::globalscope::GlobalScope;
+use dom_struct::dom_struct;
use euclid::Matrix4D;
diff --git a/components/script/dom/dommatrixreadonly.rs b/components/script/dom/dommatrixreadonly.rs
index 978fa96ce6b..4f6331e0dd7 100644
--- a/components/script/dom/dommatrixreadonly.rs
+++ b/components/script/dom/dommatrixreadonly.rs
@@ -13,6 +13,7 @@ use dom::bindings::reflector::{reflect_dom_object, DomObject, Reflector};
use dom::dommatrix::DOMMatrix;
use dom::dompoint::DOMPoint;
use dom::globalscope::GlobalScope;
+use dom_struct::dom_struct;
use euclid::{Matrix4D, Point4D, Radians};
use std::cell::{Cell, Ref};
use std::f64;
diff --git a/components/script/dom/domparser.rs b/components/script/dom/domparser.rs
index 67d16934c66..4af6ebf8c60 100644
--- a/components/script/dom/domparser.rs
+++ b/components/script/dom/domparser.rs
@@ -19,6 +19,7 @@ use dom::document::{Document, HasBrowsingContext, IsHTMLDocument};
use dom::document::DocumentSource;
use dom::servoparser::ServoParser;
use dom::window::Window;
+use dom_struct::dom_struct;
use script_traits::DocumentActivity;
#[dom_struct]
diff --git a/components/script/dom/dompoint.rs b/components/script/dom/dompoint.rs
index 2f77f77c2c1..0a2ed9cec5d 100644
--- a/components/script/dom/dompoint.rs
+++ b/components/script/dom/dompoint.rs
@@ -9,6 +9,7 @@ use dom::bindings::js::Root;
use dom::bindings::reflector::reflect_dom_object;
use dom::dompointreadonly::{DOMPointReadOnly, DOMPointWriteMethods};
use dom::globalscope::GlobalScope;
+use dom_struct::dom_struct;
// http://dev.w3.org/fxtf/geometry/Overview.html#dompoint
#[dom_struct]
diff --git a/components/script/dom/dompointreadonly.rs b/components/script/dom/dompointreadonly.rs
index 9da4e27a984..7180207c930 100644
--- a/components/script/dom/dompointreadonly.rs
+++ b/components/script/dom/dompointreadonly.rs
@@ -7,6 +7,7 @@ use dom::bindings::error::Fallible;
use dom::bindings::js::Root;
use dom::bindings::reflector::{Reflector, reflect_dom_object};
use dom::globalscope::GlobalScope;
+use dom_struct::dom_struct;
use std::cell::Cell;
// http://dev.w3.org/fxtf/geometry/Overview.html#dompointreadonly
diff --git a/components/script/dom/domquad.rs b/components/script/dom/domquad.rs
index 37d0b342818..8c665731f84 100644
--- a/components/script/dom/domquad.rs
+++ b/components/script/dom/domquad.rs
@@ -11,6 +11,7 @@ use dom::bindings::reflector::{DomObject, Reflector, reflect_dom_object};
use dom::dompoint::DOMPoint;
use dom::domrect::DOMRect;
use dom::globalscope::GlobalScope;
+use dom_struct::dom_struct;
// https://drafts.fxtf.org/geometry/#DOMQuad
#[dom_struct]
diff --git a/components/script/dom/domrect.rs b/components/script/dom/domrect.rs
index 78e1b2db22e..3201e6c49ef 100644
--- a/components/script/dom/domrect.rs
+++ b/components/script/dom/domrect.rs
@@ -10,6 +10,7 @@ use dom::bindings::js::Root;
use dom::bindings::reflector::reflect_dom_object;
use dom::domrectreadonly::DOMRectReadOnly;
use dom::globalscope::GlobalScope;
+use dom_struct::dom_struct;
#[dom_struct]
pub struct DOMRect {
diff --git a/components/script/dom/domrectlist.rs b/components/script/dom/domrectlist.rs
index 392aa18997e..a7d99b99448 100644
--- a/components/script/dom/domrectlist.rs
+++ b/components/script/dom/domrectlist.rs
@@ -8,6 +8,7 @@ use dom::bindings::js::{JS, Root};
use dom::bindings::reflector::{Reflector, reflect_dom_object};
use dom::domrect::DOMRect;
use dom::window::Window;
+use dom_struct::dom_struct;
#[dom_struct]
pub struct DOMRectList {
diff --git a/components/script/dom/domrectreadonly.rs b/components/script/dom/domrectreadonly.rs
index ef0c7ce2c67..f5e08a4fcb7 100644
--- a/components/script/dom/domrectreadonly.rs
+++ b/components/script/dom/domrectreadonly.rs
@@ -7,6 +7,7 @@ use dom::bindings::error::Fallible;
use dom::bindings::js::Root;
use dom::bindings::reflector::{Reflector, reflect_dom_object};
use dom::globalscope::GlobalScope;
+use dom_struct::dom_struct;
use std::cell::Cell;
#[dom_struct]
diff --git a/components/script/dom/domstringmap.rs b/components/script/dom/domstringmap.rs
index dd4384d5a28..d529ca25cf8 100644
--- a/components/script/dom/domstringmap.rs
+++ b/components/script/dom/domstringmap.rs
@@ -10,6 +10,7 @@ use dom::bindings::reflector::{Reflector, reflect_dom_object};
use dom::bindings::str::DOMString;
use dom::htmlelement::HTMLElement;
use dom::node::window_from_node;
+use dom_struct::dom_struct;
#[dom_struct]
pub struct DOMStringMap {
diff --git a/components/script/dom/domtokenlist.rs b/components/script/dom/domtokenlist.rs
index 95f42d12460..28266709f67 100644
--- a/components/script/dom/domtokenlist.rs
+++ b/components/script/dom/domtokenlist.rs
@@ -11,6 +11,7 @@ use dom::bindings::reflector::{Reflector, reflect_dom_object};
use dom::bindings::str::DOMString;
use dom::element::Element;
use dom::node::window_from_node;
+use dom_struct::dom_struct;
use html5ever_atoms::LocalName;
use servo_atoms::Atom;
use style::str::HTML_SPACE_CHARACTERS;
diff --git a/components/script/dom/element.rs b/components/script/dom/element.rs
index 0c681f9759c..47177172895 100644
--- a/components/script/dom/element.rs
+++ b/components/script/dom/element.rs
@@ -72,6 +72,7 @@ use dom::text::Text;
use dom::validation::Validatable;
use dom::virtualmethods::{VirtualMethods, vtable_for};
use dom::window::ReflowReason;
+use dom_struct::dom_struct;
use html5ever::serialize;
use html5ever::serialize::SerializeOpts;
use html5ever::serialize::TraversalScope;
diff --git a/components/script/dom/errorevent.rs b/components/script/dom/errorevent.rs
index 37197b6125a..58bd2e38398 100644
--- a/components/script/dom/errorevent.rs
+++ b/components/script/dom/errorevent.rs
@@ -14,6 +14,7 @@ use dom::bindings::str::DOMString;
use dom::bindings::trace::RootedTraceableBox;
use dom::event::{Event, EventBubbles, EventCancelable};
use dom::globalscope::GlobalScope;
+use dom_struct::dom_struct;
use js::jsapi::{HandleValue, JSContext};
use js::jsval::JSVal;
use servo_atoms::Atom;
diff --git a/components/script/dom/event.rs b/components/script/dom/event.rs
index 2d3c2afe460..d6ba1d85109 100644
--- a/components/script/dom/event.rs
+++ b/components/script/dom/event.rs
@@ -19,6 +19,7 @@ use dom::globalscope::GlobalScope;
use dom::node::Node;
use dom::virtualmethods::vtable_for;
use dom::window::Window;
+use dom_struct::dom_struct;
use script_thread::Runnable;
use servo_atoms::Atom;
use std::cell::Cell;
diff --git a/components/script/dom/eventsource.rs b/components/script/dom/eventsource.rs
index cedaa8fd39b..7945eec0b7d 100644
--- a/components/script/dom/eventsource.rs
+++ b/components/script/dom/eventsource.rs
@@ -15,6 +15,7 @@ use dom::event::Event;
use dom::eventtarget::EventTarget;
use dom::globalscope::GlobalScope;
use dom::messageevent::MessageEvent;
+use dom_struct::dom_struct;
use encoding::Encoding;
use encoding::all::UTF_8;
use euclid::length::Length;
diff --git a/components/script/dom/eventtarget.rs b/components/script/dom/eventtarget.rs
index 57eedd8e333..f45942f0f05 100644
--- a/components/script/dom/eventtarget.rs
+++ b/components/script/dom/eventtarget.rs
@@ -26,6 +26,7 @@ use dom::event::{Event, EventBubbles, EventCancelable, EventStatus};
use dom::node::document_from_node;
use dom::virtualmethods::VirtualMethods;
use dom::window::Window;
+use dom_struct::dom_struct;
use fnv::FnvHasher;
use heapsize::HeapSizeOf;
use js::jsapi::{CompileFunction, JS_GetFunctionObject, JSAutoCompartment};
diff --git a/components/script/dom/extendableevent.rs b/components/script/dom/extendableevent.rs
index 0a7db40b6d5..8cc88706fb1 100644
--- a/components/script/dom/extendableevent.rs
+++ b/components/script/dom/extendableevent.rs
@@ -11,6 +11,7 @@ use dom::bindings::reflector::reflect_dom_object;
use dom::bindings::str::DOMString;
use dom::event::Event;
use dom::serviceworkerglobalscope::ServiceWorkerGlobalScope;
+use dom_struct::dom_struct;
use js::jsapi::{HandleValue, JSContext};
use servo_atoms::Atom;
diff --git a/components/script/dom/extendablemessageevent.rs b/components/script/dom/extendablemessageevent.rs
index dd0360cb408..49c461083f2 100644
--- a/components/script/dom/extendablemessageevent.rs
+++ b/components/script/dom/extendablemessageevent.rs
@@ -15,6 +15,7 @@ use dom::eventtarget::EventTarget;
use dom::extendableevent::ExtendableEvent;
use dom::globalscope::GlobalScope;
use dom::serviceworkerglobalscope::ServiceWorkerGlobalScope;
+use dom_struct::dom_struct;
use js::jsapi::{HandleValue, Heap, JSContext};
use js::jsval::JSVal;
use servo_atoms::Atom;
diff --git a/components/script/dom/file.rs b/components/script/dom/file.rs
index dba94a85e50..6cf144d10e0 100644
--- a/components/script/dom/file.rs
+++ b/components/script/dom/file.rs
@@ -13,6 +13,7 @@ use dom::bindings::str::DOMString;
use dom::blob::{Blob, BlobImpl, blob_parts_to_bytes};
use dom::globalscope::GlobalScope;
use dom::window::Window;
+use dom_struct::dom_struct;
use net_traits::filemanager_thread::SelectedFile;
use time;
diff --git a/components/script/dom/filelist.rs b/components/script/dom/filelist.rs
index e3654b752dc..3a5acc41235 100644
--- a/components/script/dom/filelist.rs
+++ b/components/script/dom/filelist.rs
@@ -8,6 +8,7 @@ use dom::bindings::js::{JS, Root};
use dom::bindings::reflector::{Reflector, reflect_dom_object};
use dom::file::File;
use dom::window::Window;
+use dom_struct::dom_struct;
use std::slice::Iter;
// https://w3c.github.io/FileAPI/#dfn-filelist
diff --git a/components/script/dom/filereader.rs b/components/script/dom/filereader.rs
index 0c303010656..53493dbd167 100644
--- a/components/script/dom/filereader.rs
+++ b/components/script/dom/filereader.rs
@@ -19,6 +19,7 @@ use dom::event::{Event, EventBubbles, EventCancelable};
use dom::eventtarget::EventTarget;
use dom::globalscope::GlobalScope;
use dom::progressevent::ProgressEvent;
+use dom_struct::dom_struct;
use encoding::all::UTF_8;
use encoding::label::encoding_from_whatwg_label;
use encoding::types::{DecoderTrap, EncodingRef};
diff --git a/components/script/dom/filereadersync.rs b/components/script/dom/filereadersync.rs
index 875843ea0c6..744625474cd 100644
--- a/components/script/dom/filereadersync.rs
+++ b/components/script/dom/filereadersync.rs
@@ -8,6 +8,7 @@ use dom::bindings::js::Root;
use dom::bindings::reflector::reflect_dom_object;
use dom::eventtarget::EventTarget;
use dom::globalscope::GlobalScope;
+use dom_struct::dom_struct;
#[dom_struct]
pub struct FileReaderSync {
diff --git a/components/script/dom/focusevent.rs b/components/script/dom/focusevent.rs
index 6ffed30e857..eae3920dae0 100644
--- a/components/script/dom/focusevent.rs
+++ b/components/script/dom/focusevent.rs
@@ -14,6 +14,7 @@ use dom::event::{EventBubbles, EventCancelable};
use dom::eventtarget::EventTarget;
use dom::uievent::UIEvent;
use dom::window::Window;
+use dom_struct::dom_struct;
use std::default::Default;
#[dom_struct]
diff --git a/components/script/dom/forcetouchevent.rs b/components/script/dom/forcetouchevent.rs
index 9e1c5cfcd91..cf5c622d8e8 100644
--- a/components/script/dom/forcetouchevent.rs
+++ b/components/script/dom/forcetouchevent.rs
@@ -12,6 +12,7 @@ use dom::bindings::reflector::reflect_dom_object;
use dom::bindings::str::DOMString;
use dom::uievent::UIEvent;
use dom::window::Window;
+use dom_struct::dom_struct;
#[dom_struct]
pub struct ForceTouchEvent {
diff --git a/components/script/dom/formdata.rs b/components/script/dom/formdata.rs
index 58b548aa475..2b8ca8f4d46 100644
--- a/components/script/dom/formdata.rs
+++ b/components/script/dom/formdata.rs
@@ -15,6 +15,7 @@ use dom::blob::{Blob, BlobImpl};
use dom::file::File;
use dom::globalscope::GlobalScope;
use dom::htmlformelement::{HTMLFormElement, FormDatumValue, FormDatum};
+use dom_struct::dom_struct;
use html5ever_atoms::LocalName;
use std::collections::HashMap;
use std::collections::hash_map::Entry::{Occupied, Vacant};
diff --git a/components/script/dom/globalscope.rs b/components/script/dom/globalscope.rs
index cc42ef18d06..2b4d3fc6886 100644
--- a/components/script/dom/globalscope.rs
+++ b/components/script/dom/globalscope.rs
@@ -19,6 +19,7 @@ use dom::event::{Event, EventBubbles, EventCancelable, EventStatus};
use dom::eventtarget::EventTarget;
use dom::window::Window;
use dom::workerglobalscope::WorkerGlobalScope;
+use dom_struct::dom_struct;
use ipc_channel::ipc::IpcSender;
use js::{JSCLASS_IS_DOMJSCLASS, JSCLASS_IS_GLOBAL};
use js::glue::{IsWrapper, UnwrapObject};
diff --git a/components/script/dom/hashchangeevent.rs b/components/script/dom/hashchangeevent.rs
index cd4b2b0a71f..4505d79f440 100644
--- a/components/script/dom/hashchangeevent.rs
+++ b/components/script/dom/hashchangeevent.rs
@@ -12,6 +12,7 @@ use dom::bindings::reflector::reflect_dom_object;
use dom::bindings::str::{DOMString, USVString};
use dom::event::Event;
use dom::window::Window;
+use dom_struct::dom_struct;
use servo_atoms::Atom;
// https://html.spec.whatwg.org/multipage/#hashchangeevent
diff --git a/components/script/dom/headers.rs b/components/script/dom/headers.rs
index 02262dbb475..ac5b332b51b 100644
--- a/components/script/dom/headers.rs
+++ b/components/script/dom/headers.rs
@@ -10,6 +10,7 @@ use dom::bindings::js::Root;
use dom::bindings::reflector::{Reflector, reflect_dom_object};
use dom::bindings::str::{ByteString, is_token};
use dom::globalscope::GlobalScope;
+use dom_struct::dom_struct;
use hyper::header::Headers as HyperHeaders;
use mime::{Mime, TopLevel, SubLevel};
use std::cell::Cell;
diff --git a/components/script/dom/history.rs b/components/script/dom/history.rs
index 1a971eae009..0e1aea4bf10 100644
--- a/components/script/dom/history.rs
+++ b/components/script/dom/history.rs
@@ -11,6 +11,7 @@ use dom::bindings::js::{JS, Root};
use dom::bindings::reflector::{Reflector, reflect_dom_object};
use dom::globalscope::GlobalScope;
use dom::window::Window;
+use dom_struct::dom_struct;
use ipc_channel::ipc;
use msg::constellation_msg::TraversalDirection;
use script_traits::ScriptMsg as ConstellationMsg;
diff --git a/components/script/dom/htmlanchorelement.rs b/components/script/dom/htmlanchorelement.rs
index 91ebadbd0f2..53aeb9a6bff 100644
--- a/components/script/dom/htmlanchorelement.rs
+++ b/components/script/dom/htmlanchorelement.rs
@@ -24,6 +24,7 @@ use dom::mouseevent::MouseEvent;
use dom::node::{Node, document_from_node};
use dom::urlhelper::UrlHelper;
use dom::virtualmethods::VirtualMethods;
+use dom_struct::dom_struct;
use html5ever_atoms::LocalName;
use net_traits::ReferrerPolicy;
use num_traits::ToPrimitive;
diff --git a/components/script/dom/htmlappletelement.rs b/components/script/dom/htmlappletelement.rs
index 081172031a3..73de3061cfe 100644
--- a/components/script/dom/htmlappletelement.rs
+++ b/components/script/dom/htmlappletelement.rs
@@ -11,6 +11,7 @@ use dom::document::Document;
use dom::htmlelement::HTMLElement;
use dom::node::Node;
use dom::virtualmethods::VirtualMethods;
+use dom_struct::dom_struct;
use html5ever_atoms::LocalName;
use style::attr::AttrValue;
diff --git a/components/script/dom/htmlareaelement.rs b/components/script/dom/htmlareaelement.rs
index 7b86a61a773..724deb2bdcd 100644
--- a/components/script/dom/htmlareaelement.rs
+++ b/components/script/dom/htmlareaelement.rs
@@ -18,6 +18,7 @@ use dom::htmlanchorelement::follow_hyperlink;
use dom::htmlelement::HTMLElement;
use dom::node::{Node, document_from_node};
use dom::virtualmethods::VirtualMethods;
+use dom_struct::dom_struct;
use euclid::point::Point2D;
use html5ever_atoms::LocalName;
use net_traits::ReferrerPolicy;
diff --git a/components/script/dom/htmlaudioelement.rs b/components/script/dom/htmlaudioelement.rs
index 66c5b2b2fca..bb8b12f06d6 100644
--- a/components/script/dom/htmlaudioelement.rs
+++ b/components/script/dom/htmlaudioelement.rs
@@ -8,6 +8,7 @@ use dom::bindings::str::DOMString;
use dom::document::Document;
use dom::htmlmediaelement::HTMLMediaElement;
use dom::node::Node;
+use dom_struct::dom_struct;
use html5ever_atoms::LocalName;
#[dom_struct]
diff --git a/components/script/dom/htmlbaseelement.rs b/components/script/dom/htmlbaseelement.rs
index 0db9b5398dd..fe34e6d77f0 100644
--- a/components/script/dom/htmlbaseelement.rs
+++ b/components/script/dom/htmlbaseelement.rs
@@ -13,6 +13,7 @@ use dom::element::{AttributeMutation, Element};
use dom::htmlelement::HTMLElement;
use dom::node::{Node, UnbindContext, document_from_node};
use dom::virtualmethods::VirtualMethods;
+use dom_struct::dom_struct;
use html5ever_atoms::LocalName;
use servo_url::ServoUrl;
use style::attr::AttrValue;
diff --git a/components/script/dom/htmlbodyelement.rs b/components/script/dom/htmlbodyelement.rs
index ea9b1775787..ef2855fa512 100644
--- a/components/script/dom/htmlbodyelement.rs
+++ b/components/script/dom/htmlbodyelement.rs
@@ -17,6 +17,7 @@ use dom::globalscope::GlobalScope;
use dom::htmlelement::HTMLElement;
use dom::node::{Node, document_from_node, window_from_node};
use dom::virtualmethods::VirtualMethods;
+use dom_struct::dom_struct;
use html5ever_atoms::LocalName;
use script_traits::ScriptMsg as ConstellationMsg;
use servo_url::ServoUrl;
diff --git a/components/script/dom/htmlbrelement.rs b/components/script/dom/htmlbrelement.rs
index 498013fc6c8..ebe6ed43706 100644
--- a/components/script/dom/htmlbrelement.rs
+++ b/components/script/dom/htmlbrelement.rs
@@ -8,6 +8,7 @@ use dom::bindings::str::DOMString;
use dom::document::Document;
use dom::htmlelement::HTMLElement;
use dom::node::Node;
+use dom_struct::dom_struct;
use html5ever_atoms::LocalName;
#[dom_struct]
diff --git a/components/script/dom/htmlbuttonelement.rs b/components/script/dom/htmlbuttonelement.rs
index f266f0236c5..56a614cf608 100755
--- a/components/script/dom/htmlbuttonelement.rs
+++ b/components/script/dom/htmlbuttonelement.rs
@@ -23,6 +23,7 @@ use dom::nodelist::NodeList;
use dom::validation::Validatable;
use dom::validitystate::{ValidityState, ValidationFlags};
use dom::virtualmethods::VirtualMethods;
+use dom_struct::dom_struct;
use html5ever_atoms::LocalName;
use std::cell::Cell;
use style::element_state::*;
diff --git a/components/script/dom/htmlcanvaselement.rs b/components/script/dom/htmlcanvaselement.rs
index a51463f4674..dbbf695b2d4 100644
--- a/components/script/dom/htmlcanvaselement.rs
+++ b/components/script/dom/htmlcanvaselement.rs
@@ -24,6 +24,7 @@ use dom::htmlelement::HTMLElement;
use dom::node::{Node, window_from_node};
use dom::virtualmethods::VirtualMethods;
use dom::webglrenderingcontext::{LayoutCanvasWebGLRenderingContextHelpers, WebGLRenderingContext};
+use dom_struct::dom_struct;
use euclid::size::Size2D;
use html5ever_atoms::LocalName;
use image::ColorType;
diff --git a/components/script/dom/htmlcollection.rs b/components/script/dom/htmlcollection.rs
index eacffd6cded..4e05de86922 100644
--- a/components/script/dom/htmlcollection.rs
+++ b/components/script/dom/htmlcollection.rs
@@ -13,6 +13,7 @@ use dom::bindings::xmlname::namespace_from_domstring;
use dom::element::Element;
use dom::node::Node;
use dom::window::Window;
+use dom_struct::dom_struct;
use html5ever_atoms::{LocalName, QualName};
use servo_atoms::Atom;
use std::cell::Cell;
diff --git a/components/script/dom/htmldataelement.rs b/components/script/dom/htmldataelement.rs
index dcd15f9261a..8dc53d9860b 100644
--- a/components/script/dom/htmldataelement.rs
+++ b/components/script/dom/htmldataelement.rs
@@ -9,6 +9,7 @@ use dom::bindings::str::DOMString;
use dom::document::Document;
use dom::htmlelement::HTMLElement;
use dom::node::Node;
+use dom_struct::dom_struct;
use html5ever_atoms::LocalName;
#[dom_struct]
diff --git a/components/script/dom/htmldatalistelement.rs b/components/script/dom/htmldatalistelement.rs
index 616bcd80792..48c39c500ed 100644
--- a/components/script/dom/htmldatalistelement.rs
+++ b/components/script/dom/htmldatalistelement.rs
@@ -13,6 +13,7 @@ use dom::htmlcollection::{CollectionFilter, HTMLCollection};
use dom::htmlelement::HTMLElement;
use dom::htmloptionelement::HTMLOptionElement;
use dom::node::{Node, window_from_node};
+use dom_struct::dom_struct;
use html5ever_atoms::LocalName;
#[dom_struct]
diff --git a/components/script/dom/htmldetailselement.rs b/components/script/dom/htmldetailselement.rs
index 8df0f1a62fb..1937c8f09b6 100644
--- a/components/script/dom/htmldetailselement.rs
+++ b/components/script/dom/htmldetailselement.rs
@@ -15,6 +15,7 @@ use dom::eventtarget::EventTarget;
use dom::htmlelement::HTMLElement;
use dom::node::{Node, window_from_node};
use dom::virtualmethods::VirtualMethods;
+use dom_struct::dom_struct;
use html5ever_atoms::LocalName;
use script_thread::Runnable;
use std::cell::Cell;
diff --git a/components/script/dom/htmldialogelement.rs b/components/script/dom/htmldialogelement.rs
index 80ee9499a9f..37b38ed82dc 100644
--- a/components/script/dom/htmldialogelement.rs
+++ b/components/script/dom/htmldialogelement.rs
@@ -13,6 +13,7 @@ use dom::element::Element;
use dom::eventtarget::EventTarget;
use dom::htmlelement::HTMLElement;
use dom::node::{Node, window_from_node};
+use dom_struct::dom_struct;
use html5ever_atoms::LocalName;
#[dom_struct]
diff --git a/components/script/dom/htmldirectoryelement.rs b/components/script/dom/htmldirectoryelement.rs
index bd40c508ffe..aa24adcfacf 100644
--- a/components/script/dom/htmldirectoryelement.rs
+++ b/components/script/dom/htmldirectoryelement.rs
@@ -8,6 +8,7 @@ use dom::bindings::str::DOMString;
use dom::document::Document;
use dom::htmlelement::HTMLElement;
use dom::node::Node;
+use dom_struct::dom_struct;
use html5ever_atoms::LocalName;
#[dom_struct]
diff --git a/components/script/dom/htmldivelement.rs b/components/script/dom/htmldivelement.rs
index ba738ca75e2..e4d8bf669ef 100644
--- a/components/script/dom/htmldivelement.rs
+++ b/components/script/dom/htmldivelement.rs
@@ -8,6 +8,7 @@ use dom::bindings::str::DOMString;
use dom::document::Document;
use dom::htmlelement::HTMLElement;
use dom::node::Node;
+use dom_struct::dom_struct;
use html5ever_atoms::LocalName;
#[dom_struct]
diff --git a/components/script/dom/htmldlistelement.rs b/components/script/dom/htmldlistelement.rs
index db319c37458..6da79f5d5c8 100644
--- a/components/script/dom/htmldlistelement.rs
+++ b/components/script/dom/htmldlistelement.rs
@@ -8,6 +8,7 @@ use dom::bindings::str::DOMString;
use dom::document::Document;
use dom::htmlelement::HTMLElement;
use dom::node::Node;
+use dom_struct::dom_struct;
use html5ever_atoms::LocalName;
#[dom_struct]
diff --git a/components/script/dom/htmlelement.rs b/components/script/dom/htmlelement.rs
index 9caa85225ef..ade0b7307d1 100644
--- a/components/script/dom/htmlelement.rs
+++ b/components/script/dom/htmlelement.rs
@@ -29,6 +29,7 @@ use dom::node::{Node, SEQUENTIALLY_FOCUSABLE};
use dom::node::{document_from_node, window_from_node};
use dom::nodelist::NodeList;
use dom::virtualmethods::VirtualMethods;
+use dom_struct::dom_struct;
use html5ever_atoms::LocalName;
use std::ascii::AsciiExt;
use std::borrow::ToOwned;
diff --git a/components/script/dom/htmlembedelement.rs b/components/script/dom/htmlembedelement.rs
index 0c4610f0948..9d88e7d7c12 100644
--- a/components/script/dom/htmlembedelement.rs
+++ b/components/script/dom/htmlembedelement.rs
@@ -8,6 +8,7 @@ use dom::bindings::str::DOMString;
use dom::document::Document;
use dom::htmlelement::HTMLElement;
use dom::node::Node;
+use dom_struct::dom_struct;
use html5ever_atoms::LocalName;
#[dom_struct]
diff --git a/components/script/dom/htmlfieldsetelement.rs b/components/script/dom/htmlfieldsetelement.rs
index 4168659b741..19dbc8d4f1b 100644
--- a/components/script/dom/htmlfieldsetelement.rs
+++ b/components/script/dom/htmlfieldsetelement.rs
@@ -17,6 +17,7 @@ use dom::htmllegendelement::HTMLLegendElement;
use dom::node::{Node, window_from_node};
use dom::validitystate::ValidityState;
use dom::virtualmethods::VirtualMethods;
+use dom_struct::dom_struct;
use html5ever_atoms::LocalName;
use style::element_state::*;
diff --git a/components/script/dom/htmlfontelement.rs b/components/script/dom/htmlfontelement.rs
index 80a0266595c..8644544cdfe 100644
--- a/components/script/dom/htmlfontelement.rs
+++ b/components/script/dom/htmlfontelement.rs
@@ -13,6 +13,7 @@ use dom::element::{Element, RawLayoutElementHelpers};
use dom::htmlelement::HTMLElement;
use dom::node::Node;
use dom::virtualmethods::VirtualMethods;
+use dom_struct::dom_struct;
use html5ever_atoms::LocalName;
use servo_atoms::Atom;
use style::attr::AttrValue;
diff --git a/components/script/dom/htmlformcontrolscollection.rs b/components/script/dom/htmlformcontrolscollection.rs
index 1009e5f1142..a90e2dd48ee 100644
--- a/components/script/dom/htmlformcontrolscollection.rs
+++ b/components/script/dom/htmlformcontrolscollection.rs
@@ -14,6 +14,7 @@ use dom::htmlcollection::{CollectionFilter, HTMLCollection};
use dom::node::Node;
use dom::radionodelist::RadioNodeList;
use dom::window::Window;
+use dom_struct::dom_struct;
use std::iter;
#[dom_struct]
diff --git a/components/script/dom/htmlformelement.rs b/components/script/dom/htmlformelement.rs
index b403b1389a8..67d80acdcab 100755
--- a/components/script/dom/htmlformelement.rs
+++ b/components/script/dom/htmlformelement.rs
@@ -37,6 +37,7 @@ use dom::htmltextareaelement::HTMLTextAreaElement;
use dom::node::{Node, document_from_node, window_from_node};
use dom::validitystate::ValidationFlags;
use dom::virtualmethods::VirtualMethods;
+use dom_struct::dom_struct;
use encoding::EncodingRef;
use encoding::all::UTF_8;
use encoding::label::encoding_from_whatwg_label;
diff --git a/components/script/dom/htmlframeelement.rs b/components/script/dom/htmlframeelement.rs
index 919c460dee5..e36bfc95310 100644
--- a/components/script/dom/htmlframeelement.rs
+++ b/components/script/dom/htmlframeelement.rs
@@ -8,6 +8,7 @@ use dom::bindings::str::DOMString;
use dom::document::Document;
use dom::htmlelement::HTMLElement;
use dom::node::Node;
+use dom_struct::dom_struct;
use html5ever_atoms::LocalName;
#[dom_struct]
diff --git a/components/script/dom/htmlframesetelement.rs b/components/script/dom/htmlframesetelement.rs
index c2c95ea58c7..d6fba77cb08 100644
--- a/components/script/dom/htmlframesetelement.rs
+++ b/components/script/dom/htmlframesetelement.rs
@@ -11,6 +11,7 @@ use dom::bindings::str::DOMString;
use dom::document::Document;
use dom::htmlelement::HTMLElement;
use dom::node::{Node, document_from_node};
+use dom_struct::dom_struct;
use html5ever_atoms::LocalName;
#[dom_struct]
diff --git a/components/script/dom/htmlheadelement.rs b/components/script/dom/htmlheadelement.rs
index fc6e888d015..7e05ac3d45c 100644
--- a/components/script/dom/htmlheadelement.rs
+++ b/components/script/dom/htmlheadelement.rs
@@ -14,6 +14,7 @@ use dom::htmlmetaelement::HTMLMetaElement;
use dom::node::{Node, document_from_node};
use dom::userscripts::load_script;
use dom::virtualmethods::VirtualMethods;
+use dom_struct::dom_struct;
use html5ever_atoms::LocalName;
#[dom_struct]
diff --git a/components/script/dom/htmlheadingelement.rs b/components/script/dom/htmlheadingelement.rs
index edfd894c51e..f820b8ba90f 100644
--- a/components/script/dom/htmlheadingelement.rs
+++ b/components/script/dom/htmlheadingelement.rs
@@ -8,6 +8,7 @@ use dom::bindings::str::DOMString;
use dom::document::Document;
use dom::htmlelement::HTMLElement;
use dom::node::Node;
+use dom_struct::dom_struct;
use html5ever_atoms::LocalName;
#[derive(JSTraceable, HeapSizeOf)]
diff --git a/components/script/dom/htmlhrelement.rs b/components/script/dom/htmlhrelement.rs
index 939e389e81f..f1d5774dbe9 100644
--- a/components/script/dom/htmlhrelement.rs
+++ b/components/script/dom/htmlhrelement.rs
@@ -12,6 +12,7 @@ use dom::element::{Element, RawLayoutElementHelpers};
use dom::htmlelement::HTMLElement;
use dom::node::Node;
use dom::virtualmethods::VirtualMethods;
+use dom_struct::dom_struct;
use html5ever_atoms::LocalName;
use style::attr::{AttrValue, LengthOrPercentageOrAuto};
diff --git a/components/script/dom/htmlhtmlelement.rs b/components/script/dom/htmlhtmlelement.rs
index d79fbadcae2..924b55650ee 100644
--- a/components/script/dom/htmlhtmlelement.rs
+++ b/components/script/dom/htmlhtmlelement.rs
@@ -8,6 +8,7 @@ use dom::bindings::str::DOMString;
use dom::document::Document;
use dom::htmlelement::HTMLElement;
use dom::node::Node;
+use dom_struct::dom_struct;
use html5ever_atoms::LocalName;
#[dom_struct]
diff --git a/components/script/dom/htmliframeelement.rs b/components/script/dom/htmliframeelement.rs
index 4ab82735384..b01edf0c4ed 100644
--- a/components/script/dom/htmliframeelement.rs
+++ b/components/script/dom/htmliframeelement.rs
@@ -35,6 +35,7 @@ use dom::htmlelement::HTMLElement;
use dom::node::{Node, NodeDamage, UnbindContext, document_from_node, window_from_node};
use dom::virtualmethods::VirtualMethods;
use dom::window::{ReflowReason, Window};
+use dom_struct::dom_struct;
use html5ever_atoms::LocalName;
use ipc_channel::ipc;
use js::jsapi::{JSAutoCompartment, JSContext, MutableHandleValue};
diff --git a/components/script/dom/htmlimageelement.rs b/components/script/dom/htmlimageelement.rs
index af98b013410..8f7497c55ac 100644
--- a/components/script/dom/htmlimageelement.rs
+++ b/components/script/dom/htmlimageelement.rs
@@ -32,6 +32,7 @@ use dom::node::{Node, NodeDamage, document_from_node, window_from_node};
use dom::values::UNSIGNED_LONG_MAX;
use dom::virtualmethods::VirtualMethods;
use dom::window::Window;
+use dom_struct::dom_struct;
use euclid::point::Point2D;
use html5ever_atoms::LocalName;
use ipc_channel::ipc;
diff --git a/components/script/dom/htmlinputelement.rs b/components/script/dom/htmlinputelement.rs
index 7e0eddae26d..f2e9f983300 100755
--- a/components/script/dom/htmlinputelement.rs
+++ b/components/script/dom/htmlinputelement.rs
@@ -36,6 +36,7 @@ use dom::nodelist::NodeList;
use dom::validation::Validatable;
use dom::validitystate::ValidationFlags;
use dom::virtualmethods::VirtualMethods;
+use dom_struct::dom_struct;
use html5ever_atoms::LocalName;
use ipc_channel::ipc::{self, IpcSender};
use mime_guess;
diff --git a/components/script/dom/htmllabelelement.rs b/components/script/dom/htmllabelelement.rs
index 5d954cfc5dd..02345ad1f20 100644
--- a/components/script/dom/htmllabelelement.rs
+++ b/components/script/dom/htmllabelelement.rs
@@ -16,6 +16,7 @@ use dom::htmlelement::HTMLElement;
use dom::htmlformelement::{FormControl, HTMLFormElement};
use dom::node::{document_from_node, Node};
use dom::virtualmethods::VirtualMethods;
+use dom_struct::dom_struct;
use html5ever_atoms::LocalName;
use style::attr::AttrValue;
diff --git a/components/script/dom/htmllegendelement.rs b/components/script/dom/htmllegendelement.rs
index 0b9cbf3992c..f05ec6bfd3b 100644
--- a/components/script/dom/htmllegendelement.rs
+++ b/components/script/dom/htmllegendelement.rs
@@ -15,6 +15,7 @@ use dom::htmlfieldsetelement::HTMLFieldSetElement;
use dom::htmlformelement::{HTMLFormElement, FormControl};
use dom::node::{Node, UnbindContext};
use dom::virtualmethods::VirtualMethods;
+use dom_struct::dom_struct;
use html5ever_atoms::LocalName;
#[dom_struct]
diff --git a/components/script/dom/htmllielement.rs b/components/script/dom/htmllielement.rs
index 4d17eb9376d..aef80a52311 100644
--- a/components/script/dom/htmllielement.rs
+++ b/components/script/dom/htmllielement.rs
@@ -11,6 +11,7 @@ use dom::document::Document;
use dom::htmlelement::HTMLElement;
use dom::node::Node;
use dom::virtualmethods::VirtualMethods;
+use dom_struct::dom_struct;
use html5ever_atoms::LocalName;
use style::attr::AttrValue;
diff --git a/components/script/dom/htmllinkelement.rs b/components/script/dom/htmllinkelement.rs
index 20e560e93ad..b4f90b89b85 100644
--- a/components/script/dom/htmllinkelement.rs
+++ b/components/script/dom/htmllinkelement.rs
@@ -21,6 +21,7 @@ use dom::htmlelement::HTMLElement;
use dom::node::{Node, UnbindContext, document_from_node, window_from_node};
use dom::stylesheet::StyleSheet as DOMStyleSheet;
use dom::virtualmethods::VirtualMethods;
+use dom_struct::dom_struct;
use html5ever_atoms::LocalName;
use net_traits::ReferrerPolicy;
use script_traits::{MozBrowserEvent, ScriptMsg as ConstellationMsg};
diff --git a/components/script/dom/htmlmapelement.rs b/components/script/dom/htmlmapelement.rs
index 8ef091b0762..c6bcb615431 100644
--- a/components/script/dom/htmlmapelement.rs
+++ b/components/script/dom/htmlmapelement.rs
@@ -8,6 +8,7 @@ use dom::bindings::str::DOMString;
use dom::document::Document;
use dom::htmlelement::HTMLElement;
use dom::node::Node;
+use dom_struct::dom_struct;
use html5ever_atoms::LocalName;
#[dom_struct]
diff --git a/components/script/dom/htmlmediaelement.rs b/components/script/dom/htmlmediaelement.rs
index fd327404b4d..fc036ee35cc 100644
--- a/components/script/dom/htmlmediaelement.rs
+++ b/components/script/dom/htmlmediaelement.rs
@@ -27,6 +27,7 @@ use dom::htmlvideoelement::HTMLVideoElement;
use dom::mediaerror::MediaError;
use dom::node::{window_from_node, document_from_node, Node, UnbindContext};
use dom::virtualmethods::VirtualMethods;
+use dom_struct::dom_struct;
use html5ever_atoms::LocalName;
use ipc_channel::ipc;
use ipc_channel::router::ROUTER;
diff --git a/components/script/dom/htmlmetaelement.rs b/components/script/dom/htmlmetaelement.rs
index cf9d078e39f..a751486de7d 100644
--- a/components/script/dom/htmlmetaelement.rs
+++ b/components/script/dom/htmlmetaelement.rs
@@ -17,6 +17,7 @@ use dom::htmlelement::HTMLElement;
use dom::htmlheadelement::HTMLHeadElement;
use dom::node::{Node, UnbindContext, document_from_node, window_from_node};
use dom::virtualmethods::VirtualMethods;
+use dom_struct::dom_struct;
use html5ever_atoms::LocalName;
use parking_lot::RwLock;
use servo_config::prefs::PREFS;
diff --git a/components/script/dom/htmlmeterelement.rs b/components/script/dom/htmlmeterelement.rs
index e323af1485b..b57951270a4 100644
--- a/components/script/dom/htmlmeterelement.rs
+++ b/components/script/dom/htmlmeterelement.rs
@@ -10,6 +10,7 @@ use dom::document::Document;
use dom::htmlelement::HTMLElement;
use dom::node::Node;
use dom::nodelist::NodeList;
+use dom_struct::dom_struct;
use html5ever_atoms::LocalName;
#[dom_struct]
diff --git a/components/script/dom/htmlmodelement.rs b/components/script/dom/htmlmodelement.rs
index 6cd63d24505..7724640642c 100644
--- a/components/script/dom/htmlmodelement.rs
+++ b/components/script/dom/htmlmodelement.rs
@@ -8,6 +8,7 @@ use dom::bindings::str::DOMString;
use dom::document::Document;
use dom::htmlelement::HTMLElement;
use dom::node::Node;
+use dom_struct::dom_struct;
use html5ever_atoms::LocalName;
#[dom_struct]
diff --git a/components/script/dom/htmlobjectelement.rs b/components/script/dom/htmlobjectelement.rs
index d04f989ce5e..6352ea5c862 100755
--- a/components/script/dom/htmlobjectelement.rs
+++ b/components/script/dom/htmlobjectelement.rs
@@ -17,6 +17,7 @@ use dom::node::{Node, window_from_node};
use dom::validation::Validatable;
use dom::validitystate::{ValidityState, ValidationFlags};
use dom::virtualmethods::VirtualMethods;
+use dom_struct::dom_struct;
use html5ever_atoms::LocalName;
use net_traits::image::base::Image;
use std::sync::Arc;
diff --git a/components/script/dom/htmlolistelement.rs b/components/script/dom/htmlolistelement.rs
index 19c731bdc0a..a36e97404e4 100644
--- a/components/script/dom/htmlolistelement.rs
+++ b/components/script/dom/htmlolistelement.rs
@@ -8,6 +8,7 @@ use dom::bindings::str::DOMString;
use dom::document::Document;
use dom::htmlelement::HTMLElement;
use dom::node::Node;
+use dom_struct::dom_struct;
use html5ever_atoms::LocalName;
#[dom_struct]
diff --git a/components/script/dom/htmloptgroupelement.rs b/components/script/dom/htmloptgroupelement.rs
index 583c32337db..13a68d7ff41 100644
--- a/components/script/dom/htmloptgroupelement.rs
+++ b/components/script/dom/htmloptgroupelement.rs
@@ -14,6 +14,7 @@ use dom::htmlelement::HTMLElement;
use dom::htmloptionelement::HTMLOptionElement;
use dom::node::Node;
use dom::virtualmethods::VirtualMethods;
+use dom_struct::dom_struct;
use html5ever_atoms::LocalName;
use style::element_state::*;
diff --git a/components/script/dom/htmloptionelement.rs b/components/script/dom/htmloptionelement.rs
index d1576d532e3..e54b9b563e4 100644
--- a/components/script/dom/htmloptionelement.rs
+++ b/components/script/dom/htmloptionelement.rs
@@ -22,6 +22,7 @@ use dom::htmlselectelement::HTMLSelectElement;
use dom::node::{Node, UnbindContext};
use dom::text::Text;
use dom::virtualmethods::VirtualMethods;
+use dom_struct::dom_struct;
use html5ever_atoms::LocalName;
use std::cell::Cell;
use style::element_state::*;
diff --git a/components/script/dom/htmloptionscollection.rs b/components/script/dom/htmloptionscollection.rs
index be7031ab8d0..42d6aebde35 100644
--- a/components/script/dom/htmloptionscollection.rs
+++ b/components/script/dom/htmloptionscollection.rs
@@ -20,6 +20,7 @@ use dom::htmloptionelement::HTMLOptionElement;
use dom::htmlselectelement::HTMLSelectElement;
use dom::node::{document_from_node, Node};
use dom::window::Window;
+use dom_struct::dom_struct;
#[dom_struct]
pub struct HTMLOptionsCollection {
diff --git a/components/script/dom/htmloutputelement.rs b/components/script/dom/htmloutputelement.rs
index 16af40f12cc..6f3154057ea 100644
--- a/components/script/dom/htmloutputelement.rs
+++ b/components/script/dom/htmloutputelement.rs
@@ -13,6 +13,7 @@ use dom::htmlformelement::{FormControl, HTMLFormElement};
use dom::node::{Node, window_from_node};
use dom::nodelist::NodeList;
use dom::validitystate::ValidityState;
+use dom_struct::dom_struct;
use html5ever_atoms::LocalName;
#[dom_struct]
diff --git a/components/script/dom/htmlparagraphelement.rs b/components/script/dom/htmlparagraphelement.rs
index f3976d8d202..1a7936352bc 100644
--- a/components/script/dom/htmlparagraphelement.rs
+++ b/components/script/dom/htmlparagraphelement.rs
@@ -8,6 +8,7 @@ use dom::bindings::str::DOMString;
use dom::document::Document;
use dom::htmlelement::HTMLElement;
use dom::node::Node;
+use dom_struct::dom_struct;
use html5ever_atoms::LocalName;
#[dom_struct]
diff --git a/components/script/dom/htmlparamelement.rs b/components/script/dom/htmlparamelement.rs
index d27a85bc8bd..103faa0a641 100644
--- a/components/script/dom/htmlparamelement.rs
+++ b/components/script/dom/htmlparamelement.rs
@@ -8,6 +8,7 @@ use dom::bindings::str::DOMString;
use dom::document::Document;
use dom::htmlelement::HTMLElement;
use dom::node::Node;
+use dom_struct::dom_struct;
use html5ever_atoms::LocalName;
#[dom_struct]
diff --git a/components/script/dom/htmlpreelement.rs b/components/script/dom/htmlpreelement.rs
index cfe9de10999..7d3575d1eae 100644
--- a/components/script/dom/htmlpreelement.rs
+++ b/components/script/dom/htmlpreelement.rs
@@ -8,6 +8,7 @@ use dom::bindings::str::DOMString;
use dom::document::Document;
use dom::htmlelement::HTMLElement;
use dom::node::Node;
+use dom_struct::dom_struct;
use html5ever_atoms::LocalName;
#[dom_struct]
diff --git a/components/script/dom/htmlprogresselement.rs b/components/script/dom/htmlprogresselement.rs
index 258527ac368..fe8eb2775e9 100644
--- a/components/script/dom/htmlprogresselement.rs
+++ b/components/script/dom/htmlprogresselement.rs
@@ -10,6 +10,7 @@ use dom::document::Document;
use dom::htmlelement::HTMLElement;
use dom::node::Node;
use dom::nodelist::NodeList;
+use dom_struct::dom_struct;
use html5ever_atoms::LocalName;
#[dom_struct]
diff --git a/components/script/dom/htmlquoteelement.rs b/components/script/dom/htmlquoteelement.rs
index 72e0329fe17..de3e473434b 100644
--- a/components/script/dom/htmlquoteelement.rs
+++ b/components/script/dom/htmlquoteelement.rs
@@ -8,6 +8,7 @@ use dom::bindings::str::DOMString;
use dom::document::Document;
use dom::htmlelement::HTMLElement;
use dom::node::Node;
+use dom_struct::dom_struct;
use html5ever_atoms::LocalName;
#[dom_struct]
diff --git a/components/script/dom/htmlscriptelement.rs b/components/script/dom/htmlscriptelement.rs
index 8703a45ea82..f13c0224b1a 100644
--- a/components/script/dom/htmlscriptelement.rs
+++ b/components/script/dom/htmlscriptelement.rs
@@ -23,6 +23,7 @@ use dom::htmlelement::HTMLElement;
use dom::node::{ChildrenMutation, CloneChildrenFlag, Node};
use dom::node::{document_from_node, window_from_node};
use dom::virtualmethods::VirtualMethods;
+use dom_struct::dom_struct;
use encoding::label::encoding_from_whatwg_label;
use encoding::types::{DecoderTrap, EncodingRef};
use html5ever_atoms::LocalName;
diff --git a/components/script/dom/htmlselectelement.rs b/components/script/dom/htmlselectelement.rs
index 84c3aa89927..1f4a8f029b0 100755
--- a/components/script/dom/htmlselectelement.rs
+++ b/components/script/dom/htmlselectelement.rs
@@ -30,6 +30,7 @@ use dom::nodelist::NodeList;
use dom::validation::Validatable;
use dom::validitystate::{ValidityState, ValidationFlags};
use dom::virtualmethods::VirtualMethods;
+use dom_struct::dom_struct;
use html5ever_atoms::LocalName;
use std::iter;
use style::attr::AttrValue;
diff --git a/components/script/dom/htmlsourceelement.rs b/components/script/dom/htmlsourceelement.rs
index a5c93ba2b8f..2b15fabd789 100644
--- a/components/script/dom/htmlsourceelement.rs
+++ b/components/script/dom/htmlsourceelement.rs
@@ -8,6 +8,7 @@ use dom::bindings::str::DOMString;
use dom::document::Document;
use dom::htmlelement::HTMLElement;
use dom::node::Node;
+use dom_struct::dom_struct;
use html5ever_atoms::LocalName;
#[dom_struct]
diff --git a/components/script/dom/htmlspanelement.rs b/components/script/dom/htmlspanelement.rs
index cc8127d651a..1437d1dbb08 100644
--- a/components/script/dom/htmlspanelement.rs
+++ b/components/script/dom/htmlspanelement.rs
@@ -8,6 +8,7 @@ use dom::bindings::str::DOMString;
use dom::document::Document;
use dom::htmlelement::HTMLElement;
use dom::node::Node;
+use dom_struct::dom_struct;
use html5ever_atoms::LocalName;
#[dom_struct]
diff --git a/components/script/dom/htmlstyleelement.rs b/components/script/dom/htmlstyleelement.rs
index 285c8af3087..f9c6412f854 100644
--- a/components/script/dom/htmlstyleelement.rs
+++ b/components/script/dom/htmlstyleelement.rs
@@ -18,6 +18,7 @@ use dom::htmlelement::HTMLElement;
use dom::node::{ChildrenMutation, Node, UnbindContext, document_from_node, window_from_node};
use dom::stylesheet::StyleSheet as DOMStyleSheet;
use dom::virtualmethods::VirtualMethods;
+use dom_struct::dom_struct;
use html5ever_atoms::LocalName;
use net_traits::ReferrerPolicy;
use script_layout_interface::message::Msg;
diff --git a/components/script/dom/htmltablecaptionelement.rs b/components/script/dom/htmltablecaptionelement.rs
index e6ced76b973..fd6c06643dd 100644
--- a/components/script/dom/htmltablecaptionelement.rs
+++ b/components/script/dom/htmltablecaptionelement.rs
@@ -8,6 +8,7 @@ use dom::bindings::str::DOMString;
use dom::document::Document;
use dom::htmlelement::HTMLElement;
use dom::node::Node;
+use dom_struct::dom_struct;
use html5ever_atoms::LocalName;
#[dom_struct]
diff --git a/components/script/dom/htmltablecellelement.rs b/components/script/dom/htmltablecellelement.rs
index 4a6ca5ca9b1..ef4bffba5d7 100644
--- a/components/script/dom/htmltablecellelement.rs
+++ b/components/script/dom/htmltablecellelement.rs
@@ -14,6 +14,7 @@ use dom::htmlelement::HTMLElement;
use dom::htmltablerowelement::HTMLTableRowElement;
use dom::node::Node;
use dom::virtualmethods::VirtualMethods;
+use dom_struct::dom_struct;
use html5ever_atoms::LocalName;
use style::attr::{AttrValue, LengthOrPercentageOrAuto};
diff --git a/components/script/dom/htmltablecolelement.rs b/components/script/dom/htmltablecolelement.rs
index cad7ecffbcd..00f618ed65f 100644
--- a/components/script/dom/htmltablecolelement.rs
+++ b/components/script/dom/htmltablecolelement.rs
@@ -8,6 +8,7 @@ use dom::bindings::str::DOMString;
use dom::document::Document;
use dom::htmlelement::HTMLElement;
use dom::node::Node;
+use dom_struct::dom_struct;
use html5ever_atoms::LocalName;
#[dom_struct]
diff --git a/components/script/dom/htmltabledatacellelement.rs b/components/script/dom/htmltabledatacellelement.rs
index da723fe10e1..77808c77d79 100644
--- a/components/script/dom/htmltabledatacellelement.rs
+++ b/components/script/dom/htmltabledatacellelement.rs
@@ -8,6 +8,7 @@ use dom::bindings::str::DOMString;
use dom::document::Document;
use dom::htmltablecellelement::HTMLTableCellElement;
use dom::node::Node;
+use dom_struct::dom_struct;
use html5ever_atoms::LocalName;
#[dom_struct]
diff --git a/components/script/dom/htmltableelement.rs b/components/script/dom/htmltableelement.rs
index 741b53c38ac..56e9876b753 100644
--- a/components/script/dom/htmltableelement.rs
+++ b/components/script/dom/htmltableelement.rs
@@ -22,6 +22,7 @@ use dom::htmltablerowelement::HTMLTableRowElement;
use dom::htmltablesectionelement::HTMLTableSectionElement;
use dom::node::{Node, document_from_node, window_from_node};
use dom::virtualmethods::VirtualMethods;
+use dom_struct::dom_struct;
use html5ever_atoms::LocalName;
use std::cell::Cell;
use style::attr::{AttrValue, LengthOrPercentageOrAuto, parse_unsigned_integer};
diff --git a/components/script/dom/htmltableheadercellelement.rs b/components/script/dom/htmltableheadercellelement.rs
index c24c68479c8..a471faee00f 100644
--- a/components/script/dom/htmltableheadercellelement.rs
+++ b/components/script/dom/htmltableheadercellelement.rs
@@ -8,6 +8,7 @@ use dom::bindings::str::DOMString;
use dom::document::Document;
use dom::htmltablecellelement::HTMLTableCellElement;
use dom::node::Node;
+use dom_struct::dom_struct;
use html5ever_atoms::LocalName;
#[dom_struct]
diff --git a/components/script/dom/htmltablerowelement.rs b/components/script/dom/htmltablerowelement.rs
index c6b04648dc2..be1b636beb4 100644
--- a/components/script/dom/htmltablerowelement.rs
+++ b/components/script/dom/htmltablerowelement.rs
@@ -21,6 +21,7 @@ use dom::htmltableheadercellelement::HTMLTableHeaderCellElement;
use dom::htmltablesectionelement::HTMLTableSectionElement;
use dom::node::{Node, window_from_node};
use dom::virtualmethods::VirtualMethods;
+use dom_struct::dom_struct;
use html5ever_atoms::LocalName;
use style::attr::AttrValue;
diff --git a/components/script/dom/htmltablesectionelement.rs b/components/script/dom/htmltablesectionelement.rs
index 2f5fcaca566..cf9be4b81b4 100644
--- a/components/script/dom/htmltablesectionelement.rs
+++ b/components/script/dom/htmltablesectionelement.rs
@@ -16,6 +16,7 @@ use dom::htmlelement::HTMLElement;
use dom::htmltablerowelement::HTMLTableRowElement;
use dom::node::{Node, window_from_node};
use dom::virtualmethods::VirtualMethods;
+use dom_struct::dom_struct;
use html5ever_atoms::LocalName;
use style::attr::AttrValue;
diff --git a/components/script/dom/htmltemplateelement.rs b/components/script/dom/htmltemplateelement.rs
index 1c9b2c0aacd..8e54ae63523 100644
--- a/components/script/dom/htmltemplateelement.rs
+++ b/components/script/dom/htmltemplateelement.rs
@@ -14,6 +14,7 @@ use dom::documentfragment::DocumentFragment;
use dom::htmlelement::HTMLElement;
use dom::node::{CloneChildrenFlag, Node, document_from_node};
use dom::virtualmethods::VirtualMethods;
+use dom_struct::dom_struct;
use html5ever_atoms::LocalName;
#[dom_struct]
diff --git a/components/script/dom/htmltextareaelement.rs b/components/script/dom/htmltextareaelement.rs
index c6fd4d6b170..e7db7565adf 100755
--- a/components/script/dom/htmltextareaelement.rs
+++ b/components/script/dom/htmltextareaelement.rs
@@ -25,6 +25,7 @@ use dom::node::{document_from_node, window_from_node};
use dom::nodelist::NodeList;
use dom::validation::Validatable;
use dom::virtualmethods::VirtualMethods;
+use dom_struct::dom_struct;
use html5ever_atoms::LocalName;
use ipc_channel::ipc::IpcSender;
use script_traits::ScriptMsg as ConstellationMsg;
diff --git a/components/script/dom/htmltimeelement.rs b/components/script/dom/htmltimeelement.rs
index c5286dd685f..2c559a30cc5 100644
--- a/components/script/dom/htmltimeelement.rs
+++ b/components/script/dom/htmltimeelement.rs
@@ -9,6 +9,7 @@ use dom::bindings::str::DOMString;
use dom::document::Document;
use dom::htmlelement::HTMLElement;
use dom::node::Node;
+use dom_struct::dom_struct;
use html5ever_atoms::LocalName;
#[dom_struct]
diff --git a/components/script/dom/htmltitleelement.rs b/components/script/dom/htmltitleelement.rs
index 6dde6a6203b..43208399fb6 100644
--- a/components/script/dom/htmltitleelement.rs
+++ b/components/script/dom/htmltitleelement.rs
@@ -12,6 +12,7 @@ use dom::document::Document;
use dom::htmlelement::HTMLElement;
use dom::node::{ChildrenMutation, Node};
use dom::virtualmethods::VirtualMethods;
+use dom_struct::dom_struct;
use html5ever_atoms::LocalName;
#[dom_struct]
diff --git a/components/script/dom/htmltrackelement.rs b/components/script/dom/htmltrackelement.rs
index 4c4263aa949..97811ee5a10 100644
--- a/components/script/dom/htmltrackelement.rs
+++ b/components/script/dom/htmltrackelement.rs
@@ -8,6 +8,7 @@ use dom::bindings::str::DOMString;
use dom::document::Document;
use dom::htmlelement::HTMLElement;
use dom::node::Node;
+use dom_struct::dom_struct;
use html5ever_atoms::LocalName;
#[dom_struct]
diff --git a/components/script/dom/htmlulistelement.rs b/components/script/dom/htmlulistelement.rs
index 211b77bb8b6..4153709e108 100644
--- a/components/script/dom/htmlulistelement.rs
+++ b/components/script/dom/htmlulistelement.rs
@@ -8,6 +8,7 @@ use dom::bindings::str::DOMString;
use dom::document::Document;
use dom::htmlelement::HTMLElement;
use dom::node::Node;
+use dom_struct::dom_struct;
use html5ever_atoms::LocalName;
#[dom_struct]
diff --git a/components/script/dom/htmlunknownelement.rs b/components/script/dom/htmlunknownelement.rs
index 22930a32d78..d54025de852 100644
--- a/components/script/dom/htmlunknownelement.rs
+++ b/components/script/dom/htmlunknownelement.rs
@@ -8,6 +8,7 @@ use dom::bindings::str::DOMString;
use dom::document::Document;
use dom::htmlelement::HTMLElement;
use dom::node::Node;
+use dom_struct::dom_struct;
use html5ever_atoms::LocalName;
#[dom_struct]
diff --git a/components/script/dom/htmlvideoelement.rs b/components/script/dom/htmlvideoelement.rs
index 940888c3466..1a0d93dacf8 100644
--- a/components/script/dom/htmlvideoelement.rs
+++ b/components/script/dom/htmlvideoelement.rs
@@ -8,6 +8,7 @@ use dom::bindings::str::DOMString;
use dom::document::Document;
use dom::htmlmediaelement::HTMLMediaElement;
use dom::node::Node;
+use dom_struct::dom_struct;
use html5ever_atoms::LocalName;
#[dom_struct]
diff --git a/components/script/dom/imagedata.rs b/components/script/dom/imagedata.rs
index 4de2e9ced92..33863cde2b6 100644
--- a/components/script/dom/imagedata.rs
+++ b/components/script/dom/imagedata.rs
@@ -8,6 +8,7 @@ use dom::bindings::codegen::Bindings::ImageDataBinding::ImageDataMethods;
use dom::bindings::js::Root;
use dom::bindings::reflector::{Reflector, reflect_dom_object};
use dom::globalscope::GlobalScope;
+use dom_struct::dom_struct;
use euclid::size::Size2D;
use js::jsapi::{Heap, JSContext, JSObject};
use js::rust::Runtime;
diff --git a/components/script/dom/keyboardevent.rs b/components/script/dom/keyboardevent.rs
index 38a25d4dc1e..33b044085a2 100644
--- a/components/script/dom/keyboardevent.rs
+++ b/components/script/dom/keyboardevent.rs
@@ -14,6 +14,7 @@ use dom::bindings::str::DOMString;
use dom::event::Event;
use dom::uievent::UIEvent;
use dom::window::Window;
+use dom_struct::dom_struct;
use msg::constellation_msg;
use msg::constellation_msg::{Key, KeyModifiers};
use std::borrow::Cow;
diff --git a/components/script/dom/location.rs b/components/script/dom/location.rs
index cc2c064f4b8..d06ec02d4a2 100644
--- a/components/script/dom/location.rs
+++ b/components/script/dom/location.rs
@@ -10,6 +10,7 @@ use dom::bindings::reflector::{Reflector, reflect_dom_object};
use dom::bindings::str::{DOMString, USVString};
use dom::urlhelper::UrlHelper;
use dom::window::Window;
+use dom_struct::dom_struct;
use servo_url::ServoUrl;
#[dom_struct]
diff --git a/components/script/dom/mediaerror.rs b/components/script/dom/mediaerror.rs
index b7b7a800989..ff158333473 100644
--- a/components/script/dom/mediaerror.rs
+++ b/components/script/dom/mediaerror.rs
@@ -6,6 +6,7 @@ use dom::bindings::codegen::Bindings::MediaErrorBinding::{self, MediaErrorMethod
use dom::bindings::js::Root;
use dom::bindings::reflector::{Reflector, reflect_dom_object};
use dom::window::Window;
+use dom_struct::dom_struct;
#[dom_struct]
pub struct MediaError {
diff --git a/components/script/dom/medialist.rs b/components/script/dom/medialist.rs
index b6e5fd9c1ee..806946f6356 100644
--- a/components/script/dom/medialist.rs
+++ b/components/script/dom/medialist.rs
@@ -10,6 +10,7 @@ use dom::bindings::js::Root;
use dom::bindings::reflector::{Reflector, reflect_dom_object};
use dom::bindings::str::DOMString;
use dom::window::Window;
+use dom_struct::dom_struct;
use parking_lot::RwLock;
use std::sync::Arc;
use style::media_queries::{MediaQuery, parse_media_query_list};
diff --git a/components/script/dom/mediaquerylist.rs b/components/script/dom/mediaquerylist.rs
index 486f9f64fd3..dafc7602794 100644
--- a/components/script/dom/mediaquerylist.rs
+++ b/components/script/dom/mediaquerylist.rs
@@ -18,6 +18,7 @@ use dom::document::Document;
use dom::event::Event;
use dom::eventtarget::EventTarget;
use dom::mediaquerylistevent::MediaQueryListEvent;
+use dom_struct::dom_struct;
use js::jsapi::JSTracer;
use std::cell::Cell;
use std::rc::Rc;
diff --git a/components/script/dom/mediaquerylistevent.rs b/components/script/dom/mediaquerylistevent.rs
index 8edd2fa3ab2..18be8b1d1b5 100644
--- a/components/script/dom/mediaquerylistevent.rs
+++ b/components/script/dom/mediaquerylistevent.rs
@@ -14,6 +14,7 @@ use dom::bindings::str::DOMString;
use dom::event::Event;
use dom::globalscope::GlobalScope;
use dom::window::Window;
+use dom_struct::dom_struct;
use servo_atoms::Atom;
use std::cell::Cell;
diff --git a/components/script/dom/messageevent.rs b/components/script/dom/messageevent.rs
index 3df960d0882..0bbeeb05cd7 100644
--- a/components/script/dom/messageevent.rs
+++ b/components/script/dom/messageevent.rs
@@ -14,6 +14,7 @@ use dom::bindings::trace::RootedTraceableBox;
use dom::event::Event;
use dom::eventtarget::EventTarget;
use dom::globalscope::GlobalScope;
+use dom_struct::dom_struct;
use js::jsapi::{HandleValue, Heap, JSContext};
use js::jsval::JSVal;
use servo_atoms::Atom;
diff --git a/components/script/dom/mimetype.rs b/components/script/dom/mimetype.rs
index 94262de5c26..daa49908408 100644
--- a/components/script/dom/mimetype.rs
+++ b/components/script/dom/mimetype.rs
@@ -7,6 +7,7 @@ use dom::bindings::js::Root;
use dom::bindings::reflector::Reflector;
use dom::bindings::str::DOMString;
use dom::plugin::Plugin;
+use dom_struct::dom_struct;
#[dom_struct]
pub struct MimeType {
diff --git a/components/script/dom/mimetypearray.rs b/components/script/dom/mimetypearray.rs
index e0dd8090f8f..4bc33e9b237 100644
--- a/components/script/dom/mimetypearray.rs
+++ b/components/script/dom/mimetypearray.rs
@@ -9,6 +9,7 @@ use dom::bindings::reflector::{Reflector, reflect_dom_object};
use dom::bindings::str::DOMString;
use dom::globalscope::GlobalScope;
use dom::mimetype::MimeType;
+use dom_struct::dom_struct;
#[dom_struct]
pub struct MimeTypeArray {
diff --git a/components/script/dom/mouseevent.rs b/components/script/dom/mouseevent.rs
index 3b0e3fb1710..f19c37df868 100644
--- a/components/script/dom/mouseevent.rs
+++ b/components/script/dom/mouseevent.rs
@@ -14,6 +14,7 @@ use dom::event::{Event, EventBubbles, EventCancelable};
use dom::eventtarget::EventTarget;
use dom::uievent::UIEvent;
use dom::window::Window;
+use dom_struct::dom_struct;
use servo_config::prefs::PREFS;
use std::cell::Cell;
use std::default::Default;
diff --git a/components/script/dom/namednodemap.rs b/components/script/dom/namednodemap.rs
index 148822cabb2..273b87c8d00 100644
--- a/components/script/dom/namednodemap.rs
+++ b/components/script/dom/namednodemap.rs
@@ -13,6 +13,7 @@ use dom::bindings::str::DOMString;
use dom::bindings::xmlname::namespace_from_domstring;
use dom::element::Element;
use dom::window::Window;
+use dom_struct::dom_struct;
use html5ever_atoms::LocalName;
use std::ascii::AsciiExt;
diff --git a/components/script/dom/navigator.rs b/components/script/dom/navigator.rs
index 27a1465e9d2..118f53ac49b 100644
--- a/components/script/dom/navigator.rs
+++ b/components/script/dom/navigator.rs
@@ -15,6 +15,7 @@ use dom::pluginarray::PluginArray;
use dom::serviceworkercontainer::ServiceWorkerContainer;
use dom::vr::VR;
use dom::window::Window;
+use dom_struct::dom_struct;
use script_traits::WebVREventMsg;
#[dom_struct]
diff --git a/components/script/dom/node.rs b/components/script/dom/node.rs
index 96d3fceaff5..fce1ce4826d 100644
--- a/components/script/dom/node.rs
+++ b/components/script/dom/node.rs
@@ -53,6 +53,7 @@ use dom::svgsvgelement::{SVGSVGElement, LayoutSVGSVGElementHelpers};
use dom::text::Text;
use dom::virtualmethods::{VirtualMethods, vtable_for};
use dom::window::Window;
+use dom_struct::dom_struct;
use euclid::point::Point2D;
use euclid::rect::Rect;
use euclid::size::Size2D;
diff --git a/components/script/dom/nodeiterator.rs b/components/script/dom/nodeiterator.rs
index 920d94d635c..91b590a3647 100644
--- a/components/script/dom/nodeiterator.rs
+++ b/components/script/dom/nodeiterator.rs
@@ -13,6 +13,7 @@ use dom::bindings::js::{JS, MutJS, Root};
use dom::bindings::reflector::{Reflector, reflect_dom_object};
use dom::document::Document;
use dom::node::Node;
+use dom_struct::dom_struct;
use std::cell::Cell;
use std::rc::Rc;
diff --git a/components/script/dom/nodelist.rs b/components/script/dom/nodelist.rs
index 21e05fc7dcc..5c0983ccaa3 100644
--- a/components/script/dom/nodelist.rs
+++ b/components/script/dom/nodelist.rs
@@ -9,6 +9,7 @@ use dom::bindings::js::{JS, MutNullableJS, Root, RootedReference};
use dom::bindings::reflector::{Reflector, reflect_dom_object};
use dom::node::{ChildrenMutation, Node};
use dom::window::Window;
+use dom_struct::dom_struct;
use std::cell::Cell;
#[derive(JSTraceable, HeapSizeOf)]
diff --git a/components/script/dom/pagetransitionevent.rs b/components/script/dom/pagetransitionevent.rs
index e76a6444d4c..3757bece84a 100644
--- a/components/script/dom/pagetransitionevent.rs
+++ b/components/script/dom/pagetransitionevent.rs
@@ -12,6 +12,7 @@ use dom::bindings::reflector::reflect_dom_object;
use dom::bindings::str::DOMString;
use dom::event::Event;
use dom::window::Window;
+use dom_struct::dom_struct;
use servo_atoms::Atom;
use std::cell::Cell;
diff --git a/components/script/dom/performance.rs b/components/script/dom/performance.rs
index 3852a49b28c..7ce0cd7d1eb 100644
--- a/components/script/dom/performance.rs
+++ b/components/script/dom/performance.rs
@@ -9,6 +9,7 @@ use dom::bindings::num::Finite;
use dom::bindings::reflector::{Reflector, reflect_dom_object};
use dom::performancetiming::PerformanceTiming;
use dom::window::Window;
+use dom_struct::dom_struct;
use time;
pub type DOMHighResTimeStamp = Finite<f64>;
diff --git a/components/script/dom/performancetiming.rs b/components/script/dom/performancetiming.rs
index 02cb9c0b212..37001f5d15f 100644
--- a/components/script/dom/performancetiming.rs
+++ b/components/script/dom/performancetiming.rs
@@ -9,6 +9,7 @@ use dom::bindings::js::{JS, Root};
use dom::bindings::reflector::{Reflector, reflect_dom_object};
use dom::document::Document;
use dom::window::Window;
+use dom_struct::dom_struct;
#[dom_struct]
pub struct PerformanceTiming {
diff --git a/components/script/dom/permissions.rs b/components/script/dom/permissions.rs
index 87d333f5bac..4133eec4aae 100644
--- a/components/script/dom/permissions.rs
+++ b/components/script/dom/permissions.rs
@@ -13,6 +13,7 @@ use dom::bluetoothpermissionresult::BluetoothPermissionResult;
use dom::globalscope::GlobalScope;
use dom::permissionstatus::PermissionStatus;
use dom::promise::Promise;
+use dom_struct::dom_struct;
use js::conversions::ConversionResult;
use js::jsapi::{JSContext, JSObject};
use js::jsval::{ObjectValue, UndefinedValue};
diff --git a/components/script/dom/permissionstatus.rs b/components/script/dom/permissionstatus.rs
index 339d8228eca..27d353bf0ed 100644
--- a/components/script/dom/permissionstatus.rs
+++ b/components/script/dom/permissionstatus.rs
@@ -10,6 +10,7 @@ use dom::bindings::js::Root;
use dom::bindings::reflector::reflect_dom_object;
use dom::eventtarget::EventTarget;
use dom::globalscope::GlobalScope;
+use dom_struct::dom_struct;
use std::cell::Cell;
use std::fmt::{self, Display, Formatter};
diff --git a/components/script/dom/plugin.rs b/components/script/dom/plugin.rs
index 222e9a2840a..8e3af814ec9 100644
--- a/components/script/dom/plugin.rs
+++ b/components/script/dom/plugin.rs
@@ -7,6 +7,7 @@ use dom::bindings::js::Root;
use dom::bindings::reflector::Reflector;
use dom::bindings::str::DOMString;
use dom::mimetype::MimeType;
+use dom_struct::dom_struct;
#[dom_struct]
pub struct Plugin {
diff --git a/components/script/dom/pluginarray.rs b/components/script/dom/pluginarray.rs
index fde760d793c..b359c2b8368 100644
--- a/components/script/dom/pluginarray.rs
+++ b/components/script/dom/pluginarray.rs
@@ -9,6 +9,7 @@ use dom::bindings::reflector::{Reflector, reflect_dom_object};
use dom::bindings::str::DOMString;
use dom::globalscope::GlobalScope;
use dom::plugin::Plugin;
+use dom_struct::dom_struct;
#[dom_struct]
pub struct PluginArray {
diff --git a/components/script/dom/popstateevent.rs b/components/script/dom/popstateevent.rs
index 1282d847d7c..a1b0ffc7f00 100644
--- a/components/script/dom/popstateevent.rs
+++ b/components/script/dom/popstateevent.rs
@@ -13,6 +13,7 @@ use dom::bindings::str::DOMString;
use dom::bindings::trace::RootedTraceableBox;
use dom::event::Event;
use dom::window::Window;
+use dom_struct::dom_struct;
use js::jsapi::{HandleValue, JSContext};
use js::jsval::JSVal;
use servo_atoms::Atom;
diff --git a/components/script/dom/processinginstruction.rs b/components/script/dom/processinginstruction.rs
index 68efbd67cd2..31e6737a977 100644
--- a/components/script/dom/processinginstruction.rs
+++ b/components/script/dom/processinginstruction.rs
@@ -9,6 +9,7 @@ use dom::bindings::str::DOMString;
use dom::characterdata::CharacterData;
use dom::document::Document;
use dom::node::Node;
+use dom_struct::dom_struct;
/// An HTML processing instruction node.
#[dom_struct]
diff --git a/components/script/dom/progressevent.rs b/components/script/dom/progressevent.rs
index b8d3d5ba9f7..e5ca1af2ae1 100644
--- a/components/script/dom/progressevent.rs
+++ b/components/script/dom/progressevent.rs
@@ -12,6 +12,7 @@ use dom::bindings::reflector::reflect_dom_object;
use dom::bindings::str::DOMString;
use dom::event::{Event, EventBubbles, EventCancelable};
use dom::globalscope::GlobalScope;
+use dom_struct::dom_struct;
use servo_atoms::Atom;
#[dom_struct]
diff --git a/components/script/dom/promise.rs b/components/script/dom/promise.rs
index a727e5049f5..34f2c2bc704 100644
--- a/components/script/dom/promise.rs
+++ b/components/script/dom/promise.rs
@@ -19,6 +19,7 @@ use dom::bindings::js::MutHeapJSVal;
use dom::bindings::reflector::{DomObject, MutDomObject, Reflector};
use dom::globalscope::GlobalScope;
use dom::promisenativehandler::PromiseNativeHandler;
+use dom_struct::dom_struct;
use js::conversions::ToJSValConvertible;
use js::jsapi::{CallOriginalPromiseResolve, CallOriginalPromiseReject, CallOriginalPromiseThen};
use js::jsapi::{JSAutoCompartment, CallArgs, JS_GetFunctionObject, JS_NewFunction};
diff --git a/components/script/dom/promisenativehandler.rs b/components/script/dom/promisenativehandler.rs
index b1c0ff3504c..59fe1d7425b 100644
--- a/components/script/dom/promisenativehandler.rs
+++ b/components/script/dom/promisenativehandler.rs
@@ -7,6 +7,7 @@ use dom::bindings::js::Root;
use dom::bindings::reflector::{Reflector, reflect_dom_object};
use dom::bindings::trace::JSTraceable;
use dom::globalscope::GlobalScope;
+use dom_struct::dom_struct;
use heapsize::HeapSizeOf;
use js::jsapi::{JSContext, HandleValue};
diff --git a/components/script/dom/radionodelist.rs b/components/script/dom/radionodelist.rs
index b8078aa6670..07f479c6ed4 100644
--- a/components/script/dom/radionodelist.rs
+++ b/components/script/dom/radionodelist.rs
@@ -14,6 +14,7 @@ use dom::htmlinputelement::HTMLInputElement;
use dom::node::Node;
use dom::nodelist::{NodeList, NodeListType};
use dom::window::Window;
+use dom_struct::dom_struct;
#[dom_struct]
pub struct RadioNodeList {
diff --git a/components/script/dom/range.rs b/components/script/dom/range.rs
index 65b4d1b8487..8a6de0bc4e6 100644
--- a/components/script/dom/range.rs
+++ b/components/script/dom/range.rs
@@ -26,6 +26,7 @@ use dom::htmlscriptelement::HTMLScriptElement;
use dom::node::{Node, UnbindContext};
use dom::text::Text;
use dom::window::Window;
+use dom_struct::dom_struct;
use heapsize::HeapSizeOf;
use js::jsapi::JSTracer;
use std::cell::{Cell, UnsafeCell};
diff --git a/components/script/dom/request.rs b/components/script/dom/request.rs
index a81d9f767b6..fdd230fb095 100644
--- a/components/script/dom/request.rs
+++ b/components/script/dom/request.rs
@@ -25,6 +25,7 @@ use dom::globalscope::GlobalScope;
use dom::headers::{Guard, Headers};
use dom::promise::Promise;
use dom::xmlhttprequest::Extractable;
+use dom_struct::dom_struct;
use hyper::method::Method as HttpMethod;
use net_traits::ReferrerPolicy as MsgReferrerPolicy;
use net_traits::request::{Origin, Window};
diff --git a/components/script/dom/response.rs b/components/script/dom/response.rs
index 1d9d62c079a..089a8acca6c 100644
--- a/components/script/dom/response.rs
+++ b/components/script/dom/response.rs
@@ -18,6 +18,7 @@ use dom::headers::{Headers, Guard};
use dom::headers::{is_vchar, is_obs_text};
use dom::promise::Promise;
use dom::xmlhttprequest::Extractable;
+use dom_struct::dom_struct;
use hyper::header::Headers as HyperHeaders;
use hyper::status::StatusCode;
use hyper_serde::Serde;
diff --git a/components/script/dom/screen.rs b/components/script/dom/screen.rs
index 2c9fe185de1..80e5bf8d5c6 100644
--- a/components/script/dom/screen.rs
+++ b/components/script/dom/screen.rs
@@ -7,6 +7,7 @@ use dom::bindings::codegen::Bindings::ScreenBinding::ScreenMethods;
use dom::bindings::js::Root;
use dom::bindings::reflector::{Reflector, reflect_dom_object};
use dom::window::Window;
+use dom_struct::dom_struct;
#[dom_struct]
pub struct Screen {
diff --git a/components/script/dom/serviceworker.rs b/components/script/dom/serviceworker.rs
index 91de2b1c107..b59c1da1afc 100644
--- a/components/script/dom/serviceworker.rs
+++ b/components/script/dom/serviceworker.rs
@@ -15,6 +15,7 @@ use dom::bindings::str::USVString;
use dom::bindings::structuredclone::StructuredCloneData;
use dom::eventtarget::EventTarget;
use dom::globalscope::GlobalScope;
+use dom_struct::dom_struct;
use js::jsapi::{HandleValue, JSContext};
use script_thread::Runnable;
use script_traits::{ScriptMsg, DOMMessage};
diff --git a/components/script/dom/serviceworkercontainer.rs b/components/script/dom/serviceworkercontainer.rs
index 6757fc0179d..ba2e327409f 100644
--- a/components/script/dom/serviceworkercontainer.rs
+++ b/components/script/dom/serviceworkercontainer.rs
@@ -13,6 +13,7 @@ use dom::eventtarget::EventTarget;
use dom::globalscope::GlobalScope;
use dom::promise::Promise;
use dom::serviceworker::ServiceWorker;
+use dom_struct::dom_struct;
use script_thread::ScriptThread;
use serviceworkerjob::{Job, JobType};
use std::ascii::AsciiExt;
diff --git a/components/script/dom/serviceworkerglobalscope.rs b/components/script/dom/serviceworkerglobalscope.rs
index 553b016f0f8..953a6ae8328 100644
--- a/components/script/dom/serviceworkerglobalscope.rs
+++ b/components/script/dom/serviceworkerglobalscope.rs
@@ -18,6 +18,7 @@ use dom::extendableevent::ExtendableEvent;
use dom::extendablemessageevent::ExtendableMessageEvent;
use dom::globalscope::GlobalScope;
use dom::workerglobalscope::WorkerGlobalScope;
+use dom_struct::dom_struct;
use ipc_channel::ipc::{self, IpcSender, IpcReceiver};
use ipc_channel::router::ROUTER;
use js::jsapi::{JS_SetInterruptCallback, JSAutoCompartment, JSContext};
diff --git a/components/script/dom/serviceworkerregistration.rs b/components/script/dom/serviceworkerregistration.rs
index 869c8855676..b296b62b6c5 100644
--- a/components/script/dom/serviceworkerregistration.rs
+++ b/components/script/dom/serviceworkerregistration.rs
@@ -11,6 +11,7 @@ use dom::eventtarget::EventTarget;
use dom::globalscope::GlobalScope;
use dom::serviceworker::ServiceWorker;
use dom::workerglobalscope::prepare_workerscope_init;
+use dom_struct::dom_struct;
use script_traits::{WorkerScriptLoadOrigin, ScopeThings};
use servo_url::ServoUrl;
use std::cell::Cell;
diff --git a/components/script/dom/servoparser/mod.rs b/components/script/dom/servoparser/mod.rs
index 149957576a2..531f13274e6 100644
--- a/components/script/dom/servoparser/mod.rs
+++ b/components/script/dom/servoparser/mod.rs
@@ -22,6 +22,7 @@ use dom::htmlimageelement::HTMLImageElement;
use dom::htmlscriptelement::{HTMLScriptElement, ScriptResult};
use dom::node::{Node, NodeSiblingIterator};
use dom::text::Text;
+use dom_struct::dom_struct;
use encoding::all::UTF_8;
use encoding::types::{DecoderTrap, Encoding};
use html5ever::tokenizer::buffer_queue::BufferQueue;
diff --git a/components/script/dom/storage.rs b/components/script/dom/storage.rs
index 605a862951b..ea4662dda20 100644
--- a/components/script/dom/storage.rs
+++ b/components/script/dom/storage.rs
@@ -13,6 +13,7 @@ use dom::bindings::str::DOMString;
use dom::event::{Event, EventBubbles, EventCancelable};
use dom::storageevent::StorageEvent;
use dom::window::Window;
+use dom_struct::dom_struct;
use ipc_channel::ipc::{self, IpcSender};
use net_traits::IpcSend;
use net_traits::storage_thread::{StorageThreadMsg, StorageType};
diff --git a/components/script/dom/storageevent.rs b/components/script/dom/storageevent.rs
index ff2d6bb8aaf..b0cab81eb7b 100644
--- a/components/script/dom/storageevent.rs
+++ b/components/script/dom/storageevent.rs
@@ -13,6 +13,7 @@ use dom::bindings::str::DOMString;
use dom::event::{Event, EventBubbles, EventCancelable};
use dom::storage::Storage;
use dom::window::Window;
+use dom_struct::dom_struct;
use servo_atoms::Atom;
#[dom_struct]
diff --git a/components/script/dom/stylesheet.rs b/components/script/dom/stylesheet.rs
index 91a6b186f27..bf4b1c562e3 100644
--- a/components/script/dom/stylesheet.rs
+++ b/components/script/dom/stylesheet.rs
@@ -10,6 +10,7 @@ use dom::bindings::reflector::{Reflector, reflect_dom_object};
use dom::bindings::str::DOMString;
use dom::cssstylesheet::CSSStyleSheet;
use dom::window::Window;
+use dom_struct::dom_struct;
#[dom_struct]
pub struct StyleSheet {
diff --git a/components/script/dom/stylesheetlist.rs b/components/script/dom/stylesheetlist.rs
index b028e7f2b73..25d95ae3986 100644
--- a/components/script/dom/stylesheetlist.rs
+++ b/components/script/dom/stylesheetlist.rs
@@ -9,6 +9,7 @@ use dom::bindings::reflector::{Reflector, reflect_dom_object};
use dom::document::Document;
use dom::stylesheet::StyleSheet;
use dom::window::Window;
+use dom_struct::dom_struct;
#[dom_struct]
pub struct StyleSheetList {
diff --git a/components/script/dom/svgelement.rs b/components/script/dom/svgelement.rs
index 3a18f965ecc..1a0654ed312 100644
--- a/components/script/dom/svgelement.rs
+++ b/components/script/dom/svgelement.rs
@@ -7,6 +7,7 @@ use dom::bindings::str::DOMString;
use dom::document::Document;
use dom::element::Element;
use dom::virtualmethods::VirtualMethods;
+use dom_struct::dom_struct;
use html5ever_atoms::LocalName;
use style::element_state::ElementState;
diff --git a/components/script/dom/svggraphicselement.rs b/components/script/dom/svggraphicselement.rs
index b8e8aced371..f41768f9815 100644
--- a/components/script/dom/svggraphicselement.rs
+++ b/components/script/dom/svggraphicselement.rs
@@ -7,6 +7,7 @@ use dom::bindings::str::DOMString;
use dom::document::Document;
use dom::svgelement::SVGElement;
use dom::virtualmethods::VirtualMethods;
+use dom_struct::dom_struct;
use html5ever_atoms::LocalName;
use style::element_state::ElementState;
diff --git a/components/script/dom/svgsvgelement.rs b/components/script/dom/svgsvgelement.rs
index e872fc25c8e..7c7d85f17b0 100644
--- a/components/script/dom/svgsvgelement.rs
+++ b/components/script/dom/svgsvgelement.rs
@@ -12,6 +12,7 @@ use dom::element::{AttributeMutation, Element, RawLayoutElementHelpers};
use dom::node::Node;
use dom::svggraphicselement::SVGGraphicsElement;
use dom::virtualmethods::VirtualMethods;
+use dom_struct::dom_struct;
use html5ever_atoms::LocalName;
use script_layout_interface::SVGSVGData;
use style::attr::AttrValue;
diff --git a/components/script/dom/testbinding.rs b/components/script/dom/testbinding.rs
index d9defc53770..e03cc0bd3de 100644
--- a/components/script/dom/testbinding.rs
+++ b/components/script/dom/testbinding.rs
@@ -34,6 +34,7 @@ use dom::globalscope::GlobalScope;
use dom::promise::Promise;
use dom::promisenativehandler::{PromiseNativeHandler, Callback};
use dom::url::URL;
+use dom_struct::dom_struct;
use js::jsapi::{HandleObject, HandleValue, Heap, JSContext, JSObject, JSAutoCompartment};
use js::jsapi::{JS_NewPlainObject, JS_NewUint8ClampedArray};
use js::jsval::{JSVal, NullValue};
diff --git a/components/script/dom/testbindingiterable.rs b/components/script/dom/testbindingiterable.rs
index 10045705192..d89d7345f91 100644
--- a/components/script/dom/testbindingiterable.rs
+++ b/components/script/dom/testbindingiterable.rs
@@ -11,6 +11,7 @@ use dom::bindings::js::Root;
use dom::bindings::reflector::{Reflector, reflect_dom_object};
use dom::bindings::str::DOMString;
use dom::globalscope::GlobalScope;
+use dom_struct::dom_struct;
#[dom_struct]
pub struct TestBindingIterable {
diff --git a/components/script/dom/testbindingpairiterable.rs b/components/script/dom/testbindingpairiterable.rs
index f536459c1e9..c31d0e34fb5 100644
--- a/components/script/dom/testbindingpairiterable.rs
+++ b/components/script/dom/testbindingpairiterable.rs
@@ -13,6 +13,7 @@ use dom::bindings::js::Root;
use dom::bindings::reflector::{Reflector, reflect_dom_object};
use dom::bindings::str::DOMString;
use dom::globalscope::GlobalScope;
+use dom_struct::dom_struct;
#[dom_struct]
pub struct TestBindingPairIterable {
diff --git a/components/script/dom/testbindingproxy.rs b/components/script/dom/testbindingproxy.rs
index 45e66bc5919..c6ff2bca3af 100644
--- a/components/script/dom/testbindingproxy.rs
+++ b/components/script/dom/testbindingproxy.rs
@@ -7,7 +7,7 @@
use dom::bindings::codegen::Bindings::TestBindingProxyBinding::TestBindingProxyMethods;
use dom::bindings::reflector::Reflector;
use dom::bindings::str::DOMString;
-
+use dom_struct::dom_struct;
#[dom_struct]
pub struct TestBindingProxy {
diff --git a/components/script/dom/testrunner.rs b/components/script/dom/testrunner.rs
index 0e3b9e11a5f..1783fce7223 100644
--- a/components/script/dom/testrunner.rs
+++ b/components/script/dom/testrunner.rs
@@ -10,6 +10,7 @@ use dom::bindings::js::Root;
use dom::bindings::reflector::{DomObject, Reflector, reflect_dom_object};
use dom::bindings::str::DOMString;
use dom::globalscope::GlobalScope;
+use dom_struct::dom_struct;
use ipc_channel::ipc::{self, IpcSender};
// https://webbluetoothcg.github.io/web-bluetooth/tests#test-runner
diff --git a/components/script/dom/text.rs b/components/script/dom/text.rs
index cfa670d9acb..dd2a85ec63f 100644
--- a/components/script/dom/text.rs
+++ b/components/script/dom/text.rs
@@ -16,6 +16,7 @@ use dom::characterdata::CharacterData;
use dom::document::Document;
use dom::node::Node;
use dom::window::Window;
+use dom_struct::dom_struct;
/// An HTML text node.
#[dom_struct]
diff --git a/components/script/dom/textdecoder.rs b/components/script/dom/textdecoder.rs
index 1c3ba6cf082..e1b1edc1048 100644
--- a/components/script/dom/textdecoder.rs
+++ b/components/script/dom/textdecoder.rs
@@ -9,6 +9,7 @@ use dom::bindings::js::Root;
use dom::bindings::reflector::{Reflector, reflect_dom_object};
use dom::bindings::str::{DOMString, USVString};
use dom::globalscope::GlobalScope;
+use dom_struct::dom_struct;
use encoding::label::encoding_from_whatwg_label;
use encoding::types::{DecoderTrap, EncodingRef};
use js::jsapi::{JSContext, JSObject};
diff --git a/components/script/dom/textencoder.rs b/components/script/dom/textencoder.rs
index 03e6f4882e6..765c95ade0b 100644
--- a/components/script/dom/textencoder.rs
+++ b/components/script/dom/textencoder.rs
@@ -10,6 +10,7 @@ use dom::bindings::js::Root;
use dom::bindings::reflector::{Reflector, reflect_dom_object};
use dom::bindings::str::{DOMString, USVString};
use dom::globalscope::GlobalScope;
+use dom_struct::dom_struct;
use encoding::EncoderTrap;
use encoding::Encoding;
use encoding::all::UTF_8;
diff --git a/components/script/dom/touch.rs b/components/script/dom/touch.rs
index 9b4e61788d3..3ebfd17af12 100644
--- a/components/script/dom/touch.rs
+++ b/components/script/dom/touch.rs
@@ -9,6 +9,7 @@ use dom::bindings::num::Finite;
use dom::bindings::reflector::{Reflector, reflect_dom_object};
use dom::eventtarget::EventTarget;
use dom::window::Window;
+use dom_struct::dom_struct;
#[dom_struct]
pub struct Touch {
diff --git a/components/script/dom/touchevent.rs b/components/script/dom/touchevent.rs
index f20dc4dc012..30044094fcd 100644
--- a/components/script/dom/touchevent.rs
+++ b/components/script/dom/touchevent.rs
@@ -13,6 +13,7 @@ use dom::event::{EventBubbles, EventCancelable};
use dom::touchlist::TouchList;
use dom::uievent::UIEvent;
use dom::window::Window;
+use dom_struct::dom_struct;
use std::cell::Cell;
#[dom_struct]
diff --git a/components/script/dom/touchlist.rs b/components/script/dom/touchlist.rs
index a4ff7f8443e..829b6f0d5a6 100644
--- a/components/script/dom/touchlist.rs
+++ b/components/script/dom/touchlist.rs
@@ -8,6 +8,7 @@ use dom::bindings::js::{JS, Root};
use dom::bindings::reflector::{Reflector, reflect_dom_object};
use dom::touch::Touch;
use dom::window::Window;
+use dom_struct::dom_struct;
#[dom_struct]
pub struct TouchList {
diff --git a/components/script/dom/transitionevent.rs b/components/script/dom/transitionevent.rs
index 4630ec70bc0..28aec7097f8 100644
--- a/components/script/dom/transitionevent.rs
+++ b/components/script/dom/transitionevent.rs
@@ -13,6 +13,7 @@ use dom::bindings::reflector::reflect_dom_object;
use dom::bindings::str::DOMString;
use dom::event::Event;
use dom::window::Window;
+use dom_struct::dom_struct;
use servo_atoms::Atom;
#[dom_struct]
diff --git a/components/script/dom/treewalker.rs b/components/script/dom/treewalker.rs
index 6dba79e893b..24925b9f0d9 100644
--- a/components/script/dom/treewalker.rs
+++ b/components/script/dom/treewalker.rs
@@ -14,6 +14,7 @@ use dom::bindings::js::Root;
use dom::bindings::reflector::{Reflector, reflect_dom_object};
use dom::document::Document;
use dom::node::Node;
+use dom_struct::dom_struct;
use std::rc::Rc;
// https://dom.spec.whatwg.org/#interface-treewalker
diff --git a/components/script/dom/uievent.rs b/components/script/dom/uievent.rs
index b8c09a48994..f3f77953c29 100644
--- a/components/script/dom/uievent.rs
+++ b/components/script/dom/uievent.rs
@@ -12,6 +12,7 @@ use dom::bindings::reflector::reflect_dom_object;
use dom::bindings::str::DOMString;
use dom::event::{Event, EventBubbles, EventCancelable};
use dom::window::Window;
+use dom_struct::dom_struct;
use servo_atoms::Atom;
use std::cell::Cell;
use std::default::Default;
diff --git a/components/script/dom/url.rs b/components/script/dom/url.rs
index e85225b04d5..5cf2e867149 100644
--- a/components/script/dom/url.rs
+++ b/components/script/dom/url.rs
@@ -13,6 +13,7 @@ use dom::blob::Blob;
use dom::globalscope::GlobalScope;
use dom::urlhelper::UrlHelper;
use dom::urlsearchparams::URLSearchParams;
+use dom_struct::dom_struct;
use ipc_channel::ipc;
use net_traits::{CoreResourceMsg, IpcSend};
use net_traits::blob_url_store::{get_blob_origin, parse_blob_url};
diff --git a/components/script/dom/urlsearchparams.rs b/components/script/dom/urlsearchparams.rs
index b6ecd069b8c..58391d65151 100644
--- a/components/script/dom/urlsearchparams.rs
+++ b/components/script/dom/urlsearchparams.rs
@@ -14,6 +14,7 @@ use dom::bindings::str::{DOMString, USVString};
use dom::bindings::weakref::MutableWeakRef;
use dom::globalscope::GlobalScope;
use dom::url::URL;
+use dom_struct::dom_struct;
use encoding::types::EncodingRef;
use url::form_urlencoded;
diff --git a/components/script/dom/validitystate.rs b/components/script/dom/validitystate.rs
index f5b6501a82d..879438aa389 100755
--- a/components/script/dom/validitystate.rs
+++ b/components/script/dom/validitystate.rs
@@ -8,6 +8,7 @@ use dom::bindings::js::{JS, Root};
use dom::bindings::reflector::{Reflector, reflect_dom_object};
use dom::element::Element;
use dom::window::Window;
+use dom_struct::dom_struct;
// https://html.spec.whatwg.org/multipage/#validity-states
#[derive(JSTraceable, HeapSizeOf)]
diff --git a/components/script/dom/vr.rs b/components/script/dom/vr.rs
index 6e077c415ac..aea8230ac0e 100644
--- a/components/script/dom/vr.rs
+++ b/components/script/dom/vr.rs
@@ -15,6 +15,7 @@ use dom::globalscope::GlobalScope;
use dom::promise::Promise;
use dom::vrdisplay::VRDisplay;
use dom::vrdisplayevent::VRDisplayEvent;
+use dom_struct::dom_struct;
use ipc_channel::ipc;
use ipc_channel::ipc::IpcSender;
use script_traits::WebVREventMsg;
diff --git a/components/script/dom/vrdisplay.rs b/components/script/dom/vrdisplay.rs
index bb7d1811464..b977e1d3f6a 100644
--- a/components/script/dom/vrdisplay.rs
+++ b/components/script/dom/vrdisplay.rs
@@ -30,6 +30,7 @@ use dom::vrframedata::VRFrameData;
use dom::vrpose::VRPose;
use dom::vrstageparameters::VRStageParameters;
use dom::webglrenderingcontext::WebGLRenderingContext;
+use dom_struct::dom_struct;
use ipc_channel::ipc;
use ipc_channel::ipc::{IpcSender, IpcReceiver};
use js::jsapi::JSContext;
diff --git a/components/script/dom/vrdisplaycapabilities.rs b/components/script/dom/vrdisplaycapabilities.rs
index 0b131f8ffd3..349fd272140 100644
--- a/components/script/dom/vrdisplaycapabilities.rs
+++ b/components/script/dom/vrdisplaycapabilities.rs
@@ -8,6 +8,7 @@ use dom::bindings::codegen::Bindings::VRDisplayCapabilitiesBinding::VRDisplayCap
use dom::bindings::js::Root;
use dom::bindings::reflector::{Reflector, reflect_dom_object};
use dom::globalscope::GlobalScope;
+use dom_struct::dom_struct;
use webvr_traits::WebVRDisplayCapabilities;
#[dom_struct]
diff --git a/components/script/dom/vrdisplayevent.rs b/components/script/dom/vrdisplayevent.rs
index b6257464e53..956229ead4c 100644
--- a/components/script/dom/vrdisplayevent.rs
+++ b/components/script/dom/vrdisplayevent.rs
@@ -15,6 +15,7 @@ use dom::event::Event;
use dom::globalscope::GlobalScope;
use dom::vrdisplay::VRDisplay;
use dom::window::Window;
+use dom_struct::dom_struct;
use servo_atoms::Atom;
use webvr_traits::{WebVRDisplayEvent, WebVRDisplayEventReason};
diff --git a/components/script/dom/vreyeparameters.rs b/components/script/dom/vreyeparameters.rs
index 5fb835edb0f..0c429fee78a 100644
--- a/components/script/dom/vreyeparameters.rs
+++ b/components/script/dom/vreyeparameters.rs
@@ -10,6 +10,7 @@ use dom::bindings::js::{JS, Root};
use dom::bindings::reflector::{Reflector, reflect_dom_object};
use dom::globalscope::GlobalScope;
use dom::vrfieldofview::VRFieldOfView;
+use dom_struct::dom_struct;
use js::jsapi::{Heap, JSContext, JSObject};
use js::typedarray::{Float32Array, CreateWith};
use std::default::Default;
diff --git a/components/script/dom/vrfieldofview.rs b/components/script/dom/vrfieldofview.rs
index 5103e1ec781..80a2f767d81 100644
--- a/components/script/dom/vrfieldofview.rs
+++ b/components/script/dom/vrfieldofview.rs
@@ -9,6 +9,7 @@ use dom::bindings::js::Root;
use dom::bindings::num::Finite;
use dom::bindings::reflector::{Reflector, reflect_dom_object};
use dom::globalscope::GlobalScope;
+use dom_struct::dom_struct;
use webvr_traits::WebVRFieldOfView;
#[dom_struct]
diff --git a/components/script/dom/vrframedata.rs b/components/script/dom/vrframedata.rs
index 65c9f5d7df4..5b153a2a43e 100644
--- a/components/script/dom/vrframedata.rs
+++ b/components/script/dom/vrframedata.rs
@@ -12,6 +12,7 @@ use dom::bindings::reflector::{DomObject, Reflector, reflect_dom_object};
use dom::globalscope::GlobalScope;
use dom::vrpose::VRPose;
use dom::window::Window;
+use dom_struct::dom_struct;
use js::jsapi::{Heap, JSContext, JSObject};
use js::typedarray::{Float32Array, CreateWith};
use std::cell::Cell;
diff --git a/components/script/dom/vrpose.rs b/components/script/dom/vrpose.rs
index 96fa0597a3a..542059ca799 100644
--- a/components/script/dom/vrpose.rs
+++ b/components/script/dom/vrpose.rs
@@ -8,6 +8,7 @@ use dom::bindings::codegen::Bindings::VRPoseBinding::VRPoseMethods;
use dom::bindings::js::Root;
use dom::bindings::reflector::{DomObject, Reflector, reflect_dom_object};
use dom::globalscope::GlobalScope;
+use dom_struct::dom_struct;
use js::jsapi::{Heap, JSContext, JSObject};
use js::typedarray::{Float32Array, CreateWith};
use std::ptr;
diff --git a/components/script/dom/vrstageparameters.rs b/components/script/dom/vrstageparameters.rs
index 35faa0bde35..0bc319466c3 100644
--- a/components/script/dom/vrstageparameters.rs
+++ b/components/script/dom/vrstageparameters.rs
@@ -10,6 +10,7 @@ use dom::bindings::js::Root;
use dom::bindings::num::Finite;
use dom::bindings::reflector::{DomObject, Reflector, reflect_dom_object};
use dom::globalscope::GlobalScope;
+use dom_struct::dom_struct;
use js::jsapi::{Heap, JSContext, JSObject};
use js::typedarray::{Float32Array, CreateWith};
use webvr_traits::WebVRStageParameters;
diff --git a/components/script/dom/webglactiveinfo.rs b/components/script/dom/webglactiveinfo.rs
index 515d6afa4a0..359a772a268 100644
--- a/components/script/dom/webglactiveinfo.rs
+++ b/components/script/dom/webglactiveinfo.rs
@@ -9,6 +9,7 @@ use dom::bindings::js::Root;
use dom::bindings::reflector::{Reflector, reflect_dom_object};
use dom::bindings::str::DOMString;
use dom::window::Window;
+use dom_struct::dom_struct;
#[dom_struct]
pub struct WebGLActiveInfo {
diff --git a/components/script/dom/webglbuffer.rs b/components/script/dom/webglbuffer.rs
index 752511df67a..6678b3d0b92 100644
--- a/components/script/dom/webglbuffer.rs
+++ b/components/script/dom/webglbuffer.rs
@@ -9,6 +9,7 @@ use dom::bindings::js::Root;
use dom::bindings::reflector::reflect_dom_object;
use dom::webglobject::WebGLObject;
use dom::window::Window;
+use dom_struct::dom_struct;
use ipc_channel::ipc::IpcSender;
use std::cell::Cell;
use webrender_traits;
diff --git a/components/script/dom/webglcontextevent.rs b/components/script/dom/webglcontextevent.rs
index 9d13fc8f64a..ce569ee8cbc 100644
--- a/components/script/dom/webglcontextevent.rs
+++ b/components/script/dom/webglcontextevent.rs
@@ -13,6 +13,7 @@ use dom::bindings::reflector::reflect_dom_object;
use dom::bindings::str::DOMString;
use dom::event::{Event, EventBubbles, EventCancelable};
use dom::window::Window;
+use dom_struct::dom_struct;
use servo_atoms::Atom;
#[dom_struct]
diff --git a/components/script/dom/webglframebuffer.rs b/components/script/dom/webglframebuffer.rs
index 2f18362122d..8d2c0f7b89c 100644
--- a/components/script/dom/webglframebuffer.rs
+++ b/components/script/dom/webglframebuffer.rs
@@ -13,6 +13,7 @@ use dom::webglobject::WebGLObject;
use dom::webglrenderbuffer::WebGLRenderbuffer;
use dom::webgltexture::WebGLTexture;
use dom::window::Window;
+use dom_struct::dom_struct;
use ipc_channel::ipc::IpcSender;
use std::cell::Cell;
use webrender_traits;
diff --git a/components/script/dom/webglobject.rs b/components/script/dom/webglobject.rs
index 3ebbf8fb017..123420b7cb0 100644
--- a/components/script/dom/webglobject.rs
+++ b/components/script/dom/webglobject.rs
@@ -4,6 +4,7 @@
// https://www.khronos.org/registry/webgl/specs/latest/1.0/webgl.idl
use dom::bindings::reflector::Reflector;
+use dom_struct::dom_struct;
#[dom_struct]
pub struct WebGLObject {
diff --git a/components/script/dom/webglprogram.rs b/components/script/dom/webglprogram.rs
index ad33fc2f22f..3b2710a5d91 100644
--- a/components/script/dom/webglprogram.rs
+++ b/components/script/dom/webglprogram.rs
@@ -14,6 +14,7 @@ use dom::webglobject::WebGLObject;
use dom::webglrenderingcontext::MAX_UNIFORM_AND_ATTRIBUTE_LEN;
use dom::webglshader::WebGLShader;
use dom::window::Window;
+use dom_struct::dom_struct;
use ipc_channel::ipc::IpcSender;
use std::cell::Cell;
use webrender_traits;
diff --git a/components/script/dom/webglrenderbuffer.rs b/components/script/dom/webglrenderbuffer.rs
index b9d36f33d1c..7094a6b3734 100644
--- a/components/script/dom/webglrenderbuffer.rs
+++ b/components/script/dom/webglrenderbuffer.rs
@@ -10,6 +10,7 @@ use dom::bindings::js::Root;
use dom::bindings::reflector::reflect_dom_object;
use dom::webglobject::WebGLObject;
use dom::window::Window;
+use dom_struct::dom_struct;
use ipc_channel::ipc::IpcSender;
use std::cell::Cell;
use webrender_traits;
diff --git a/components/script/dom/webglrenderingcontext.rs b/components/script/dom/webglrenderingcontext.rs
index 7844b53aac3..5261b96d1c5 100644
--- a/components/script/dom/webglrenderingcontext.rs
+++ b/components/script/dom/webglrenderingcontext.rs
@@ -34,6 +34,7 @@ use dom::webglshader::WebGLShader;
use dom::webgltexture::{TexParameterValue, WebGLTexture};
use dom::webgluniformlocation::WebGLUniformLocation;
use dom::window::Window;
+use dom_struct::dom_struct;
use euclid::size::Size2D;
use ipc_channel::ipc::{self, IpcSender};
use js::conversions::ConversionBehavior;
diff --git a/components/script/dom/webglshader.rs b/components/script/dom/webglshader.rs
index d846ac34aa7..1526b5303f7 100644
--- a/components/script/dom/webglshader.rs
+++ b/components/script/dom/webglshader.rs
@@ -12,6 +12,7 @@ use dom::bindings::reflector::reflect_dom_object;
use dom::bindings::str::DOMString;
use dom::webglobject::WebGLObject;
use dom::window::Window;
+use dom_struct::dom_struct;
use ipc_channel::ipc::IpcSender;
use std::cell::Cell;
use std::sync::{ONCE_INIT, Once};
diff --git a/components/script/dom/webglshaderprecisionformat.rs b/components/script/dom/webglshaderprecisionformat.rs
index 87ab7490e3a..10a76b73fe1 100644
--- a/components/script/dom/webglshaderprecisionformat.rs
+++ b/components/script/dom/webglshaderprecisionformat.rs
@@ -10,6 +10,7 @@ use dom::bindings::codegen::Bindings::WebGLShaderPrecisionFormatBinding::WebGLSh
use dom::bindings::js::Root;
use dom::bindings::reflector::{Reflector, reflect_dom_object};
use dom::window::Window;
+use dom_struct::dom_struct;
#[dom_struct]
pub struct WebGLShaderPrecisionFormat {
diff --git a/components/script/dom/webgltexture.rs b/components/script/dom/webgltexture.rs
index ad20a127e17..d88f955a862 100644
--- a/components/script/dom/webgltexture.rs
+++ b/components/script/dom/webgltexture.rs
@@ -12,6 +12,7 @@ use dom::bindings::reflector::reflect_dom_object;
use dom::webgl_validations::types::{TexImageTarget, TexFormat, TexDataType};
use dom::webglobject::WebGLObject;
use dom::window::Window;
+use dom_struct::dom_struct;
use ipc_channel::ipc::IpcSender;
use std::cell::Cell;
use std::cmp;
diff --git a/components/script/dom/webgluniformlocation.rs b/components/script/dom/webgluniformlocation.rs
index 1b355bd8582..d76ab91ee5d 100644
--- a/components/script/dom/webgluniformlocation.rs
+++ b/components/script/dom/webgluniformlocation.rs
@@ -7,6 +7,7 @@ use dom::bindings::codegen::Bindings::WebGLUniformLocationBinding;
use dom::bindings::js::Root;
use dom::bindings::reflector::{Reflector, reflect_dom_object};
use dom::window::Window;
+use dom_struct::dom_struct;
use webrender_traits::WebGLProgramId;
#[dom_struct]
diff --git a/components/script/dom/websocket.rs b/components/script/dom/websocket.rs
index 7c02123f33d..134cc9c3975 100644
--- a/components/script/dom/websocket.rs
+++ b/components/script/dom/websocket.rs
@@ -22,6 +22,7 @@ use dom::eventtarget::EventTarget;
use dom::globalscope::GlobalScope;
use dom::messageevent::MessageEvent;
use dom::urlhelper::UrlHelper;
+use dom_struct::dom_struct;
use hyper;
use hyper_serde::Serde;
use ipc_channel::ipc::{self, IpcReceiver, IpcSender};
diff --git a/components/script/dom/window.rs b/components/script/dom/window.rs
index 919093c158c..7a09394c3fd 100644
--- a/components/script/dom/window.rs
+++ b/components/script/dom/window.rs
@@ -48,6 +48,7 @@ use dom::promise::Promise;
use dom::screen::Screen;
use dom::storage::Storage;
use dom::testrunner::TestRunner;
+use dom_struct::dom_struct;
use euclid::{Point2D, Rect, Size2D};
use fetch;
use gfx_traits::ScrollRootId;
diff --git a/components/script/dom/worker.rs b/components/script/dom/worker.rs
index 18b3a441d68..1fb354189e3 100644
--- a/components/script/dom/worker.rs
+++ b/components/script/dom/worker.rs
@@ -22,6 +22,7 @@ use dom::eventtarget::EventTarget;
use dom::globalscope::GlobalScope;
use dom::messageevent::MessageEvent;
use dom::workerglobalscope::prepare_workerscope_init;
+use dom_struct::dom_struct;
use ipc_channel::ipc;
use js::jsapi::{HandleValue, JSAutoCompartment, JSContext, NullHandleValue};
use js::jsval::UndefinedValue;
diff --git a/components/script/dom/workerglobalscope.rs b/components/script/dom/workerglobalscope.rs
index 03e531c5f16..948d72c251b 100644
--- a/components/script/dom/workerglobalscope.rs
+++ b/components/script/dom/workerglobalscope.rs
@@ -23,6 +23,7 @@ use dom::serviceworkerglobalscope::ServiceWorkerGlobalScope;
use dom::window::{base64_atob, base64_btoa};
use dom::workerlocation::WorkerLocation;
use dom::workernavigator::WorkerNavigator;
+use dom_struct::dom_struct;
use fetch;
use ipc_channel::ipc::IpcSender;
use js::jsapi::{HandleValue, JSAutoCompartment, JSContext, JSRuntime};
diff --git a/components/script/dom/workerlocation.rs b/components/script/dom/workerlocation.rs
index aee42330463..f52e0efb69a 100644
--- a/components/script/dom/workerlocation.rs
+++ b/components/script/dom/workerlocation.rs
@@ -9,6 +9,7 @@ use dom::bindings::reflector::{Reflector, reflect_dom_object};
use dom::bindings::str::{DOMString, USVString};
use dom::urlhelper::UrlHelper;
use dom::workerglobalscope::WorkerGlobalScope;
+use dom_struct::dom_struct;
use servo_url::ServoUrl;
// https://html.spec.whatwg.org/multipage/#worker-locations
diff --git a/components/script/dom/workernavigator.rs b/components/script/dom/workernavigator.rs
index d2a5a7da7d5..dafa3325b38 100644
--- a/components/script/dom/workernavigator.rs
+++ b/components/script/dom/workernavigator.rs
@@ -10,6 +10,7 @@ use dom::bindings::str::DOMString;
use dom::navigatorinfo;
use dom::permissions::Permissions;
use dom::workerglobalscope::WorkerGlobalScope;
+use dom_struct::dom_struct;
// https://html.spec.whatwg.org/multipage/#workernavigator
#[dom_struct]
diff --git a/components/script/dom/xmldocument.rs b/components/script/dom/xmldocument.rs
index c832e018360..59c6739fb2d 100644
--- a/components/script/dom/xmldocument.rs
+++ b/components/script/dom/xmldocument.rs
@@ -14,6 +14,7 @@ use dom::document::{Document, DocumentSource, HasBrowsingContext, IsHTMLDocument
use dom::location::Location;
use dom::node::Node;
use dom::window::Window;
+use dom_struct::dom_struct;
use js::jsapi::{JSContext, JSObject};
use script_traits::DocumentActivity;
use servo_url::{MutableOrigin, ServoUrl};
diff --git a/components/script/dom/xmlhttprequest.rs b/components/script/dom/xmlhttprequest.rs
index c5c3c635129..e96fa2a4443 100644
--- a/components/script/dom/xmlhttprequest.rs
+++ b/components/script/dom/xmlhttprequest.rs
@@ -36,6 +36,7 @@ use dom::window::Window;
use dom::workerglobalscope::WorkerGlobalScope;
use dom::xmlhttprequesteventtarget::XMLHttpRequestEventTarget;
use dom::xmlhttprequestupload::XMLHttpRequestUpload;
+use dom_struct::dom_struct;
use encoding::all::UTF_8;
use encoding::label::encoding_from_whatwg_label;
use encoding::types::{DecoderTrap, EncoderTrap, Encoding, EncodingRef};
diff --git a/components/script/dom/xmlhttprequesteventtarget.rs b/components/script/dom/xmlhttprequesteventtarget.rs
index cdbc7a29df8..399b2f65945 100644
--- a/components/script/dom/xmlhttprequesteventtarget.rs
+++ b/components/script/dom/xmlhttprequesteventtarget.rs
@@ -5,6 +5,7 @@
use dom::bindings::codegen::Bindings::EventHandlerBinding::EventHandlerNonNull;
use dom::bindings::codegen::Bindings::XMLHttpRequestEventTargetBinding::XMLHttpRequestEventTargetMethods;
use dom::eventtarget::EventTarget;
+use dom_struct::dom_struct;
#[dom_struct]
pub struct XMLHttpRequestEventTarget {
diff --git a/components/script/dom/xmlhttprequestupload.rs b/components/script/dom/xmlhttprequestupload.rs
index 6c53fe15eca..02a54001388 100644
--- a/components/script/dom/xmlhttprequestupload.rs
+++ b/components/script/dom/xmlhttprequestupload.rs
@@ -7,6 +7,7 @@ use dom::bindings::js::Root;
use dom::bindings::reflector::reflect_dom_object;
use dom::globalscope::GlobalScope;
use dom::xmlhttprequesteventtarget::XMLHttpRequestEventTarget;
+use dom_struct::dom_struct;
#[dom_struct]
pub struct XMLHttpRequestUpload {
diff --git a/components/script/lib.rs b/components/script/lib.rs
index 9d3abf169b9..bc754bd870a 100644
--- a/components/script/lib.rs
+++ b/components/script/lib.rs
@@ -11,6 +11,7 @@
#![feature(on_unimplemented)]
#![feature(optin_builtin_traits)]
#![feature(plugin)]
+#![feature(proc_macro)]
#![feature(slice_patterns)]
#![feature(stmt_expr_attributes)]
#![feature(try_from)]
@@ -40,6 +41,7 @@ extern crate cssparser;
#[macro_use]
extern crate deny_public_fields;
extern crate devtools_traits;
+extern crate dom_struct;
#[macro_use]
extern crate domobject_derive;
extern crate encoding;