mirror of
https://github.com/servo/servo.git
synced 2025-08-06 14:10:11 +01:00
Implement referrerPolicy for HTMLLinkElement and HTMLScriptElement
This commit is contained in:
parent
02af8952eb
commit
a999850b24
15 changed files with 50 additions and 668 deletions
|
@ -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")))
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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
|
||||
};
|
||||
|
|
|
@ -25,6 +25,8 @@ interface HTMLScriptElement : HTMLElement {
|
|||
attribute DOMString text;
|
||||
[CEReactions]
|
||||
attribute DOMString integrity;
|
||||
[CEReactions]
|
||||
attribute DOMString referrerPolicy;
|
||||
|
||||
// also has obsolete members
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue