Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implement document.URL & document.documentURI #1583

Merged
merged 1 commit into from Jan 30, 2014
Merged
Changes from all commits
Commits
File filter...
Filter file types
Jump to…
Jump to file
Failed to load files.

Always

Just for now

Implement document.URL & document.documentURI

  • Loading branch information
brunoabinader committed Jan 30, 2014
commit 43416ef91f03378f7b86ecee98aeea359cb9807c
@@ -25,6 +25,7 @@ use html::hubbub_html_parser::build_element_from_tag;
use layout_interface::{DocumentDamageLevel, ContentChangedDocumentDamage};
use servo_util::namespace::Null;

use extra::url::{Url, from_str};
use js::jsapi::{JSObject, JSContext, JSTracer};
use std::ascii::StrAsciiExt;
use std::cast;
@@ -89,7 +90,8 @@ pub struct Document {
doctype: DocumentType,
idmap: HashMap<DOMString, AbstractNode>,
implementation: Option<@mut DOMImplementation>,
content_type: DOMString
content_type: DOMString,
url: Url
}

impl Document {
@@ -110,7 +112,7 @@ impl Document {
abstract
}

pub fn new_inherited(window: @mut Window, doctype: DocumentType, content_type: Option<DOMString>) -> Document {
pub fn new_inherited(window: @mut Window, url: Option<Url>, doctype: DocumentType, content_type: Option<DOMString>) -> Document {
let node_type = match doctype {
HTML => HTMLDocumentTypeId,
SVG | XML => PlainDocumentTypeId
@@ -130,19 +132,23 @@ impl Document {
// http://dom.spec.whatwg.org/#concept-document-content-type
SVG | XML => ~"application/xml"
}
},
url: match url {
None => from_str("about:blank").unwrap(),
Some(_url) => _url
}
}
}

pub fn new(window: @mut Window, doctype: DocumentType, content_type: Option<DOMString>) -> AbstractDocument {
let document = Document::new_inherited(window, doctype, content_type);
pub fn new(window: @mut Window, url: Option<Url>, doctype: DocumentType, content_type: Option<DOMString>) -> AbstractDocument {
let document = Document::new_inherited(window, url, doctype, content_type);
Document::reflect_document(@mut document, window, DocumentBinding::Wrap)
}
}

impl Document {
pub fn Constructor(owner: @mut Window) -> Fallible<AbstractDocument> {
Ok(Document::new(owner, XML, None))
Ok(Document::new(owner, None, XML, None))
}
}

@@ -167,13 +173,24 @@ impl Reflectable for Document {
}

impl Document {
// http://dom.spec.whatwg.org/#dom-document-implementation
pub fn Implementation(&mut self) -> @mut DOMImplementation {
if self.implementation.is_none() {
self.implementation = Some(DOMImplementation::new(self.window));
}
self.implementation.unwrap()
}

// http://dom.spec.whatwg.org/#dom-document-url
pub fn URL(&self) -> DOMString {
self.url.to_str()
}

// http://dom.spec.whatwg.org/#dom-document-documenturi
pub fn DocumentURI(&self) -> DOMString {
self.URL()
}

// http://dom.spec.whatwg.org/#dom-document-content_type
pub fn ContentType(&self) -> DOMString {
self.content_type.clone()
@@ -63,7 +63,7 @@ impl DOMImplementation {
// http://dom.spec.whatwg.org/#dom-domimplementation-createhtmldocument
pub fn CreateHTMLDocument(&self, title: Option<DOMString>) -> AbstractDocument {
// Step 1-2.
let abstract_doc = HTMLDocument::new(self.owner);
let abstract_doc = HTMLDocument::new(self.owner, None);
assert!(abstract_doc.document().doctype == HTML);

let abstract_node = AbstractNode::from_document(abstract_doc);
@@ -38,7 +38,7 @@ impl DOMParser {
-> Fallible<AbstractDocument> {
match ty {
Text_html => {
Ok(HTMLDocument::new(self.owner))
Ok(HTMLDocument::new(self.owner, None))
}
Text_xml => {
Document::Constructor(self.owner)
@@ -9,6 +9,7 @@ use dom::htmlcollection::HTMLCollection;
use dom::window::Window;
use servo_util::namespace::Null;

use extra::url::Url;
use js::jsapi::JSTracer;
use std::str::eq_slice;

@@ -17,14 +18,14 @@ pub struct HTMLDocument {
}

impl HTMLDocument {
pub fn new_inherited(window: @mut Window) -> HTMLDocument {
pub fn new_inherited(window: @mut Window, url: Option<Url>) -> HTMLDocument {
HTMLDocument {
parent: Document::new_inherited(window, HTML, None)
parent: Document::new_inherited(window, url, HTML, None)
}
}

pub fn new(window: @mut Window) -> AbstractDocument {
let document = HTMLDocument::new_inherited(window);
pub fn new(window: @mut Window, url: Option<Url>) -> AbstractDocument {
let document = HTMLDocument::new_inherited(window, url);
Document::reflect_document(@mut document, window, HTMLDocumentBinding::Wrap)
}
}
@@ -26,8 +26,8 @@ enum VisibilityState { "hidden", "visible" };
[Constructor]
interface Document : Node {
readonly attribute DOMImplementation implementation;
// readonly attribute DOMString URL;
// readonly attribute DOMString documentURI;
readonly attribute DOMString URL;
readonly attribute DOMString documentURI;
// readonly attribute DOMString compatMode;
// readonly attribute DOMString characterSet;
readonly attribute DOMString contentType;
@@ -690,7 +690,7 @@ impl ScriptTask {
// Parse HTML.
//
// Note: We can parse the next document in parallel with any previous documents.
let document = HTMLDocument::new(window);
let document = HTMLDocument::new(window, Some(url.clone()));
let html_parsing_result = hubbub_html_parser::parse_html(cx.ptr,
document,
url.clone(),
@@ -0,0 +1,32 @@
<!doctype html>
<html>
<head>
<title></title>
<script src="harness.js"></script>
<script>
// test1: URL & documentURI
{
isnot(document.URL, null, "test1-0, URL & documentURI");
isnot(document.documentURI, null, "test1-1, URL & documentURI");
is(document.URL, document.documentURI, "test1-2, URL & documentURI");
}

// test2: new document
{
var doc = new Document();
is(doc.URL, "about:blank", "test2-0, new document");
}

// test3: current document
{
var url = document.URL.split("/");
is(url[0], "file:", "test3-0, current document");
is(url[url.length-1], "test_document_url.html", "test3-1, current document");
}

finish();
</script>
</head>
<body>
</body>
</html>
ProTip! Use n and p to navigate between commits in a pull request.
You can’t perform that action at this time.