aboutsummaryrefslogtreecommitdiffstats
path: root/components/script
diff options
context:
space:
mode:
authorNazım Can Altınova <canaltinova@gmail.com>2016-07-12 23:29:22 +0300
committerNazım Can Altınova <canaltinova@gmail.com>2016-07-14 21:35:39 +0300
commitd6c1f7b5e3909d9b11544dae4b4c7d0793fef5f7 (patch)
treebc74b622691848fc5754a97eb6d1ae4819d9aff9 /components/script
parent9e010a8aec7f99fd15bf6334f84c39a3229d115f (diff)
downloadservo-d6c1f7b5e3909d9b11544dae4b4c7d0793fef5f7.tar.gz
servo-d6c1f7b5e3909d9b11544dae4b4c7d0793fef5f7.zip
Implement Document.referrer
Diffstat (limited to 'components/script')
-rw-r--r--components/script/dom/document.rs26
-rw-r--r--components/script/dom/domimplementation.rs3
-rw-r--r--components/script/dom/domparser.rs6
-rw-r--r--components/script/dom/node.rs2
-rw-r--r--components/script/dom/webidls/Document.webidl2
-rw-r--r--components/script/dom/xmldocument.rs3
-rw-r--r--components/script/dom/xmlhttprequest.rs4
-rw-r--r--components/script/parse/html.rs3
-rw-r--r--components/script/script_thread.rs8
9 files changed, 43 insertions, 14 deletions
diff --git a/components/script/dom/document.rs b/components/script/dom/document.rs
index 68cd619ba43..1c3eccbf06c 100644
--- a/components/script/dom/document.rs
+++ b/components/script/dom/document.rs
@@ -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()
diff --git a/components/script/dom/domimplementation.rs b/components/script/dom/domimplementation.rs
index 30974ea2f46..1e29ce324b3 100644
--- a/components/script/dom/domimplementation.rs
+++ b/components/script/dom/domimplementation.rs
@@ -129,7 +129,8 @@ impl DOMImplementationMethods for DOMImplementation {
None,
None,
DocumentSource::NotFromParser,
- loader);
+ loader,
+ None);
{
// Step 3.
diff --git a/components/script/dom/domparser.rs b/components/script/dom/domparser.rs
index 346b8f80170..e47492d87e5 100644
--- a/components/script/dom/domparser.rs
+++ b/components/script/dom/domparser.rs
@@ -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)
}
diff --git a/components/script/dom/node.rs b/components/script/dom/node.rs
index 811716088b6..03ec5496efa 100644
--- a/components/script/dom/node.rs
+++ b/components/script/dom/node.rs
@@ -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(..) => {
diff --git a/components/script/dom/webidls/Document.webidl b/components/script/dom/webidls/Document.webidl
index 6b365378c92..81a6c032df7 100644
--- a/components/script/dom/webidls/Document.webidl
+++ b/components/script/dom/webidls/Document.webidl
@@ -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;
diff --git a/components/script/dom/xmldocument.rs b/components/script/dom/xmldocument.rs
index b291c912089..52ebce5f55c 100644
--- a/components/script/dom/xmldocument.rs
+++ b/components/script/dom/xmldocument.rs
@@ -41,7 +41,8 @@ impl XMLDocument {
content_type,
last_modified,
source,
- doc_loader),
+ doc_loader,
+ None),
}
}
diff --git a/components/script/dom/xmlhttprequest.rs b/components/script/dom/xmlhttprequest.rs
index 148a51c8c6b..4a6dba72f6f 100644
--- a/components/script/dom/xmlhttprequest.rs
+++ b/components/script/dom/xmlhttprequest.rs
@@ -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 {
diff --git a/components/script/parse/html.rs b/components/script/parse/html.rs
index 87aa7a6b293..e1109cfc008 100644
--- a/components/script/parse/html.rs
+++ b/components/script/parse/html.rs
@@ -279,7 +279,8 @@ pub fn parse_html_fragment(context_node: &Node,
IsHTMLDocument::HTMLDocument,
None, None,
DocumentSource::FromParser,
- loader);
+ loader,
+ None);
// Step 2.
document.set_quirks_mode(context_document.quirks_mode());
diff --git a/components/script/script_thread.rs b/components/script/script_thread.rs
index e116ace1be4..c99a9985c78 100644
--- a/components/script/script_thread.rs
+++ b/components/script/script_thread.rs
@@ -1704,6 +1704,11 @@ impl ScriptThread {
_ => IsHTMLDocument::HTMLDocument,
};
+ let referrer = match metadata.referrer {
+ Some(ref referrer) => Some(referrer.clone().into_string()),
+ None => None,
+ };
+
let document = Document::new(window.r(),
Some(&browsing_context),
Some(final_url.clone()),
@@ -1711,7 +1716,8 @@ impl ScriptThread {
content_type,
last_modified,
DocumentSource::FromParser,
- loader);
+ loader,
+ referrer);
if using_new_context {
browsing_context.init(&document);
} else {