diff options
author | Nazım Can Altınova <canaltinova@gmail.com> | 2016-07-12 23:29:22 +0300 |
---|---|---|
committer | Nazım Can Altınova <canaltinova@gmail.com> | 2016-07-14 21:35:39 +0300 |
commit | d6c1f7b5e3909d9b11544dae4b4c7d0793fef5f7 (patch) | |
tree | bc74b622691848fc5754a97eb6d1ae4819d9aff9 /components/script | |
parent | 9e010a8aec7f99fd15bf6334f84c39a3229d115f (diff) | |
download | servo-d6c1f7b5e3909d9b11544dae4b4c7d0793fef5f7.tar.gz servo-d6c1f7b5e3909d9b11544dae4b4c7d0793fef5f7.zip |
Implement Document.referrer
Diffstat (limited to 'components/script')
-rw-r--r-- | components/script/dom/document.rs | 26 | ||||
-rw-r--r-- | components/script/dom/domimplementation.rs | 3 | ||||
-rw-r--r-- | components/script/dom/domparser.rs | 6 | ||||
-rw-r--r-- | components/script/dom/node.rs | 2 | ||||
-rw-r--r-- | components/script/dom/webidls/Document.webidl | 2 | ||||
-rw-r--r-- | components/script/dom/xmldocument.rs | 3 | ||||
-rw-r--r-- | components/script/dom/xmlhttprequest.rs | 4 | ||||
-rw-r--r-- | components/script/parse/html.rs | 3 | ||||
-rw-r--r-- | components/script/script_thread.rs | 8 |
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 { |