aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--components/script/dom/bindings/codegen/CodegenRust.py5
-rw-r--r--components/script/dom/mod.rs1
-rw-r--r--components/script/dom/servohtmlparser.rs9
-rw-r--r--components/script/dom/servoparser.rs18
-rw-r--r--components/script/dom/servoxmlparser.rs7
-rw-r--r--components/script/dom/webidls/ServoHTMLParser.webidl2
-rw-r--r--components/script/dom/webidls/ServoParser.webidl10
-rw-r--r--components/script/dom/webidls/ServoXMLParser.webidl2
8 files changed, 43 insertions, 11 deletions
diff --git a/components/script/dom/bindings/codegen/CodegenRust.py b/components/script/dom/bindings/codegen/CodegenRust.py
index 24826ced714..d4c12f8c2ae 100644
--- a/components/script/dom/bindings/codegen/CodegenRust.py
+++ b/components/script/dom/bindings/codegen/CodegenRust.py
@@ -2748,7 +2748,8 @@ assert!((*cache)[PrototypeList::Constructor::%(id)s as usize].is_null());
interface.get());
""" % {"id": name, "name": str_to_const_array(name)})
- if len(self.descriptor.prototypeChain) == 1:
+ parentName = self.descriptor.getParentName()
+ if not parentName:
if self.descriptor.interface.getExtendedAttribute("ExceptionClass"):
getPrototypeProto = "prototype_proto.set(JS_GetErrorPrototype(cx))"
elif self.descriptor.interface.isIteratorInterface():
@@ -2757,7 +2758,7 @@ assert!((*cache)[PrototypeList::Constructor::%(id)s as usize].is_null());
getPrototypeProto = "prototype_proto.set(JS_GetObjectPrototype(cx, global))"
else:
getPrototypeProto = ("%s::GetProtoObject(cx, global, prototype_proto.handle_mut())" %
- toBindingNamespace(self.descriptor.getParentName()))
+ toBindingNamespace(parentName))
code = [CGGeneric("""\
rooted!(in(cx) let mut prototype_proto = ptr::null_mut());
diff --git a/components/script/dom/mod.rs b/components/script/dom/mod.rs
index ace4f979be6..bf68603ff13 100644
--- a/components/script/dom/mod.rs
+++ b/components/script/dom/mod.rs
@@ -387,6 +387,7 @@ pub mod serviceworkercontainer;
pub mod serviceworkerglobalscope;
pub mod serviceworkerregistration;
pub mod servohtmlparser;
+pub mod servoparser;
pub mod servoxmlparser;
pub mod storage;
pub mod storageevent;
diff --git a/components/script/dom/servohtmlparser.rs b/components/script/dom/servohtmlparser.rs
index a65d9e84a6d..c0a8896fde0 100644
--- a/components/script/dom/servohtmlparser.rs
+++ b/components/script/dom/servohtmlparser.rs
@@ -14,13 +14,14 @@ use dom::bindings::codegen::Bindings::ServoHTMLParserBinding;
use dom::bindings::inheritance::Castable;
use dom::bindings::js::{JS, Root};
use dom::bindings::refcounted::Trusted;
-use dom::bindings::reflector::{Reflector, reflect_dom_object};
+use dom::bindings::reflector::reflect_dom_object;
use dom::bindings::str::DOMString;
use dom::bindings::trace::JSTraceable;
use dom::document::Document;
use dom::globalscope::GlobalScope;
use dom::htmlimageelement::HTMLImageElement;
use dom::node::Node;
+use dom::servoparser::ServoParser;
use dom::window::Window;
use encoding::all::UTF_8;
use encoding::types::{DecoderTrap, Encoding};
@@ -212,7 +213,7 @@ impl PreInvoke for ParserContext {
#[dom_struct]
pub struct ServoHTMLParser {
- reflector_: Reflector,
+ servoparser: ServoParser,
#[ignore_heap_size_of = "Defined in html5ever"]
tokenizer: DOMRefCell<Tokenizer>,
/// Input chunks received but not yet passed to the parser.
@@ -269,7 +270,7 @@ impl ServoHTMLParser {
let tok = tokenizer::Tokenizer::new(tb, Default::default());
let parser = ServoHTMLParser {
- reflector_: Reflector::new(),
+ servoparser: ServoParser::new_inherited(),
tokenizer: DOMRefCell::new(tok),
pending_input: DOMRefCell::new(vec!()),
document: JS::from_ref(document),
@@ -305,7 +306,7 @@ impl ServoHTMLParser {
let tok = tokenizer::Tokenizer::new(tb, tok_opts);
let parser = ServoHTMLParser {
- reflector_: Reflector::new(),
+ servoparser: ServoParser::new_inherited(),
tokenizer: DOMRefCell::new(tok),
pending_input: DOMRefCell::new(vec!()),
document: JS::from_ref(document),
diff --git a/components/script/dom/servoparser.rs b/components/script/dom/servoparser.rs
new file mode 100644
index 00000000000..18cd881f812
--- /dev/null
+++ b/components/script/dom/servoparser.rs
@@ -0,0 +1,18 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+use dom::bindings::reflector::Reflector;
+
+#[dom_struct]
+pub struct ServoParser {
+ reflector: Reflector,
+}
+
+impl ServoParser {
+ pub fn new_inherited() -> Self {
+ ServoParser {
+ reflector: Reflector::new(),
+ }
+ }
+}
diff --git a/components/script/dom/servoxmlparser.rs b/components/script/dom/servoxmlparser.rs
index 2b79a5cf117..e4f2914dc15 100644
--- a/components/script/dom/servoxmlparser.rs
+++ b/components/script/dom/servoxmlparser.rs
@@ -5,10 +5,11 @@
use dom::bindings::cell::DOMRefCell;
use dom::bindings::codegen::Bindings::ServoXMLParserBinding;
use dom::bindings::js::{JS, Root};
-use dom::bindings::reflector::{Reflector, reflect_dom_object};
+use dom::bindings::reflector::reflect_dom_object;
use dom::bindings::trace::JSTraceable;
use dom::document::Document;
use dom::node::Node;
+use dom::servoparser::ServoParser;
use dom::window::Window;
use js::jsapi::JSTracer;
use msg::constellation_msg::PipelineId;
@@ -31,7 +32,7 @@ pub struct Sink {
#[must_root]
#[dom_struct]
pub struct ServoXMLParser {
- reflector_: Reflector,
+ servoparser: ServoParser,
#[ignore_heap_size_of = "Defined in xml5ever"]
tokenizer: DOMRefCell<Tokenizer>,
/// Input chunks received but not yet passed to the parser.
@@ -85,7 +86,7 @@ impl ServoXMLParser {
let tok = tokenizer::XmlTokenizer::new(tb, Default::default());
let parser = ServoXMLParser {
- reflector_: Reflector::new(),
+ servoparser: ServoParser::new_inherited(),
tokenizer: DOMRefCell::new(tok),
pending_input: DOMRefCell::new(vec!()),
document: JS::from_ref(document),
diff --git a/components/script/dom/webidls/ServoHTMLParser.webidl b/components/script/dom/webidls/ServoHTMLParser.webidl
index b05515dcf3c..ddf9382ff9a 100644
--- a/components/script/dom/webidls/ServoHTMLParser.webidl
+++ b/components/script/dom/webidls/ServoHTMLParser.webidl
@@ -7,5 +7,5 @@
// FIXME: find a better way to hide this from content (#3688)
[NoInterfaceObject, Exposed=(Window,Worker)]
-interface ServoHTMLParser {
+interface ServoHTMLParser : ServoParser {
};
diff --git a/components/script/dom/webidls/ServoParser.webidl b/components/script/dom/webidls/ServoParser.webidl
new file mode 100644
index 00000000000..435ca1fb90f
--- /dev/null
+++ b/components/script/dom/webidls/ServoParser.webidl
@@ -0,0 +1,10 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+// This interface is entirely internal to Servo, and should not be accessible to
+// web pages.
+
+[Exposed=(Window,Worker),
+ Inline]
+interface ServoParser {};
diff --git a/components/script/dom/webidls/ServoXMLParser.webidl b/components/script/dom/webidls/ServoXMLParser.webidl
index 1111499de1b..3f6f03822ad 100644
--- a/components/script/dom/webidls/ServoXMLParser.webidl
+++ b/components/script/dom/webidls/ServoXMLParser.webidl
@@ -6,6 +6,6 @@
// web pages.
[NoInterfaceObject, Exposed=(Window,Worker)]
-interface ServoXMLParser {
+interface ServoXMLParser : ServoParser {
};