Implement referrerPolicy for HTMLLinkElement and HTMLScriptElement

This commit is contained in:
YUAN LYU 2020-12-01 00:37:16 -05:00
parent 02af8952eb
commit a999850b24
15 changed files with 50 additions and 668 deletions

View file

@ -3773,6 +3773,27 @@ pub fn set_cross_origin_attribute(element: &Element, value: Option<DOMString>) {
}
}
pub fn reflect_referrer_policy_attribute(element: &Element) -> DOMString {
let attr =
element.get_attribute_by_name(DOMString::from_string(String::from("referrerpolicy")));
if let Some(mut val) = attr.map(|v| v.Value()) {
val.make_ascii_lowercase();
if val == "no-referrer" ||
val == "no-referrer-when-downgrade" ||
val == "same-origin" ||
val == "origin" ||
val == "strict-origin" ||
val == "origin-when-cross-origin" ||
val == "strict-origin-when-cross-origin" ||
val == "unsafe-url"
{
return val;
}
}
return DOMString::new();
}
pub(crate) fn referrer_policy_for_element(element: &Element) -> Option<ReferrerPolicy> {
element
.get_attribute_by_name(DOMString::from_string(String::from("referrerpolicy")))

View file

@ -13,7 +13,8 @@ use crate::dom::cssstylesheet::CSSStyleSheet;
use crate::dom::document::Document;
use crate::dom::domtokenlist::DOMTokenList;
use crate::dom::element::{
cors_setting_for_element, reflect_cross_origin_attribute, set_cross_origin_attribute,
cors_setting_for_element, reflect_cross_origin_attribute, reflect_referrer_policy_attribute,
set_cross_origin_attribute,
};
use crate::dom::element::{AttributeMutation, Element, ElementCreator};
use crate::dom::htmlelement::HTMLElement;
@ -490,6 +491,14 @@ impl HTMLLinkElementMethods for HTMLLinkElement {
set_cross_origin_attribute(self.upcast::<Element>(), value);
}
// https://html.spec.whatwg.org/multipage/#dom-link-referrerpolicy
fn ReferrerPolicy(&self) -> DOMString {
reflect_referrer_policy_attribute(self.upcast::<Element>())
}
// https://html.spec.whatwg.org/multipage/#dom-link-referrerpolicy
make_setter!(SetReferrerPolicy, "referrerpolicy");
// https://drafts.csswg.org/cssom/#dom-linkstyle-sheet
fn GetSheet(&self) -> Option<DomRoot<DOMStyleSheet>> {
self.get_cssom_stylesheet().map(DomRoot::upcast)

View file

@ -16,7 +16,8 @@ use crate::dom::bindings::str::{DOMString, USVString};
use crate::dom::bindings::trace::RootedTraceableBox;
use crate::dom::document::Document;
use crate::dom::element::{
cors_setting_for_element, reflect_cross_origin_attribute, set_cross_origin_attribute,
cors_setting_for_element, referrer_policy_for_element, reflect_cross_origin_attribute,
reflect_referrer_policy_attribute, set_cross_origin_attribute,
};
use crate::dom::element::{AttributeMutation, Element, ElementCreator};
use crate::dom::event::{Event, EventBubbles, EventCancelable, EventStatus};
@ -51,8 +52,10 @@ use msg::constellation_msg::PipelineId;
use net_traits::request::{
CorsSettings, CredentialsMode, Destination, ParserMetadata, RequestBuilder,
};
use net_traits::{FetchMetadata, FetchResponseListener, Metadata, NetworkError};
use net_traits::{ResourceFetchTiming, ResourceTimingType};
use net_traits::{
FetchMetadata, FetchResponseListener, Metadata, NetworkError, ResourceFetchTiming,
ResourceTimingType,
};
use servo_atoms::Atom;
use servo_config::pref;
use servo_url::ImmutableOrigin;
@ -717,7 +720,7 @@ impl HTMLScriptElement {
integrity_metadata: integrity_metadata.to_owned(),
parser_metadata,
referrer: self.global().get_referrer(),
referrer_policy: doc.get_referrer_policy(),
referrer_policy: referrer_policy_for_element(self.upcast::<Element>()),
credentials_mode: module_credentials_mode,
};
@ -1352,6 +1355,14 @@ impl HTMLScriptElementMethods for HTMLScriptElement {
set_cross_origin_attribute(self.upcast::<Element>(), value);
}
// https://html.spec.whatwg.org/multipage/#dom-script-referrerpolicy
fn ReferrerPolicy(&self) -> DOMString {
reflect_referrer_policy_attribute(self.upcast::<Element>())
}
// https://html.spec.whatwg.org/multipage/#dom-script-referrerpolicy
make_setter!(SetReferrerPolicy, "referrerpolicy");
// https://html.spec.whatwg.org/multipage/#dom-script-text
fn Text(&self) -> DOMString {
self.upcast::<Node>().child_text_content()

View file

@ -22,7 +22,8 @@ interface HTMLLinkElement : HTMLElement {
attribute DOMString type;
[CEReactions]
attribute DOMString integrity;
// [SameObject, PutForwards=value] readonly attribute DOMTokenList sizes;
[CEReactions]
attribute DOMString referrerPolicy;
// also has obsolete members
};

View file

@ -25,6 +25,8 @@ interface HTMLScriptElement : HTMLElement {
attribute DOMString text;
[CEReactions]
attribute DOMString integrity;
[CEReactions]
attribute DOMString referrerPolicy;
// also has obsolete members
};