aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/htmlscriptelement.rs
diff options
context:
space:
mode:
authorAlan Jeffrey <ajeffrey@mozilla.com>2019-09-05 11:57:21 -0500
committerAlan Jeffrey <ajeffrey@mozilla.com>2019-09-10 16:13:49 -0500
commit1aeb97b2810606e7dd7768e9466b2857688c9b3a (patch)
tree337ab43a5e23c3e9c96c791e5178efba1acaf57a /components/script/dom/htmlscriptelement.rs
parent5bcb1b579c28b09fa72163ac38e2864778e3dd9d (diff)
downloadservo-1aeb97b2810606e7dd7768e9466b2857688c9b3a.tar.gz
servo-1aeb97b2810606e7dd7768e9466b2857688c9b3a.zip
Prefetch img and scripts during parsing
Diffstat (limited to 'components/script/dom/htmlscriptelement.rs')
-rw-r--r--components/script/dom/htmlscriptelement.rs55
1 files changed, 40 insertions, 15 deletions
diff --git a/components/script/dom/htmlscriptelement.rs b/components/script/dom/htmlscriptelement.rs
index 7c9e3ebd42d..4d2cf061804 100644
--- a/components/script/dom/htmlscriptelement.rs
+++ b/components/script/dom/htmlscriptelement.rs
@@ -32,12 +32,15 @@ use html5ever::{LocalName, Prefix};
use ipc_channel::ipc;
use ipc_channel::router::ROUTER;
use js::jsval::UndefinedValue;
+use msg::constellation_msg::PipelineId;
use net_traits::request::{
CorsSettings, CredentialsMode, Destination, Referrer, RequestBuilder, RequestMode,
};
+use net_traits::ReferrerPolicy;
use net_traits::{FetchMetadata, FetchResponseListener, Metadata, NetworkError};
use net_traits::{ResourceFetchTiming, ResourceTimingType};
use servo_atoms::Atom;
+use servo_url::ImmutableOrigin;
use servo_url::ServoUrl;
use std::cell::Cell;
use std::fs::File;
@@ -292,19 +295,18 @@ impl ResourceTimingListener for ClassicContext {
impl PreInvoke for ClassicContext {}
-/// <https://html.spec.whatwg.org/multipage/#fetch-a-classic-script>
-fn fetch_a_classic_script(
- script: &HTMLScriptElement,
- kind: ExternalScriptKind,
+/// Steps 1-2 of <https://html.spec.whatwg.org/multipage/#fetch-a-classic-script>
+// This function is also used to prefetch a script in `script::dom::servoparser::prefetch`.
+pub(crate) fn script_fetch_request(
url: ServoUrl,
cors_setting: Option<CorsSettings>,
+ origin: ImmutableOrigin,
+ pipeline_id: PipelineId,
+ referrer: Referrer,
+ referrer_policy: Option<ReferrerPolicy>,
integrity_metadata: String,
- character_encoding: &'static Encoding,
-) {
- let doc = document_from_node(script);
-
- // Step 1, 2.
- let request = RequestBuilder::new(url.clone())
+) -> RequestBuilder {
+ RequestBuilder::new(url)
.destination(Destination::Script)
// https://html.spec.whatwg.org/multipage/#create-a-potential-cors-request
// Step 1
@@ -318,11 +320,34 @@ fn fetch_a_classic_script(
Some(CorsSettings::Anonymous) => CredentialsMode::CredentialsSameOrigin,
_ => CredentialsMode::Include,
})
- .origin(doc.origin().immutable().clone())
- .pipeline_id(Some(script.global().pipeline_id()))
- .referrer(Some(Referrer::ReferrerUrl(doc.url())))
- .referrer_policy(doc.get_referrer_policy())
- .integrity_metadata(integrity_metadata);
+ .origin(origin)
+ .pipeline_id(Some(pipeline_id))
+ .referrer(Some(referrer))
+ .referrer_policy(referrer_policy)
+ .integrity_metadata(integrity_metadata)
+}
+
+/// <https://html.spec.whatwg.org/multipage/#fetch-a-classic-script>
+fn fetch_a_classic_script(
+ script: &HTMLScriptElement,
+ kind: ExternalScriptKind,
+ url: ServoUrl,
+ cors_setting: Option<CorsSettings>,
+ integrity_metadata: String,
+ character_encoding: &'static Encoding,
+) {
+ let doc = document_from_node(script);
+
+ // Step 1, 2.
+ let request = script_fetch_request(
+ url.clone(),
+ cors_setting,
+ doc.origin().immutable().clone(),
+ script.global().pipeline_id(),
+ Referrer::ReferrerUrl(doc.url()),
+ doc.get_referrer_policy(),
+ integrity_metadata,
+ );
// TODO: Step 3, Add custom steps to perform fetch