aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/script_thread.rs
diff options
context:
space:
mode:
Diffstat (limited to 'components/script/script_thread.rs')
-rw-r--r--components/script/script_thread.rs24
1 files changed, 23 insertions, 1 deletions
diff --git a/components/script/script_thread.rs b/components/script/script_thread.rs
index 191df335ec5..20ac88b7bc1 100644
--- a/components/script/script_thread.rs
+++ b/components/script/script_thread.rs
@@ -2430,6 +2430,8 @@ impl ScriptThread {
);
if load_data.url.as_str() == "about:blank" {
self.start_page_load_about_blank(new_load, load_data.js_eval_result);
+ } else if load_data.url.as_str() == "about:srcdoc" {
+ self.page_load_about_srcdoc(new_load, load_data.srcdoc);
} else {
self.pre_page_load(new_load, load_data);
}
@@ -3177,7 +3179,8 @@ impl ScriptThread {
self.timer_event_chan.clone(),
);
- let origin = if final_url.as_str() == "about:blank" {
+ let origin = if final_url.as_str() == "about:blank" || final_url.as_str() == "about:srcdoc"
+ {
incomplete.origin.clone()
} else {
MutableOrigin::new(final_url.origin())
@@ -3838,6 +3841,25 @@ impl ScriptThread {
context.process_response_eof(Ok(ResourceFetchTiming::new(ResourceTimingType::None)));
}
+ /// Synchronously parse a srcdoc document from a giving HTML string.
+ fn page_load_about_srcdoc(&self, incomplete: InProgressLoad, src_doc: String) {
+ let id = incomplete.pipeline_id;
+
+ self.incomplete_loads.borrow_mut().push(incomplete);
+
+ let url = ServoUrl::parse("about:srcdoc").unwrap();
+ let mut context = ParserContext::new(id, url.clone());
+
+ let mut meta = Metadata::default(url);
+ meta.set_content_type(Some(&mime::TEXT_HTML));
+
+ let chunk = src_doc.into_bytes();
+
+ context.process_response(Ok(FetchMetadata::Unfiltered(meta)));
+ context.process_response_chunk(chunk);
+ context.process_response_eof(Ok(ResourceFetchTiming::new(ResourceTimingType::None)));
+ }
+
fn handle_css_error_reporting(
&self,
pipeline_id: PipelineId,