diff options
Diffstat (limited to 'src/components/script/dom')
-rw-r--r-- | src/components/script/dom/bindings/codegen/CodegenRust.py | 11 | ||||
-rw-r--r-- | src/components/script/dom/bindings/trace.rs | 2 | ||||
-rw-r--r-- | src/components/script/dom/document.rs | 16 | ||||
-rw-r--r-- | src/components/script/dom/htmlcanvaselement.rs | 7 | ||||
-rw-r--r-- | src/components/script/dom/htmlimageelement.rs | 4 | ||||
-rw-r--r-- | src/components/script/dom/node.rs | 16 | ||||
-rw-r--r-- | src/components/script/dom/webidls/Document.webidl | 1 |
7 files changed, 39 insertions, 18 deletions
diff --git a/src/components/script/dom/bindings/codegen/CodegenRust.py b/src/components/script/dom/bindings/codegen/CodegenRust.py index 28b8809380d..1666589940e 100644 --- a/src/components/script/dom/bindings/codegen/CodegenRust.py +++ b/src/components/script/dom/bindings/codegen/CodegenRust.py @@ -377,7 +377,8 @@ class CGMethodCall(CGThing): overloadCGThings.append( CGSwitch("argcount", argCountCases, - CGGeneric("return 0; //XXXjdm throw stuff\n//return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, %s);\n" % methodName))) + CGGeneric("throw_type_error(cx, \"Not enough arguments to %s.\");\n" + "return 0;\n" % methodName))) #XXXjdm Avoid unreachable statement warnings #overloadCGThings.append( # CGGeneric('fail!("We have an always-returning default case");\n' @@ -520,7 +521,7 @@ def getJSToNativeConversionTemplate(type, descriptorProvider, failureCode=None, return CGWrapper( CGGeneric( failureCode or - ('//XXXjdm ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "%s", "%s")\n;' + ('throw_type_error(cx, \"%s does not implement interface %s.\");\n' '%s' % (firstCap(sourceDescription), typeName, exceptionCode))), post="\n") @@ -528,7 +529,7 @@ def getJSToNativeConversionTemplate(type, descriptorProvider, failureCode=None, return CGWrapper( CGGeneric( failureCode or - ('//XXXjdm ThrowErrorMessage(cx, MSG_NOT_CALLABLE, "%s");\n' + ('throw_type_error(cx, \"%s is not callable.\");\n' '%s' % (firstCap(sourceDescription), exceptionCode))), post="\n") @@ -2656,7 +2657,7 @@ class CGStaticSetter(CGAbstractStaticBindingMethod): checkForArg = CGGeneric( "let argv = JS_ARGV(cx, vp);\n" "if (argc == 0) {\n" - " // XXXjdmreturn ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, \"%s setter\");\n" + " throw_type_error(cx, \"Not enough arguments to %s setter.\");\n" " return 0;\n" "}\n" % self.attr.identifier.name) call = CGSetterCall([], self.attr.type, nativeName, self.descriptor, @@ -4311,7 +4312,7 @@ class CGDictionary(CGThing): " } else if val.is_object() {\n" " val.to_object()\n" " } else {\n" - " //XXXjdm throw properly here\n" + " throw_type_error(cx, \"Value not an object.\");\n" " return Err(());\n" " };\n" " Ok(${selfName} {\n" diff --git a/src/components/script/dom/bindings/trace.rs b/src/components/script/dom/bindings/trace.rs index f26af087796..42d944e9781 100644 --- a/src/components/script/dom/bindings/trace.rs +++ b/src/components/script/dom/bindings/trace.rs @@ -68,7 +68,7 @@ pub trait JSTraceable { /// Trace a `JSVal`. pub fn trace_jsval(tracer: *mut JSTracer, description: &str, val: JSVal) { - if !val.is_gcthing() { + if !val.is_markable() { return; } diff --git a/src/components/script/dom/document.rs b/src/components/script/dom/document.rs index 81fc5c62fbd..503f618384d 100644 --- a/src/components/script/dom/document.rs +++ b/src/components/script/dom/document.rs @@ -59,6 +59,7 @@ use std::collections::hashmap::HashMap; use std::ascii::StrAsciiExt; use std::cell::{Cell, RefCell}; use url::Url; +use time; #[deriving(PartialEq,Encodable)] pub enum IsHTMLDocument { @@ -74,6 +75,7 @@ pub struct Document { idmap: Traceable<RefCell<HashMap<DOMString, Vec<JS<Element>>>>>, implementation: Cell<Option<JS<DOMImplementation>>>, content_type: DOMString, + last_modified: Traceable<RefCell<Option<DOMString>>>, pub encoding_name: Traceable<RefCell<DOMString>>, pub is_html_document: bool, url: Untraceable<Url>, @@ -146,6 +148,7 @@ pub trait DocumentHelpers { fn url<'a>(&'a self) -> &'a Url; fn quirks_mode(&self) -> QuirksMode; fn set_quirks_mode(&self, mode: QuirksMode); + fn set_last_modified(&self, value: DOMString); fn set_encoding_name(&self, name: DOMString); fn content_changed(&self); fn damage_and_reflow(&self, damage: DocumentDamageLevel); @@ -168,6 +171,10 @@ impl<'a> DocumentHelpers for JSRef<'a, Document> { self.quirks_mode.deref().set(mode); } + fn set_last_modified(&self, value: DOMString) { + *self.last_modified.deref().borrow_mut() = Some(value); + } + fn set_encoding_name(&self, name: DOMString) { *self.encoding_name.deref().borrow_mut() = name; } @@ -278,6 +285,7 @@ impl Document { NonHTMLDocument => "application/xml".to_string() } }, + last_modified: Traceable::new(RefCell::new(None)), url: Untraceable::new(url), // http://dom.spec.whatwg.org/#concept-document-quirks quirks_mode: Untraceable::new(Cell::new(NoQuirks)), @@ -569,6 +577,14 @@ impl<'a> DocumentMethods for JSRef<'a, Document> { } } + // http://www.whatwg.org/html/#dom-document-lastmodified + fn LastModified(&self) -> DOMString { + match *self.last_modified.borrow() { + Some(ref t) => t.clone(), + None => time::now().strftime("%m/%d/%Y %H:%M:%S"), + } + } + // http://dom.spec.whatwg.org/#dom-document-createrange fn CreateRange(&self) -> Temporary<Range> { Range::new(self) diff --git a/src/components/script/dom/htmlcanvaselement.rs b/src/components/script/dom/htmlcanvaselement.rs index 50198b197ee..28902265610 100644 --- a/src/components/script/dom/htmlcanvaselement.rs +++ b/src/components/script/dom/htmlcanvaselement.rs @@ -19,12 +19,11 @@ use dom::node::{Node, ElementNodeTypeId, window_from_node}; use dom::virtualmethods::VirtualMethods; use servo_util::atom::Atom; -use servo_util::str::DOMString; +use servo_util::str::{DOMString, parse_unsigned_integer}; use geom::size::Size2D; use std::cell::Cell; -use std::num; static DefaultWidth: u32 = 300; static DefaultHeight: u32 = 150; @@ -134,11 +133,11 @@ impl<'a> VirtualMethods for JSRef<'a, HTMLCanvasElement> { let recreate = match name.as_slice() { "width" => { - self.width.set(num::from_str_radix(value.as_slice(), 10).unwrap()); + self.width.set(parse_unsigned_integer(value.as_slice().chars()).unwrap_or(DefaultWidth)); true } "height" => { - self.height.set(num::from_str_radix(value.as_slice(), 10).unwrap()); + self.height.set(parse_unsigned_integer(value.as_slice().chars()).unwrap_or(DefaultHeight)); true } _ => false, diff --git a/src/components/script/dom/htmlimageelement.rs b/src/components/script/dom/htmlimageelement.rs index 6717711292e..33d7b7dfd31 100644 --- a/src/components/script/dom/htmlimageelement.rs +++ b/src/components/script/dom/htmlimageelement.rs @@ -113,14 +113,14 @@ impl<'a> HTMLImageElementMethods for JSRef<'a, HTMLImageElement> { fn SetUseMap(&self, use_map: DOMString) { let element: &JSRef<Element> = ElementCast::from_ref(self); - element.set_string_attribute("useMap", use_map) + element.set_string_attribute("usemap", use_map) } make_bool_getter!(IsMap) fn SetIsMap(&self, is_map: bool) { let element: &JSRef<Element> = ElementCast::from_ref(self); - element.set_string_attribute("isMap", is_map.to_string()) + element.set_string_attribute("ismap", is_map.to_string()) } fn Width(&self) -> u32 { diff --git a/src/components/script/dom/node.rs b/src/components/script/dom/node.rs index 33a8674d97e..96ee5f62ba2 100644 --- a/src/components/script/dom/node.rs +++ b/src/components/script/dom/node.rs @@ -43,7 +43,7 @@ use dom::virtualmethods::{VirtualMethods, vtable_for}; use dom::window::Window; use geom::rect::Rect; use html::hubbub_html_parser::build_element_from_tag; -use layout_interface::{ContentBoxQuery, ContentBoxResponse, ContentBoxesQuery, ContentBoxesResponse, +use layout_interface::{ContentBoxResponse, ContentBoxesResponse, LayoutRPC, LayoutChan, ReapLayoutDataMsg, TrustedNodeAddress, UntrustedNodeAddress}; use servo_util::geometry::Au; use servo_util::str::{DOMString, null_str_as_empty}; @@ -73,7 +73,7 @@ pub struct Node { pub eventtarget: EventTarget, /// The type of node that this is. - pub type_id: NodeTypeId, + type_id: NodeTypeId, /// The parent of this node. parent_node: Cell<Option<JS<Node>>>, @@ -586,18 +586,17 @@ impl<'m, 'n> NodeHelpers<'m, 'n> for JSRef<'n, Node> { fn get_bounding_content_box(&self) -> Rect<Au> { let window = window_from_node(self).root(); let page = window.deref().page(); - let (chan, port) = channel(); let addr = self.to_trusted_node_address(); - let ContentBoxResponse(rect) = page.query_layout(ContentBoxQuery(addr, chan), port); + + let ContentBoxResponse(rect) = page.layout_rpc.content_box(addr); rect } fn get_content_boxes(&self) -> Vec<Rect<Au>> { let window = window_from_node(self).root(); let page = window.deref().page(); - let (chan, port) = channel(); let addr = self.to_trusted_node_address(); - let ContentBoxesResponse(rects) = page.query_layout(ContentBoxesQuery(addr, chan), port); + let ContentBoxesResponse(rects) = page.layout_rpc.content_boxes(addr); rects } @@ -763,6 +762,7 @@ pub trait RawLayoutNodeHelpers { unsafe fn get_hover_state_for_layout(&self) -> bool; unsafe fn get_disabled_state_for_layout(&self) -> bool; unsafe fn get_enabled_state_for_layout(&self) -> bool; + fn type_id_for_layout(&self) -> NodeTypeId; } impl RawLayoutNodeHelpers for Node { @@ -775,6 +775,10 @@ impl RawLayoutNodeHelpers for Node { unsafe fn get_enabled_state_for_layout(&self) -> bool { (*self.unsafe_get_flags()).contains(InEnabledState) } + + fn type_id_for_layout(&self) -> NodeTypeId { + self.type_id + } } diff --git a/src/components/script/dom/webidls/Document.webidl b/src/components/script/dom/webidls/Document.webidl index 0a58227cdbe..0599ba71f95 100644 --- a/src/components/script/dom/webidls/Document.webidl +++ b/src/components/script/dom/webidls/Document.webidl @@ -49,6 +49,7 @@ interface Document : Node { /* http://www.whatwg.org/specs/web-apps/current-work/#the-document-object */ partial interface Document { + readonly attribute DOMString lastModified; [SetterThrows] attribute DOMString title; [SetterThrows] |