aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/fetch.rs
diff options
context:
space:
mode:
authorJosh Matthews <josh@joshmatthews.net>2019-10-03 17:36:02 -0400
committerJosh Matthews <josh@joshmatthews.net>2019-10-04 15:08:40 -0400
commit1df8d57dc6adcf56c22b45053b3d2eca904d17d3 (patch)
treece2ba8d6672925a95d551a0ece8ee9e279332e3e /components/script/fetch.rs
parent583536c9406e685405d5b28da99dd8cab94c7d66 (diff)
downloadservo-1df8d57dc6adcf56c22b45053b3d2eca904d17d3.tar.gz
servo-1df8d57dc6adcf56c22b45053b3d2eca904d17d3.zip
Support CORS attributes for image elements.
Diffstat (limited to 'components/script/fetch.rs')
-rw-r--r--components/script/fetch.rs31
1 files changed, 30 insertions, 1 deletions
diff --git a/components/script/fetch.rs b/components/script/fetch.rs
index 0b093c5501d..8c31f24f260 100644
--- a/components/script/fetch.rs
+++ b/components/script/fetch.rs
@@ -26,7 +26,9 @@ use crate::network_listener::{
use crate::task_source::TaskSourceName;
use ipc_channel::ipc;
use ipc_channel::router::ROUTER;
-use net_traits::request::RequestBuilder;
+use net_traits::request::{
+ CorsSettings, CredentialsMode, Destination, RequestBuilder, RequestMode,
+};
use net_traits::request::{Request as NetTraitsRequest, ServiceWorkersMode};
use net_traits::CoreResourceMsg::Fetch as NetTraitsFetch;
use net_traits::{CoreResourceMsg, CoreResourceThread, FetchResponseMsg};
@@ -124,6 +126,7 @@ fn request_init_from_request(request: NetTraitsRequest) -> RequestBuilder {
integrity_metadata: "".to_owned(),
url_list: vec![],
parser_metadata: request.parser_metadata,
+ initiator: request.initiator,
}
}
@@ -339,3 +342,29 @@ pub fn load_whole_resource(
}
}
}
+
+/// https://html.spec.whatwg.org/multipage/#create-a-potential-cors-request
+pub(crate) fn create_a_potential_CORS_request(
+ url: ServoUrl,
+ destination: Destination,
+ cors_setting: Option<CorsSettings>,
+ same_origin_fallback: Option<bool>,
+) -> RequestBuilder {
+ RequestBuilder::new(url)
+ // https://html.spec.whatwg.org/multipage/#create-a-potential-cors-request
+ // Step 1
+ .mode(match cors_setting {
+ Some(_) => RequestMode::CorsMode,
+ None if same_origin_fallback == Some(true) => RequestMode::SameOrigin,
+ None => RequestMode::NoCors,
+ })
+ // https://html.spec.whatwg.org/multipage/#create-a-potential-cors-request
+ // Step 3-4
+ .credentials_mode(match cors_setting {
+ Some(CorsSettings::Anonymous) => CredentialsMode::CredentialsSameOrigin,
+ _ => CredentialsMode::Include,
+ })
+ // Step 5
+ .destination(destination)
+ .use_url_credentials(true)
+}