aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/element.rs
diff options
context:
space:
mode:
Diffstat (limited to 'components/script/dom/element.rs')
-rw-r--r--components/script/dom/element.rs33
1 files changed, 33 insertions, 0 deletions
diff --git a/components/script/dom/element.rs b/components/script/dom/element.rs
index be1e0eca42e..bd3925c04f9 100644
--- a/components/script/dom/element.rs
+++ b/components/script/dom/element.rs
@@ -79,6 +79,7 @@ use html5ever::serialize::TraversalScope;
use html5ever::serialize::TraversalScope::{ChildrenOnly, IncludeNode};
use html5ever_atoms::{Prefix, LocalName, Namespace, QualName};
use js::jsapi::{HandleValue, JSAutoCompartment};
+use net_traits::request::CorsSettings;
use parking_lot::RwLock;
use ref_filter_map::ref_filter_map;
use script_layout_interface::message::ReflowQueryType;
@@ -2897,3 +2898,35 @@ impl Runnable for ElementPerformFullscreenExit {
promise.resolve(promise.global().get_cx(), HandleValue::undefined());
}
}
+
+pub fn reflect_cross_origin_attribute(element: &Element) -> Option<DOMString> {
+ let attr = element.get_attribute(&ns!(), &local_name!("crossorigin"));
+
+ if let Some(mut val) = attr.map(|v| v.Value()) {
+ val.make_ascii_lowercase();
+ if val == "anonymous" || val == "use-credentials" {
+ return Some(val);
+ }
+ return Some(DOMString::from("anonymous"));
+ }
+ None
+}
+
+pub fn set_cross_origin_attribute(element: &Element, value: Option<DOMString>) {
+ match value {
+ Some(val) => element.set_string_attribute(&local_name!("crossorigin"), val),
+ None => {
+ element.remove_attribute(&ns!(), &local_name!("crossorigin"));
+ }
+ }
+}
+
+pub fn cors_setting_for_element(element: &Element) -> Option<CorsSettings> {
+ reflect_cross_origin_attribute(element).map_or(None, |attr| {
+ match &*attr {
+ "anonymous" => Some(CorsSettings::Anonymous),
+ "use-credentials" => Some(CorsSettings::UseCredentials),
+ _ => unreachable!()
+ }
+ })
+}