Implement Document.referrer

This commit is contained in:
Nazım Can Altınova 2016-07-12 23:29:22 +03:00
parent 9e010a8aec
commit d6c1f7b5e3
17 changed files with 55 additions and 32 deletions

View file

@ -239,6 +239,8 @@ pub struct Document {
origin: Origin,
/// https://w3c.github.io/webappsec-referrer-policy/#referrer-policy-states
referrer_policy: Cell<Option<ReferrerPolicy>>,
/// https://html.spec.whatwg.org/multipage/#dom-document-referrer
referrer: Option<String>,
}
#[derive(JSTraceable, HeapSizeOf)]
@ -1629,7 +1631,8 @@ impl Document {
content_type: Option<DOMString>,
last_modified: Option<String>,
source: DocumentSource,
doc_loader: DocumentLoader)
doc_loader: DocumentLoader,
referrer: Option<String>)
-> Document {
let url = url.unwrap_or_else(|| Url::parse("about:blank").unwrap());
@ -1716,6 +1719,7 @@ impl Document {
origin: origin,
//TODO - setting this for now so no Referer header set
referrer_policy: Cell::new(Some(ReferrerPolicy::NoReferrer)),
referrer: referrer,
}
}
@ -1732,7 +1736,8 @@ impl Document {
None,
None,
DocumentSource::NotFromParser,
docloader))
docloader,
None))
}
pub fn new(window: &Window,
@ -1742,7 +1747,8 @@ impl Document {
content_type: Option<DOMString>,
last_modified: Option<String>,
source: DocumentSource,
doc_loader: DocumentLoader)
doc_loader: DocumentLoader,
referrer: Option<String>)
-> Root<Document> {
let document = reflect_dom_object(box Document::new_inherited(window,
browsing_context,
@ -1751,7 +1757,8 @@ impl Document {
content_type,
last_modified,
source,
doc_loader),
doc_loader,
referrer),
GlobalRef::Window(window),
DocumentBinding::Wrap);
{
@ -1815,7 +1822,8 @@ impl Document {
None,
None,
DocumentSource::NotFromParser,
DocumentLoader::new(&self.loader()));
DocumentLoader::new(&self.loader()),
None);
new_doc.appropriate_template_contents_owner_document.set(Some(&new_doc));
new_doc
})
@ -1934,6 +1942,14 @@ impl DocumentMethods for Document {
}
}
// https://html.spec.whatwg.org/multipage/#dom-document-referrer
fn Referrer(&self) -> DOMString {
match self.referrer {
Some(ref referrer) => DOMString::from(referrer.to_string()),
None => DOMString::new()
}
}
// https://dom.spec.whatwg.org/#dom-document-documenturi
fn DocumentURI(&self) -> USVString {
self.URL()

View file

@ -129,7 +129,8 @@ impl DOMImplementationMethods for DOMImplementation {
None,
None,
DocumentSource::NotFromParser,
loader);
loader,
None);
{
// Step 3.

View file

@ -68,7 +68,8 @@ impl DOMParserMethods for DOMParser {
Some(content_type),
None,
DocumentSource::FromParser,
loader);
loader,
None);
parse_html(document.r(), s, url, ParseContext::Owner(None));
document.set_ready_state(DocumentReadyState::Complete);
Ok(document)
@ -82,7 +83,8 @@ impl DOMParserMethods for DOMParser {
Some(content_type),
None,
DocumentSource::NotFromParser,
loader);
loader,
None);
parse_xml(document.r(), s, url, xml::ParseContext::Owner(None));
Ok(document)
}

View file

@ -1721,7 +1721,7 @@ impl Node {
let document = Document::new(window, None,
Some((*document.url()).clone()),
is_html_doc, None,
None, DocumentSource::NotFromParser, loader);
None, DocumentSource::NotFromParser, loader, None);
Root::upcast::<Node>(document)
},
NodeTypeId::Element(..) => {

View file

@ -82,7 +82,7 @@ partial /*sealed*/ interface Document {
[/*PutForwards=href, */Unforgeable]
readonly attribute Location? location;
readonly attribute DOMString domain;
// readonly attribute DOMString referrer;
readonly attribute DOMString referrer;
[Throws]
attribute DOMString cookie;
readonly attribute DOMString lastModified;

View file

@ -41,7 +41,8 @@ impl XMLDocument {
content_type,
last_modified,
source,
doc_loader),
doc_loader,
None),
}
}

View file

@ -1234,7 +1234,9 @@ impl XMLHttpRequest {
is_html_document,
content_type,
None,
DocumentSource::FromParser, docloader)
DocumentSource::FromParser,
docloader,
None)
}
fn filter_response_headers(&self) -> Headers {