aboutsummaryrefslogtreecommitdiffstats
path: root/components/net_traits/request.rs
diff options
context:
space:
mode:
Diffstat (limited to 'components/net_traits/request.rs')
-rw-r--r--components/net_traits/request.rs27
1 files changed, 14 insertions, 13 deletions
diff --git a/components/net_traits/request.rs b/components/net_traits/request.rs
index c15063c7a70..cc67ca0cd27 100644
--- a/components/net_traits/request.rs
+++ b/components/net_traits/request.rs
@@ -37,8 +37,12 @@ pub enum Origin {
#[derive(Clone, Debug, Deserialize, MallocSizeOf, PartialEq, Serialize)]
pub enum Referrer {
NoReferrer,
- /// Default referrer if nothing is specified
- Client,
+ /// Contains the url that "client" would be resolved to. See
+ /// [https://w3c.github.io/webappsec-referrer-policy/#determine-requests-referrer](https://w3c.github.io/webappsec-referrer-policy/#determine-requests-referrer)
+ ///
+ /// If you are unsure you should probably use
+ /// [`GlobalScope::get_referrer`](https://doc.servo.org/script/dom/globalscope/struct.GlobalScope.html#method.get_referrer)
+ Client(ServoUrl),
ReferrerUrl(ServoUrl),
}
@@ -231,7 +235,7 @@ pub struct RequestBuilder {
pub use_url_credentials: bool,
pub origin: ImmutableOrigin,
// XXXManishearth these should be part of the client object
- pub referrer: Option<Referrer>,
+ pub referrer: Referrer,
pub referrer_policy: Option<ReferrerPolicy>,
pub pipeline_id: Option<PipelineId>,
pub redirect_mode: RedirectMode,
@@ -249,7 +253,7 @@ pub struct RequestBuilder {
}
impl RequestBuilder {
- pub fn new(url: ServoUrl) -> RequestBuilder {
+ pub fn new(url: ServoUrl, referrer: Referrer) -> RequestBuilder {
RequestBuilder {
method: Method::GET,
url: url,
@@ -265,7 +269,7 @@ impl RequestBuilder {
credentials_mode: CredentialsMode::Omit,
use_url_credentials: false,
origin: ImmutableOrigin::new_opaque(),
- referrer: None,
+ referrer: referrer,
referrer_policy: None,
pipeline_id: None,
redirect_mode: RedirectMode::Follow,
@@ -338,11 +342,6 @@ impl RequestBuilder {
self
}
- pub fn referrer(mut self, referrer: Option<Referrer>) -> RequestBuilder {
- self.referrer = referrer;
- self
- }
-
pub fn referrer_policy(mut self, referrer_policy: Option<ReferrerPolicy>) -> RequestBuilder {
self.referrer_policy = referrer_policy;
self
@@ -377,6 +376,7 @@ impl RequestBuilder {
let mut request = Request::new(
self.url.clone(),
Some(Origin::Origin(self.origin)),
+ self.referrer,
self.pipeline_id,
self.https_state,
);
@@ -393,7 +393,6 @@ impl RequestBuilder {
request.credentials_mode = self.credentials_mode;
request.use_url_credentials = self.use_url_credentials;
request.cache_mode = self.cache_mode;
- request.referrer = self.referrer.unwrap_or(Referrer::Client);
request.referrer_policy = self.referrer_policy;
request.redirect_mode = self.redirect_mode;
let mut url_list = self.url_list;
@@ -484,6 +483,7 @@ impl Request {
pub fn new(
url: ServoUrl,
origin: Option<Origin>,
+ referrer: Referrer,
pipeline_id: Option<PipelineId>,
https_state: HttpsState,
) -> Request {
@@ -500,7 +500,7 @@ impl Request {
initiator: Initiator::None,
destination: Destination::None,
origin: origin.unwrap_or(Origin::Client),
- referrer: Referrer::Client,
+ referrer: referrer,
referrer_policy: None,
pipeline_id: pipeline_id,
synchronous: false,
@@ -569,7 +569,8 @@ impl Request {
impl Referrer {
pub fn to_url(&self) -> Option<&ServoUrl> {
match *self {
- Referrer::NoReferrer | Referrer::Client => None,
+ Referrer::NoReferrer => None,
+ Referrer::Client(ref url) => Some(url),
Referrer::ReferrerUrl(ref url) => Some(url),
}
}