aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/domparser.rs
diff options
context:
space:
mode:
authorJosh Matthews <josh@joshmatthews.net>2014-10-13 08:20:06 -0400
committerJosh Matthews <josh@joshmatthews.net>2015-05-11 13:41:51 -0400
commit7f0706ed42b33ec1da6bf9741811ca97d566ed45 (patch)
tree9d74b8a50145afb05bd10d6860227f4af17a5754 /components/script/dom/domparser.rs
parent29a43a00b39e544596e3bcce9bdfca2159313ba5 (diff)
downloadservo-7f0706ed42b33ec1da6bf9741811ca97d566ed45.tar.gz
servo-7f0706ed42b33ec1da6bf9741811ca97d566ed45.zip
Implement a DocumentLoader type that tracks pending loads and notifies the script task when the queue is empty. Dispatch the document load event based on the DocumentLoader's notification.
Diffstat (limited to 'components/script/dom/domparser.rs')
-rw-r--r--components/script/dom/domparser.rs11
1 files changed, 9 insertions, 2 deletions
diff --git a/components/script/dom/domparser.rs b/components/script/dom/domparser.rs
index 65afb15e5fa..5685c3f324f 100644
--- a/components/script/dom/domparser.rs
+++ b/components/script/dom/domparser.rs
@@ -2,10 +2,12 @@
* 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 document_loader::DocumentLoader;
use dom::bindings::codegen::Bindings::DocumentBinding::DocumentReadyState;
use dom::bindings::codegen::Bindings::DOMParserBinding;
use dom::bindings::codegen::Bindings::DOMParserBinding::DOMParserMethods;
use dom::bindings::codegen::Bindings::DOMParserBinding::SupportedType::{Text_html, Text_xml};
+use dom::bindings::codegen::Bindings::WindowBinding::WindowMethods;
use dom::bindings::error::Fallible;
use dom::bindings::global::GlobalRef;
use dom::bindings::js::{JS, JSRef, Rootable, Temporary};
@@ -51,13 +53,17 @@ impl<'a> DOMParserMethods for JSRef<'a, DOMParser> {
let window = self.window.root();
let url = window.r().get_url();
let content_type = DOMParserBinding::SupportedTypeValues::strings[ty as usize].to_owned();
+ let doc = window.r().Document().root();
+ let doc = doc.r();
+ let loader = DocumentLoader::new(&*doc.loader());
match ty {
Text_html => {
let document = Document::new(window.r(), Some(url.clone()),
IsHTMLDocument::HTMLDocument,
Some(content_type),
None,
- DocumentSource::FromParser).root();
+ DocumentSource::FromParser,
+ loader).root();
parse_html(document.r(), HTMLInput::InputString(s), &url, None);
document.r().set_ready_state(DocumentReadyState::Complete);
Ok(Temporary::from_rooted(document.r()))
@@ -68,7 +74,8 @@ impl<'a> DOMParserMethods for JSRef<'a, DOMParser> {
IsHTMLDocument::NonHTMLDocument,
Some(content_type),
None,
- DocumentSource::NotFromParser))
+ DocumentSource::NotFromParser,
+ loader))
}
}
}