aboutsummaryrefslogtreecommitdiffstats
path: root/src/components/script/dom
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/script/dom')
-rw-r--r--src/components/script/dom/bindings/codegen/CodegenRust.py11
-rw-r--r--src/components/script/dom/bindings/trace.rs2
-rw-r--r--src/components/script/dom/document.rs16
-rw-r--r--src/components/script/dom/htmlcanvaselement.rs7
-rw-r--r--src/components/script/dom/htmlimageelement.rs4
-rw-r--r--src/components/script/dom/node.rs16
-rw-r--r--src/components/script/dom/webidls/Document.webidl1
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]