diff options
-rw-r--r-- | src/components/script/dom/bindings/codegen/Bindings.conf | 1 | ||||
-rw-r--r-- | src/components/script/dom/bindings/codegen/CodegenRust.py | 1 | ||||
-rw-r--r-- | src/components/script/dom/bindings/codegen/HTMLCollection.webidl | 2 | ||||
-rw-r--r-- | src/components/script/dom/bindings/codegen/HTMLIFrameElement.webidl | 67 | ||||
-rw-r--r-- | src/components/script/dom/bindings/node.rs | 4 | ||||
-rw-r--r-- | src/components/script/dom/bindings/utils.rs | 2 | ||||
-rw-r--r-- | src/components/script/dom/element.rs | 20 | ||||
-rw-r--r-- | src/components/script/dom/htmliframeelement.rs | 126 | ||||
-rw-r--r-- | src/components/script/dom/node.rs | 7 | ||||
-rw-r--r-- | src/components/script/html/hubbub_html_parser.rs | 7 | ||||
-rw-r--r-- | src/components/script/script.rc | 2 | ||||
-rw-r--r-- | src/test/html/test_bindings.html | 1 | ||||
-rw-r--r-- | src/test/html/test_bindings.js | 1 |
13 files changed, 217 insertions, 24 deletions
diff --git a/src/components/script/dom/bindings/codegen/Bindings.conf b/src/components/script/dom/bindings/codegen/Bindings.conf index 1d9c859a96d..227989c8ead 100644 --- a/src/components/script/dom/bindings/codegen/Bindings.conf +++ b/src/components/script/dom/bindings/codegen/Bindings.conf @@ -552,6 +552,7 @@ addHTMLElement('HTMLElement') addHTMLElement('HTMLHeadElement') addHTMLElement('HTMLHtmlElement') addHTMLElement('HTMLHRElement') +addHTMLElement('HTMLIFrameElement') addHTMLElement('HTMLImageElement') addHTMLElement('HTMLParagraphElement') addHTMLElement('HTMLScriptElement') diff --git a/src/components/script/dom/bindings/codegen/CodegenRust.py b/src/components/script/dom/bindings/codegen/CodegenRust.py index 514092d025c..99bcef1c970 100644 --- a/src/components/script/dom/bindings/codegen/CodegenRust.py +++ b/src/components/script/dom/bindings/codegen/CodegenRust.py @@ -4622,6 +4622,7 @@ class CGBindingRoot(CGThing): 'dom::htmlelement::HTMLElement', #XXXjdm 'dom::htmldocument::HTMLDocument', #XXXjdm 'dom::htmlhrelement::HTMLHRElement', + 'dom::htmliframeelement::HTMLIFrameElement', #XXXjdm 'dom::htmlimageelement::HTMLImageElement', #XXXjdm 'dom::htmlscriptelement::HTMLScriptElement', 'dom::bindings::utils::*', diff --git a/src/components/script/dom/bindings/codegen/HTMLCollection.webidl b/src/components/script/dom/bindings/codegen/HTMLCollection.webidl index 5797f85e392..1e56c3c01af 100644 --- a/src/components/script/dom/bindings/codegen/HTMLCollection.webidl +++ b/src/components/script/dom/bindings/codegen/HTMLCollection.webidl @@ -10,8 +10,6 @@ * liability, trademark and document use rules apply. */ -interface Element; - interface HTMLCollection { readonly attribute unsigned long length; getter Element? item(unsigned long index); diff --git a/src/components/script/dom/bindings/codegen/HTMLIFrameElement.webidl b/src/components/script/dom/bindings/codegen/HTMLIFrameElement.webidl new file mode 100644 index 00000000000..c8852f191f1 --- /dev/null +++ b/src/components/script/dom/bindings/codegen/HTMLIFrameElement.webidl @@ -0,0 +1,67 @@ +/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. + * + * The origin of this IDL file is + * http://www.whatwg.org/specs/web-apps/current-work/#the-iframe-element + * http://www.whatwg.org/specs/web-apps/current-work/#other-elements,-attributes-and-apis + * © Copyright 2004-2011 Apple Computer, Inc., Mozilla Foundation, and + * Opera Software ASA. You are granted a license to use, reproduce + * and create derivative works of this document. + */ + +interface HTMLIFrameElement : HTMLElement { + [SetterThrows, Pure] + attribute DOMString src; + [SetterThrows, Pure] + attribute DOMString srcdoc; + [SetterThrows, Pure] + attribute DOMString name; + // [PutForwards=value] readonly attribute DOMSettableTokenList sandbox; + // We're implementing sandbox as a string for now, see bug 845057. + attribute DOMString sandbox; + // attribute boolean seamless; + [SetterThrows, Pure] + attribute boolean allowFullscreen; + [SetterThrows, Pure] + attribute DOMString width; + [SetterThrows, Pure] + attribute DOMString height; + readonly attribute Document? contentDocument; + readonly attribute WindowProxy? contentWindow; +}; + +// http://www.whatwg.org/specs/web-apps/current-work/#other-elements,-attributes-and-apis +partial interface HTMLIFrameElement { + [SetterThrows, Pure] + attribute DOMString align; + [SetterThrows, Pure] + attribute DOMString scrolling; + [SetterThrows, Pure] + attribute DOMString frameBorder; + [SetterThrows, Pure] + attribute DOMString longDesc; + + [TreatNullAs=EmptyString,SetterThrows,Pure] attribute DOMString marginHeight; + [TreatNullAs=EmptyString,SetterThrows,Pure] attribute DOMString marginWidth; +}; + +partial interface HTMLIFrameElement { + // GetSVGDocument + Document? getSVGDocument(); +}; + +/*partial interface HTMLIFrameElement { + // nsIDOMMozBrowserFrame + [ChromeOnly,SetterThrows] + attribute boolean mozbrowser; +}; + +partial interface HTMLIFrameElement { + // nsIMozBrowserFrame + [ChromeOnly] + readonly attribute DOMString appManifestURL; +}; + +HTMLIFrameElement implements MozFrameLoaderOwner;*/ diff --git a/src/components/script/dom/bindings/node.rs b/src/components/script/dom/bindings/node.rs index 3e6d1e9498f..f645a30294a 100644 --- a/src/components/script/dom/bindings/node.rs +++ b/src/components/script/dom/bindings/node.rs @@ -8,13 +8,14 @@ use dom::bindings::utils; use dom::bindings::utils::{CacheableWrapper, WrapperCache, DerivedWrapper}; use dom::element::{HTMLHeadElementTypeId, HTMLHtmlElementTypeId, HTMLAnchorElementTypeId}; use dom::element::{HTMLDivElementTypeId, HTMLImageElementTypeId, HTMLSpanElementTypeId}; -use dom::element::{HTMLBodyElementTypeId, HTMLHRElementTypeId}; +use dom::element::{HTMLBodyElementTypeId, HTMLHRElementTypeId, HTMLIframeElementTypeId}; use dom::element::{HTMLParagraphElementTypeId, HTMLScriptElementTypeId}; use dom::element::{HTMLHeadElement, HTMLHtmlElement, HTMLDivElement, HTMLSpanElement}; use dom::element::{HTMLParagraphElement}; use dom::htmlanchorelement::HTMLAnchorElement; use dom::htmlbodyelement::HTMLBodyElement; use dom::htmlhrelement::HTMLHRElement; +use dom::htmliframeelement::HTMLIFrameElement; use dom::htmlimageelement::HTMLImageElement; use dom::htmlscriptelement::HTMLScriptElement; use dom::node::{AbstractNode, Node, ElementNodeTypeId, TextNodeTypeId, CommentNodeTypeId}; @@ -88,6 +89,7 @@ pub fn create(cx: *JSContext, node: &mut AbstractNode<ScriptView>) -> *JSObject ElementNodeTypeId(HTMLHeadElementTypeId) => generate_element!(HTMLHeadElement), ElementNodeTypeId(HTMLHRElementTypeId) => generate_element!(HTMLHRElement), ElementNodeTypeId(HTMLHtmlElementTypeId) => generate_element!(HTMLHtmlElement), + ElementNodeTypeId(HTMLIframeElementTypeId) => generate_element!(HTMLIFrameElement), ElementNodeTypeId(HTMLImageElementTypeId) => generate_element!(HTMLImageElement), ElementNodeTypeId(HTMLParagraphElementTypeId) => generate_element!(HTMLParagraphElement), ElementNodeTypeId(HTMLScriptElementTypeId) => generate_element!(HTMLScriptElement), diff --git a/src/components/script/dom/bindings/utils.rs b/src/components/script/dom/bindings/utils.rs index 4e9aac1d178..812cff18ec9 100644 --- a/src/components/script/dom/bindings/utils.rs +++ b/src/components/script/dom/bindings/utils.rs @@ -617,7 +617,7 @@ pub extern fn ThrowingConstructor(_cx: *JSContext, _argc: uint, _vp: *JSVal) -> } pub fn initialize_global(global: *JSObject) { - let protoArray = @mut ([0 as *JSObject, ..40]); + let protoArray = @mut ([0 as *JSObject, ..41]); assert!(protoArray.len() == PrototypeList::id::_ID_Count as uint); unsafe { //XXXjdm we should be storing the box pointer instead of the inner diff --git a/src/components/script/dom/element.rs b/src/components/script/dom/element.rs index 00b17f80c43..2d169133cf6 100644 --- a/src/components/script/dom/element.rs +++ b/src/components/script/dom/element.rs @@ -5,9 +5,10 @@ //! Element nodes. use dom::bindings::codegen::{HTMLHeadElementBinding, HTMLHtmlElementBinding}; -use dom::bindings::codegen::{HTMLAnchorElementBinding, HTMLBodyElementBinding, HTMLDivElementBinding, HTMLSpanElementBinding}; -use dom::bindings::codegen::{HTMLHRElementBinding}; +use dom::bindings::codegen::{HTMLAnchorElementBinding, HTMLBodyElementBinding}; +use dom::bindings::codegen::{HTMLHRElementBinding, HTMLIFrameElementBinding}; use dom::bindings::codegen::{HTMLParagraphElementBinding, HTMLScriptElementBinding}; +use dom::bindings::codegen::{HTMLDivElementBinding, HTMLSpanElementBinding}; use dom::bindings::codegen::{HTMLImageElementBinding}; use dom::bindings::utils::{null_string, str}; use dom::bindings::utils::{BindingObject, CacheableWrapper, DOMString, ErrorResult, WrapperCache}; @@ -18,6 +19,7 @@ use dom::htmlbodyelement::HTMLBodyElement; use dom::htmlcollection::HTMLCollection; use dom::htmlelement::HTMLElement; use dom::htmlhrelement::HTMLHRElement; +use dom::htmliframeelement::HTMLIFrameElement; use dom::htmlimageelement::HTMLImageElement; use dom::htmlscriptelement::HTMLScriptElement; use dom::node::{ElementNodeTypeId, Node, ScriptView, AbstractNode}; @@ -28,13 +30,8 @@ use newcss::stylesheet::Stylesheet; use js::jsapi::{JSContext, JSObject}; use std::cell::Cell; -use std::comm::ChanOne; use std::comm; use std::str::eq_slice; -use extra::net::url::Url; -use geom::size::Size2D; - -use servo_msg::constellation_msg::SubpageId; pub struct Element { parent: Node<ScriptView>, @@ -195,6 +192,8 @@ generate_cacheable_wrapper!(HTMLBodyElement, HTMLBodyElementBinding::Wrap) generate_binding_object!(HTMLBodyElement) generate_cacheable_wrapper!(HTMLDivElement, HTMLDivElementBinding::Wrap) generate_binding_object!(HTMLDivElement) +generate_cacheable_wrapper!(HTMLIFrameElement, HTMLIFrameElementBinding::Wrap) +generate_binding_object!(HTMLIFrameElement) generate_cacheable_wrapper!(HTMLImageElement, HTMLImageElementBinding::Wrap) generate_binding_object!(HTMLImageElement) generate_cacheable_wrapper!(HTMLParagraphElement, HTMLParagraphElementBinding::Wrap) @@ -214,13 +213,6 @@ pub struct HTMLHeadingElement { level: HeadingLevel, } -pub struct HTMLIframeElement { - parent: HTMLElement, - frame: Option<Url>, - subpage_id: Option<SubpageId>, - size_future_chan: Option<ChanOne<Size2D<uint>>>, -} - // // Element methods // diff --git a/src/components/script/dom/htmliframeelement.rs b/src/components/script/dom/htmliframeelement.rs new file mode 100644 index 00000000000..ee71c2786ff --- /dev/null +++ b/src/components/script/dom/htmliframeelement.rs @@ -0,0 +1,126 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +use dom::bindings::utils::{DOMString, null_string, ErrorResult}; +use dom::document::AbstractDocument; +use dom::htmlelement::HTMLElement; +use dom::windowproxy::WindowProxy; +use geom::size::Size2D; + +use servo_msg::constellation_msg::SubpageId; + +use std::comm::ChanOne; +use extra::net::url::Url; + +pub struct HTMLIFrameElement { + parent: HTMLElement, + frame: Option<Url>, + subpage_id: Option<SubpageId>, + size_future_chan: Option<ChanOne<Size2D<uint>>>, +} + +impl HTMLIFrameElement { + pub fn Src(&self) -> DOMString { + null_string + } + + pub fn SetSrc(&mut self, _src: &DOMString, _rv: &mut ErrorResult) { + } + + pub fn Srcdoc(&self) -> DOMString { + null_string + } + + pub fn SetSrcdoc(&mut self, _srcdoc: &DOMString, _rv: &mut ErrorResult) { + } + + pub fn Name(&self) -> DOMString { + null_string + } + + pub fn SetName(&mut self, _name: &DOMString, _rv: &mut ErrorResult) { + } + + pub fn Sandbox(&self) -> DOMString { + null_string + } + + pub fn SetSandbox(&self, _sandbox: &DOMString) { + } + + pub fn AllowFullscreen(&self) -> bool { + false + } + + pub fn SetAllowFullscreen(&mut self, _allow: bool, _rv: &mut ErrorResult) { + } + + pub fn Width(&self) -> DOMString { + null_string + } + + pub fn SetWidth(&mut self, _width: &DOMString, _rv: &mut ErrorResult) { + } + + pub fn Height(&self) -> DOMString { + null_string + } + + pub fn SetHeight(&mut self, _height: &DOMString, _rv: &mut ErrorResult) { + } + + pub fn GetContentDocument(&self) -> Option<AbstractDocument> { + None + } + + pub fn GetContentWindow(&self) -> Option<@mut WindowProxy> { + None + } + + pub fn Align(&self) -> DOMString { + null_string + } + + pub fn SetAlign(&mut self, _align: &DOMString, _rv: &mut ErrorResult) { + } + + pub fn Scrolling(&self) -> DOMString { + null_string + } + + pub fn SetScrolling(&mut self, _scrolling: &DOMString, _rv: &mut ErrorResult) { + } + + pub fn FrameBorder(&self) -> DOMString { + null_string + } + + pub fn SetFrameBorder(&mut self, _frameborder: &DOMString, _rv: &mut ErrorResult) { + } + + pub fn LongDesc(&self) -> DOMString { + null_string + } + + pub fn SetLongDesc(&mut self, _longdesc: &DOMString, _rv: &mut ErrorResult) { + } + + pub fn MarginHeight(&self) -> DOMString { + null_string + } + + pub fn SetMarginHeight(&mut self, _marginheight: &DOMString, _rv: &mut ErrorResult) { + } + + pub fn MarginWidth(&self) -> DOMString { + null_string + } + + pub fn SetMarginWidth(&mut self, _marginwidth: &DOMString, _rv: &mut ErrorResult) { + } + + pub fn GetSVGDocument(&self) -> Option<AbstractDocument> { + None + } +}
\ No newline at end of file diff --git a/src/components/script/dom/node.rs b/src/components/script/dom/node.rs index 7bf7e53b7ac..236df0f3732 100644 --- a/src/components/script/dom/node.rs +++ b/src/components/script/dom/node.rs @@ -11,9 +11,10 @@ use dom::bindings::utils::{BindingObject, CacheableWrapper, rust_box}; use dom::bindings; use dom::characterdata::CharacterData; use dom::document::AbstractDocument; -use dom::element::{Element, ElementTypeId, HTMLImageElementTypeId, HTMLIframeElementTypeId, HTMLIframeElement}; +use dom::element::{Element, ElementTypeId, HTMLImageElementTypeId, HTMLIframeElementTypeId}; use dom::element::{HTMLStyleElementTypeId}; use dom::htmlimageelement::HTMLImageElement; +use dom::htmliframeelement::HTMLIFrameElement; use dom::window::Window; use std::cast; @@ -401,14 +402,14 @@ impl<'self, View> AbstractNode<View> { self.type_id() == ElementNodeTypeId(HTMLIframeElementTypeId) } - pub fn with_imm_iframe_element<R>(self, f: &fn(&HTMLIframeElement) -> R) -> R { + pub fn with_imm_iframe_element<R>(self, f: &fn(&HTMLIFrameElement) -> R) -> R { if !self.is_iframe_element() { fail!(~"node is not an iframe element"); } self.transmute(f) } - pub fn with_mut_iframe_element<R>(self, f: &fn(&mut HTMLIframeElement) -> R) -> R { + pub fn with_mut_iframe_element<R>(self, f: &fn(&mut HTMLIFrameElement) -> R) -> R { if !self.is_iframe_element() { fail!(~"node is not an iframe element"); } diff --git a/src/components/script/html/hubbub_html_parser.rs b/src/components/script/html/hubbub_html_parser.rs index 52e2157da73..c26d3b3247e 100644 --- a/src/components/script/html/hubbub_html_parser.rs +++ b/src/components/script/html/hubbub_html_parser.rs @@ -18,8 +18,8 @@ use dom::element::{HTMLAnchorElementTypeId, HTMLAsideElementTypeId, HTMLBRElemen use dom::element::{HTMLAsideElement, HTMLBRElement, HTMLBoldElement, HTMLDivElement, HTMLFontElement, HTMLFormElement, HTMLHeadElement, HTMLHeadingElement, HTMLHtmlElement, - HTMLInputElement, HTMLIframeElement, - HTMLItalicElement, HTMLLinkElement, HTMLListItemElement, HTMLMetaElement, + HTMLInputElement, HTMLItalicElement, HTMLLinkElement, + HTMLListItemElement, HTMLMetaElement, HTMLOListElement, HTMLOptionElement, HTMLParagraphElement, HTMLSectionElement, HTMLSelectElement, HTMLSmallElement, HTMLSpanElement, HTMLStyleElement, HTMLTableBodyElement, @@ -30,6 +30,7 @@ use dom::element::{HTMLHeadingElementTypeId, Heading1, Heading2, Heading3, Headi use dom::htmlanchorelement::HTMLAnchorElement; use dom::htmlbodyelement::HTMLBodyElement; use dom::htmlhrelement::HTMLHRElement; +use dom::htmliframeelement::HTMLIFrameElement; use dom::htmlimageelement::HTMLImageElement; use dom::htmlscriptelement::HTMLScriptElement; use dom::element::{Element, Attr}; @@ -229,7 +230,7 @@ fn build_element_from_tag(cx: *JSContext, tag: &str) -> AbstractNode<ScriptView> handle_element!(cx, tag, "ul", HTMLUListElementTypeId, HTMLUListElement, []); handle_element!(cx, tag, "img", HTMLImageElementTypeId, HTMLImageElement, [(image: None)]); - handle_element!(cx, tag, "iframe", HTMLIframeElementTypeId, HTMLIframeElement, [(frame: None), (size_future_chan: None), (subpage_id: None)]); + handle_element!(cx, tag, "iframe", HTMLIframeElementTypeId, HTMLIFrameElement, [(frame: None), (size_future_chan: None), (subpage_id: None)]); handle_element!(cx, tag, "h1", HTMLHeadingElementTypeId, HTMLHeadingElement, [(level: Heading1)]); handle_element!(cx, tag, "h2", HTMLHeadingElementTypeId, HTMLHeadingElement, [(level: Heading2)]); diff --git a/src/components/script/script.rc b/src/components/script/script.rc index 03f4db52c3e..ac3519a2c0d 100644 --- a/src/components/script/script.rc +++ b/src/components/script/script.rc @@ -51,6 +51,7 @@ pub mod dom { pub mod HTMLHeadElementBinding; pub mod HTMLHRElementBinding; pub mod HTMLHtmlElementBinding; + pub mod HTMLIFrameElementBinding; pub mod HTMLImageElementBinding; pub mod HTMLParagraphElementBinding; pub mod HTMLScriptElementBinding; @@ -81,6 +82,7 @@ pub mod dom { pub mod htmldocument; pub mod htmlelement; pub mod htmlhrelement; + pub mod htmliframeelement; pub mod htmlimageelement; pub mod htmlscriptelement; pub mod mouseevent; diff --git a/src/test/html/test_bindings.html b/src/test/html/test_bindings.html index 5d9a0be0d3e..45fa21f7606 100644 --- a/src/test/html/test_bindings.html +++ b/src/test/html/test_bindings.html @@ -16,5 +16,6 @@ <embed></embed> <form></form> <applet></applet> + <iframe></iframe> </body> </html> diff --git a/src/test/html/test_bindings.js b/src/test/html/test_bindings.js index f15f59de0c3..6cee531029d 100644 --- a/src/test/html/test_bindings.js +++ b/src/test/html/test_bindings.js @@ -130,6 +130,7 @@ document.title = "foo"; window.alert(document.title); window.alert(document.links[0]); +window.alert(document.getElementsByTagName('iframe')[0]); window.alert(document.getElementsByTagName("body")[0]); //TODO: Doesn't work until we throw proper exceptions instead of returning 0 on |