@@ -2030,6 +2030,30 @@ impl Element {
20302030 self . handle_attribute_changes ( cx, AttrRef :: Dom ( attr) , None , Some ( & * attr. value ( ) ) , reason) ;
20312031 }
20322032
2033+ pub ( crate ) fn get_attribute_string_value ( & self , local_name : & LocalName ) -> Option < String > {
2034+ debug_assert_eq ! (
2035+ * local_name,
2036+ local_name. to_ascii_lowercase( ) ,
2037+ "All namespace-less attribute accesses should use a lowercase ASCII name"
2038+ ) ;
2039+
2040+ self . get_attribute_string_value_with_namespace ( & ns ! ( ) , local_name)
2041+ }
2042+
2043+ pub ( crate ) fn get_attribute_string_value_with_namespace (
2044+ & self ,
2045+ namespace : & Namespace ,
2046+ local_name : & LocalName ,
2047+ ) -> Option < String > {
2048+ self . attrs
2049+ . borrow ( )
2050+ . iter ( )
2051+ . find ( |attribute| {
2052+ attribute. local_name ( ) == local_name && attribute. namespace ( ) == namespace
2053+ } )
2054+ . map ( |attribute| String :: from ( & * * attribute. value ( ) ) )
2055+ }
2056+
20332057 /// This is the inner logic for:
20342058 /// <https://dom.spec.whatwg.org/#concept-element-attributes-get-by-namespace>
20352059 ///
@@ -5104,9 +5128,9 @@ impl TagName {
51045128/// <https://html.spec.whatwg.org/multipage/#cors-settings-attribute>
51055129pub ( crate ) fn reflect_cross_origin_attribute ( element : & Element ) -> Option < DOMString > {
51065130 element
5107- . get_attribute ( & local_name ! ( "crossorigin" ) )
5108- . map ( |attribute | {
5109- let value = attribute . value ( ) . to_ascii_lowercase ( ) ;
5131+ . get_attribute_string_value ( & local_name ! ( "crossorigin" ) )
5132+ . map ( |value | {
5133+ let value = value. to_ascii_lowercase ( ) ;
51105134 if value == "anonymous" || value == "use-credentials" {
51115135 DOMString :: from ( value)
51125136 } else {
@@ -5131,9 +5155,9 @@ pub(crate) fn set_cross_origin_attribute(
51315155/// <https://html.spec.whatwg.org/multipage/#referrer-policy-attribute>
51325156pub ( crate ) fn reflect_referrer_policy_attribute ( element : & Element ) -> DOMString {
51335157 element
5134- . get_attribute ( & local_name ! ( "referrerpolicy" ) )
5135- . map ( |attribute | {
5136- let value = attribute . value ( ) . to_ascii_lowercase ( ) ;
5158+ . get_attribute_string_value ( & local_name ! ( "referrerpolicy" ) )
5159+ . map ( |value | {
5160+ let value = value. to_ascii_lowercase ( ) ;
51375161 if value == "no-referrer" ||
51385162 value == "no-referrer-when-downgrade" ||
51395163 value == "same-origin" ||
@@ -5153,23 +5177,23 @@ pub(crate) fn reflect_referrer_policy_attribute(element: &Element) -> DOMString
51535177
51545178pub ( crate ) fn referrer_policy_for_element ( element : & Element ) -> ReferrerPolicy {
51555179 element
5156- . get_attribute ( & local_name ! ( "referrerpolicy" ) )
5157- . map ( |attribute | ReferrerPolicy :: from ( & * * attribute . value ( ) ) )
5180+ . get_attribute_string_value ( & local_name ! ( "referrerpolicy" ) )
5181+ . map ( |value | ReferrerPolicy :: from ( value. as_ref ( ) ) )
51585182 . unwrap_or ( element. owner_document ( ) . get_referrer_policy ( ) )
51595183}
51605184
51615185pub ( crate ) fn cors_setting_for_element ( element : & Element ) -> Option < CorsSettings > {
51625186 element
5163- . get_attribute ( & local_name ! ( "crossorigin" ) )
5164- . map ( |attribute | CorsSettings :: from_enumerated_attribute ( & attribute . value ( ) ) )
5187+ . get_attribute_string_value ( & local_name ! ( "crossorigin" ) )
5188+ . map ( |value | CorsSettings :: from_enumerated_attribute ( value. as_ref ( ) ) )
51655189}
51665190
51675191/// <https://html.spec.whatwg.org/multipage/#cors-settings-attribute-credentials-mode>
51685192pub ( crate ) fn cors_settings_attribute_credential_mode ( element : & Element ) -> CredentialsMode {
51695193 element
5170- . get_attribute ( & local_name ! ( "crossorigin" ) )
5171- . map ( |attr | {
5172- if attr . value ( ) . eq_ignore_ascii_case ( "use-credentials" ) {
5194+ . get_attribute_string_value ( & local_name ! ( "crossorigin" ) )
5195+ . map ( |value | {
5196+ if value. eq_ignore_ascii_case ( "use-credentials" ) {
51735197 CredentialsMode :: Include
51745198 } else {
51755199 // The attribute's invalid value default and empty value default are both the Anonymous state.
0 commit comments