diff options
Diffstat (limited to 'components/script/dom/element.rs')
-rw-r--r-- | components/script/dom/element.rs | 33 |
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!() + } + }) +} |