From 22e02b573d546f9e0eea3318e2691d3144735fc5 Mon Sep 17 00:00:00 2001 From: Tetsuharu OHZEKI Date: Sat, 24 Aug 2013 01:48:11 +0900 Subject: [PATCH 1/8] Generate bindings for HTMLTemplateElement. --- .../script/dom/bindings/codegen/Bindings.conf | 1 + .../codegen/HTMLTemplateElement.webidl | 19 +++++++++++++++++++ src/components/script/dom/bindings/element.rs | 2 ++ src/components/script/dom/bindings/node.rs | 1 + src/components/script/dom/element.rs | 1 + .../script/dom/htmltemplateelement.rs | 12 ++++++++++++ .../script/html/hubbub_html_parser.rs | 1 + src/components/script/script.rc | 1 + 8 files changed, 38 insertions(+) create mode 100644 src/components/script/dom/bindings/codegen/HTMLTemplateElement.webidl create mode 100644 src/components/script/dom/htmltemplateelement.rs diff --git a/src/components/script/dom/bindings/codegen/Bindings.conf b/src/components/script/dom/bindings/codegen/Bindings.conf index d1bd1e1cff4..304b2fff265 100644 --- a/src/components/script/dom/bindings/codegen/Bindings.conf +++ b/src/components/script/dom/bindings/codegen/Bindings.conf @@ -606,6 +606,7 @@ addHTMLElement('HTMLTableCellElement') addHTMLElement('HTMLTableColElement') addHTMLElement('HTMLTableRowElement') addHTMLElement('HTMLTableSectionElement') +addHTMLElement('HTMLTemplateElement') addHTMLElement('HTMLTextAreaElement') addHTMLElement('HTMLTimeElement') addHTMLElement('HTMLTitleElement') diff --git a/src/components/script/dom/bindings/codegen/HTMLTemplateElement.webidl b/src/components/script/dom/bindings/codegen/HTMLTemplateElement.webidl new file mode 100644 index 00000000000..ef87f656c61 --- /dev/null +++ b/src/components/script/dom/bindings/codegen/HTMLTemplateElement.webidl @@ -0,0 +1,19 @@ +/* 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 + * https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/templates/index.html + * + * Copyright © 2012 W3C® (MIT, ERCIM, Keio), All Rights Reserved. W3C + * liability, trademark and document use rules apply. + */ + +// import from http://mxr.mozilla.org/mozilla-central/source/dom/webidl/HTMLTemplateElement.webidl + +interface HTMLTemplateElement : HTMLElement { +/* FIXME: + readonly attribute DocumentFragment content; +*/ +}; + diff --git a/src/components/script/dom/bindings/element.rs b/src/components/script/dom/bindings/element.rs index b6d1d9a72fc..8ccce220933 100644 --- a/src/components/script/dom/bindings/element.rs +++ b/src/components/script/dom/bindings/element.rs @@ -144,6 +144,8 @@ generate_cacheable_wrapper!(HTMLTableRowElement, HTMLTableRowElementBinding::Wra generate_binding_object!(HTMLTableRowElement) generate_cacheable_wrapper!(HTMLTableSectionElement, HTMLTableSectionElementBinding::Wrap) generate_binding_object!(HTMLTableSectionElement) +generate_cacheable_wrapper!(HTMLTemplateElement, HTMLTemplateElementBinding::Wrap) +generate_binding_object!(HTMLTemplateElement) generate_cacheable_wrapper!(HTMLTextAreaElement, HTMLTextAreaElementBinding::Wrap) generate_binding_object!(HTMLTextAreaElement) generate_cacheable_wrapper!(HTMLTitleElement, HTMLTitleElementBinding::Wrap) diff --git a/src/components/script/dom/bindings/node.rs b/src/components/script/dom/bindings/node.rs index 26c0d29a528..d5094dd8624 100644 --- a/src/components/script/dom/bindings/node.rs +++ b/src/components/script/dom/bindings/node.rs @@ -75,6 +75,7 @@ pub fn create(cx: *JSContext, node: &mut AbstractNode) -> *JSObject ElementNodeTypeId(HTMLTableColElementTypeId) => generate_element!(HTMLTableColElement), ElementNodeTypeId(HTMLTableRowElementTypeId) => generate_element!(HTMLTableRowElement), ElementNodeTypeId(HTMLTableSectionElementTypeId) => generate_element!(HTMLTableSectionElement), + ElementNodeTypeId(HTMLTemplateElementTypeId) => generate_element!(HTMLTemplateElement), ElementNodeTypeId(HTMLTextAreaElementTypeId) => generate_element!(HTMLTextAreaElement), ElementNodeTypeId(HTMLTimeElementTypeId) => generate_element!(HTMLTimeElement), ElementNodeTypeId(HTMLTitleElementTypeId) => generate_element!(HTMLTitleElement), diff --git a/src/components/script/dom/element.rs b/src/components/script/dom/element.rs index c4adf83022b..ffe69cc0c17 100644 --- a/src/components/script/dom/element.rs +++ b/src/components/script/dom/element.rs @@ -99,6 +99,7 @@ pub enum ElementTypeId { HTMLTableColElementTypeId, HTMLTableRowElementTypeId, HTMLTableSectionElementTypeId, + HTMLTemplateElementTypeId, HTMLTextAreaElementTypeId, HTMLTimeElementTypeId, HTMLTitleElementTypeId, diff --git a/src/components/script/dom/htmltemplateelement.rs b/src/components/script/dom/htmltemplateelement.rs new file mode 100644 index 00000000000..f43e00421e9 --- /dev/null +++ b/src/components/script/dom/htmltemplateelement.rs @@ -0,0 +1,12 @@ +/* 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::htmlelement::HTMLElement; + +pub struct HTMLTemplateElement { + parent: HTMLElement, +} + +impl HTMLTemplateElement { +} diff --git a/src/components/script/html/hubbub_html_parser.rs b/src/components/script/html/hubbub_html_parser.rs index 081c6a1ba25..9af6dadf58e 100644 --- a/src/components/script/html/hubbub_html_parser.rs +++ b/src/components/script/html/hubbub_html_parser.rs @@ -234,6 +234,7 @@ fn build_element_from_tag(cx: *JSContext, tag: &str) -> AbstractNode handle_element!(cx, tag, "col", HTMLTableColElementTypeId, HTMLTableColElement, []); handle_element!(cx, tag, "colgroup",HTMLTableColElementTypeId, HTMLTableColElement, []); handle_element!(cx, tag, "tbody", HTMLTableSectionElementTypeId, HTMLTableSectionElement, []); + handle_element!(cx, tag, "template",HTMLTemplateElementTypeId, HTMLTemplateElement, []); handle_element!(cx, tag, "textarea",HTMLTextAreaElementTypeId, HTMLTextAreaElement, []); handle_element!(cx, tag, "time", HTMLTimeElementTypeId, HTMLTimeElement, []); handle_element!(cx, tag, "title", HTMLTitleElementTypeId, HTMLTitleElement, []); diff --git a/src/components/script/script.rc b/src/components/script/script.rc index 21a70515c86..51991e25943 100644 --- a/src/components/script/script.rc +++ b/src/components/script/script.rc @@ -110,6 +110,7 @@ pub mod dom { pub mod htmltablecolelement; pub mod htmltablerowelement; pub mod htmltablesectionelement; + pub mod htmltemplateelement; pub mod htmltextareaelement; pub mod htmltimeelement; pub mod htmltitleelement; From e55b3d6b86c6a1b6e032339aeb2d9b5b6169ca2a Mon Sep 17 00:00:00 2001 From: Tetsuharu OHZEKI Date: Sat, 31 Aug 2013 03:16:56 +0900 Subject: [PATCH 2/8] Generate bindings for HTMLPreElement. --- .../script/dom/bindings/codegen/Bindings.conf | 1 + .../bindings/codegen/HTMLPreElement.webidl | 24 +++++++++++++++++++ src/components/script/dom/bindings/element.rs | 2 ++ src/components/script/dom/bindings/node.rs | 1 + src/components/script/dom/element.rs | 1 + src/components/script/dom/htmlpreelement.rs | 19 +++++++++++++++ .../script/html/hubbub_html_parser.rs | 1 + src/components/script/script.rc | 1 + 8 files changed, 50 insertions(+) create mode 100644 src/components/script/dom/bindings/codegen/HTMLPreElement.webidl create mode 100644 src/components/script/dom/htmlpreelement.rs diff --git a/src/components/script/dom/bindings/codegen/Bindings.conf b/src/components/script/dom/bindings/codegen/Bindings.conf index 304b2fff265..84da68409d8 100644 --- a/src/components/script/dom/bindings/codegen/Bindings.conf +++ b/src/components/script/dom/bindings/codegen/Bindings.conf @@ -593,6 +593,7 @@ addHTMLElement('HTMLOptionElement') addHTMLElement('HTMLOutputElement') addHTMLElement('HTMLParagraphElement') addHTMLElement('HTMLParamElement') +addHTMLElement('HTMLPreElement') addHTMLElement('HTMLProgressElement') addHTMLElement('HTMLQuoteElement') addHTMLElement('HTMLScriptElement') diff --git a/src/components/script/dom/bindings/codegen/HTMLPreElement.webidl b/src/components/script/dom/bindings/codegen/HTMLPreElement.webidl new file mode 100644 index 00000000000..587b5308f46 --- /dev/null +++ b/src/components/script/dom/bindings/codegen/HTMLPreElement.webidl @@ -0,0 +1,24 @@ +/* -*- 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-pre-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. + */ + +// import from http://mxr.mozilla.org/mozilla-central/source/dom/webidl/ + +// http://www.whatwg.org/specs/web-apps/current-work/#the-pre-element +interface HTMLPreElement : HTMLElement { +}; + +// http://www.whatwg.org/specs/web-apps/current-work/#other-elements,-attributes-and-apis +partial interface HTMLPreElement { + [SetterThrows] + attribute long width; +}; diff --git a/src/components/script/dom/bindings/element.rs b/src/components/script/dom/bindings/element.rs index 8ccce220933..268babe1740 100644 --- a/src/components/script/dom/bindings/element.rs +++ b/src/components/script/dom/bindings/element.rs @@ -118,6 +118,8 @@ generate_cacheable_wrapper!(HTMLParagraphElement, HTMLParagraphElementBinding::W generate_binding_object!(HTMLParagraphElement) generate_cacheable_wrapper!(HTMLParamElement, HTMLParamElementBinding::Wrap) generate_binding_object!(HTMLParamElement) +generate_cacheable_wrapper!(HTMLPreElement, HTMLPreElementBinding::Wrap) +generate_binding_object!(HTMLPreElement) generate_cacheable_wrapper!(HTMLProgressElement, HTMLProgressElementBinding::Wrap) generate_binding_object!(HTMLProgressElement) generate_cacheable_wrapper!(HTMLQuoteElement, HTMLQuoteElementBinding::Wrap) diff --git a/src/components/script/dom/bindings/node.rs b/src/components/script/dom/bindings/node.rs index d5094dd8624..3a55a781c18 100644 --- a/src/components/script/dom/bindings/node.rs +++ b/src/components/script/dom/bindings/node.rs @@ -62,6 +62,7 @@ pub fn create(cx: *JSContext, node: &mut AbstractNode) -> *JSObject ElementNodeTypeId(HTMLOutputElementTypeId) => generate_element!(HTMLOutputElement), ElementNodeTypeId(HTMLParagraphElementTypeId) => generate_element!(HTMLParagraphElement), ElementNodeTypeId(HTMLParamElementTypeId) => generate_element!(HTMLParamElement), + ElementNodeTypeId(HTMLPreElementTypeId) => generate_element!(HTMLPreElement), ElementNodeTypeId(HTMLProgressElementTypeId) => generate_element!(HTMLProgressElement), ElementNodeTypeId(HTMLQuoteElementTypeId) => generate_element!(HTMLQuoteElement), ElementNodeTypeId(HTMLScriptElementTypeId) => generate_element!(HTMLScriptElement), diff --git a/src/components/script/dom/element.rs b/src/components/script/dom/element.rs index ffe69cc0c17..c06822ae808 100644 --- a/src/components/script/dom/element.rs +++ b/src/components/script/dom/element.rs @@ -86,6 +86,7 @@ pub enum ElementTypeId { HTMLOutputElementTypeId, HTMLParagraphElementTypeId, HTMLParamElementTypeId, + HTMLPreElementTypeId, HTMLProgressElementTypeId, HTMLQuoteElementTypeId, HTMLScriptElementTypeId, diff --git a/src/components/script/dom/htmlpreelement.rs b/src/components/script/dom/htmlpreelement.rs new file mode 100644 index 00000000000..ebdf6224273 --- /dev/null +++ b/src/components/script/dom/htmlpreelement.rs @@ -0,0 +1,19 @@ +/* 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::{ErrorResult}; +use dom::htmlelement::HTMLElement; + +pub struct HTMLPreElement { + parent: HTMLElement, +} + +impl HTMLPreElement { + pub fn Width(&self) -> i32 { + 0 + } + + pub fn SetWidth(&mut self, _width: i32, _rv: &mut ErrorResult) { + } +} diff --git a/src/components/script/html/hubbub_html_parser.rs b/src/components/script/html/hubbub_html_parser.rs index 9af6dadf58e..c2840c5ecde 100644 --- a/src/components/script/html/hubbub_html_parser.rs +++ b/src/components/script/html/hubbub_html_parser.rs @@ -221,6 +221,7 @@ fn build_element_from_tag(cx: *JSContext, tag: &str) -> AbstractNode handle_element!(cx, tag, "output", HTMLOutputElementTypeId, HTMLOutputElement, []); handle_element!(cx, tag, "p", HTMLParagraphElementTypeId, HTMLParagraphElement, []); handle_element!(cx, tag, "param", HTMLParamElementTypeId, HTMLParamElement, []); + handle_element!(cx, tag, "pre", HTMLPreElementTypeId, HTMLPreElement, []); handle_element!(cx, tag, "progress",HTMLProgressElementTypeId, HTMLProgressElement, []); handle_element!(cx, tag, "q", HTMLQuoteElementTypeId, HTMLQuoteElement, []); handle_element!(cx, tag, "script", HTMLScriptElementTypeId, HTMLScriptElement, []); diff --git a/src/components/script/script.rc b/src/components/script/script.rc index 51991e25943..b8f9a112513 100644 --- a/src/components/script/script.rc +++ b/src/components/script/script.rc @@ -97,6 +97,7 @@ pub mod dom { pub mod htmloutputelement; pub mod htmlparagraphelement; pub mod htmlparamelement; + pub mod htmlpreelement; pub mod htmlprogresselement; pub mod htmlquoteelement; pub mod htmlscriptelement; From f7bc8beb18b1b2e89d6bd3c221a86d5750b7f065 Mon Sep 17 00:00:00 2001 From: Tetsuharu OHZEKI Date: Sat, 31 Aug 2013 03:28:04 +0900 Subject: [PATCH 3/8] Generate bindings for HTMLLegendElement. --- .../script/dom/bindings/codegen/Bindings.conf | 1 + .../bindings/codegen/HTMLLegendElement.webidl | 29 +++++++++++++++++++ src/components/script/dom/bindings/element.rs | 2 ++ src/components/script/dom/bindings/node.rs | 1 + src/components/script/dom/element.rs | 1 + .../script/dom/htmllegendelement.rs | 19 ++++++++++++ .../script/html/hubbub_html_parser.rs | 1 + src/components/script/script.rc | 1 + 8 files changed, 55 insertions(+) create mode 100644 src/components/script/dom/bindings/codegen/HTMLLegendElement.webidl create mode 100644 src/components/script/dom/htmllegendelement.rs diff --git a/src/components/script/dom/bindings/codegen/Bindings.conf b/src/components/script/dom/bindings/codegen/Bindings.conf index 84da68409d8..d29f8e3222f 100644 --- a/src/components/script/dom/bindings/codegen/Bindings.conf +++ b/src/components/script/dom/bindings/codegen/Bindings.conf @@ -580,6 +580,7 @@ addHTMLElement('HTMLHRElement') addHTMLElement('HTMLIFrameElement') addHTMLElement('HTMLImageElement') addHTMLElement('HTMLInputElement') +addHTMLElement('HTMLLegendElement') addHTMLElement('HTMLLIElement') addHTMLElement('HTMLLinkElement') addHTMLElement('HTMLMapElement') diff --git a/src/components/script/dom/bindings/codegen/HTMLLegendElement.webidl b/src/components/script/dom/bindings/codegen/HTMLLegendElement.webidl new file mode 100644 index 00000000000..9a98a441b6f --- /dev/null +++ b/src/components/script/dom/bindings/codegen/HTMLLegendElement.webidl @@ -0,0 +1,29 @@ +/* -*- 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-legend-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. + */ + +// import from http://mxr.mozilla.org/mozilla-central/source/dom/webidl/ + +// http://www.whatwg.org/specs/web-apps/current-work/#the-legend-element +interface HTMLLegendElement : HTMLElement { +/* + FIXME: + readonly attribute HTMLFormElement? form; +*/ +}; + +// http://www.whatwg.org/specs/web-apps/current-work/#other-elements,-attributes-and-apis +partial interface HTMLLegendElement { + [SetterThrows] + attribute DOMString align; +}; diff --git a/src/components/script/dom/bindings/element.rs b/src/components/script/dom/bindings/element.rs index 268babe1740..95eae0bc7e3 100644 --- a/src/components/script/dom/bindings/element.rs +++ b/src/components/script/dom/bindings/element.rs @@ -92,6 +92,8 @@ generate_cacheable_wrapper!(HTMLImageElement, HTMLImageElementBinding::Wrap) generate_binding_object!(HTMLImageElement) generate_cacheable_wrapper!(HTMLInputElement, HTMLInputElementBinding::Wrap) generate_binding_object!(HTMLInputElement) +generate_cacheable_wrapper!(HTMLLegendElement, HTMLLegendElementBinding::Wrap) +generate_binding_object!(HTMLLegendElement) generate_cacheable_wrapper!(HTMLLIElement, HTMLLIElementBinding::Wrap) generate_binding_object!(HTMLLIElement) generate_cacheable_wrapper!(HTMLLinkElement, HTMLLinkElementBinding::Wrap) diff --git a/src/components/script/dom/bindings/node.rs b/src/components/script/dom/bindings/node.rs index 3a55a781c18..39260bb3ae6 100644 --- a/src/components/script/dom/bindings/node.rs +++ b/src/components/script/dom/bindings/node.rs @@ -49,6 +49,7 @@ pub fn create(cx: *JSContext, node: &mut AbstractNode) -> *JSObject ElementNodeTypeId(HTMLIframeElementTypeId) => generate_element!(HTMLIFrameElement), ElementNodeTypeId(HTMLImageElementTypeId) => generate_element!(HTMLImageElement), ElementNodeTypeId(HTMLInputElementTypeId) => generate_element!(HTMLInputElement), + ElementNodeTypeId(HTMLLegendElementTypeId) => generate_element!(HTMLLegendElement), ElementNodeTypeId(HTMLLIElementTypeId) => generate_element!(HTMLLIElement), ElementNodeTypeId(HTMLLinkElementTypeId) => generate_element!(HTMLLinkElement), ElementNodeTypeId(HTMLMapElementTypeId) => generate_element!(HTMLMapElement), diff --git a/src/components/script/dom/element.rs b/src/components/script/dom/element.rs index c06822ae808..038494c8d36 100644 --- a/src/components/script/dom/element.rs +++ b/src/components/script/dom/element.rs @@ -73,6 +73,7 @@ pub enum ElementTypeId { HTMLIframeElementTypeId, HTMLImageElementTypeId, HTMLInputElementTypeId, + HTMLLegendElementTypeId, HTMLLinkElementTypeId, HTMLLIElementTypeId, HTMLMapElementTypeId, diff --git a/src/components/script/dom/htmllegendelement.rs b/src/components/script/dom/htmllegendelement.rs new file mode 100644 index 00000000000..f7f67e87265 --- /dev/null +++ b/src/components/script/dom/htmllegendelement.rs @@ -0,0 +1,19 @@ +/* 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::htmlelement::HTMLElement; + +pub struct HTMLLegendElement { + parent: HTMLElement, +} + +impl HTMLLegendElement { + pub fn Align(&self) -> DOMString { + null_string + } + + pub fn SetAlign(&mut self, _align: &DOMString, _rv: &mut ErrorResult) { + } +} diff --git a/src/components/script/html/hubbub_html_parser.rs b/src/components/script/html/hubbub_html_parser.rs index c2840c5ecde..e01562f6f32 100644 --- a/src/components/script/html/hubbub_html_parser.rs +++ b/src/components/script/html/hubbub_html_parser.rs @@ -208,6 +208,7 @@ fn build_element_from_tag(cx: *JSContext, tag: &str) -> AbstractNode handle_element!(cx, tag, "head", HTMLHeadElementTypeId, HTMLHeadElement, []); handle_element!(cx, tag, "html", HTMLHtmlElementTypeId, HTMLHtmlElement, []); handle_element!(cx, tag, "input", HTMLInputElementTypeId, HTMLInputElement, []); + handle_element!(cx, tag, "legend", HTMLLegendElementTypeId, HTMLLegendElement, []); handle_element!(cx, tag, "link", HTMLLinkElementTypeId, HTMLLinkElement, []); handle_element!(cx, tag, "li", HTMLLIElementTypeId, HTMLLIElement, []); handle_element!(cx, tag, "map", HTMLMapElementTypeId, HTMLMapElement, []); diff --git a/src/components/script/script.rc b/src/components/script/script.rc index b8f9a112513..8f47fe00362 100644 --- a/src/components/script/script.rc +++ b/src/components/script/script.rc @@ -84,6 +84,7 @@ pub mod dom { pub mod htmliframeelement; pub mod htmlimageelement; pub mod htmlinputelement; + pub mod htmllegendelement; pub mod htmllielement; pub mod htmllinkelement; pub mod htmlmapelement; From 9919bae897c34d15492311b157170fe71dfdff1d Mon Sep 17 00:00:00 2001 From: Tetsuharu OHZEKI Date: Sat, 31 Aug 2013 03:42:02 +0900 Subject: [PATCH 4/8] Generate bindings for HTMLLabelElement. --- .../script/dom/bindings/codegen/Bindings.conf | 1 + .../bindings/codegen/HTMLLabelElement.webidl | 24 +++++++++++++++++++ src/components/script/dom/bindings/element.rs | 2 ++ src/components/script/dom/bindings/node.rs | 1 + src/components/script/dom/element.rs | 1 + src/components/script/dom/htmllabelelement.rs | 19 +++++++++++++++ .../script/html/hubbub_html_parser.rs | 1 + src/components/script/script.rc | 1 + 8 files changed, 50 insertions(+) create mode 100644 src/components/script/dom/bindings/codegen/HTMLLabelElement.webidl create mode 100644 src/components/script/dom/htmllabelelement.rs diff --git a/src/components/script/dom/bindings/codegen/Bindings.conf b/src/components/script/dom/bindings/codegen/Bindings.conf index d29f8e3222f..15c1fad3297 100644 --- a/src/components/script/dom/bindings/codegen/Bindings.conf +++ b/src/components/script/dom/bindings/codegen/Bindings.conf @@ -580,6 +580,7 @@ addHTMLElement('HTMLHRElement') addHTMLElement('HTMLIFrameElement') addHTMLElement('HTMLImageElement') addHTMLElement('HTMLInputElement') +addHTMLElement('HTMLLabelElement') addHTMLElement('HTMLLegendElement') addHTMLElement('HTMLLIElement') addHTMLElement('HTMLLinkElement') diff --git a/src/components/script/dom/bindings/codegen/HTMLLabelElement.webidl b/src/components/script/dom/bindings/codegen/HTMLLabelElement.webidl new file mode 100644 index 00000000000..0b0ee0b9d19 --- /dev/null +++ b/src/components/script/dom/bindings/codegen/HTMLLabelElement.webidl @@ -0,0 +1,24 @@ +/* -*- 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/ + * + * © 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. + */ + +// import from http://mxr.mozilla.org/mozilla-central/source/dom/webidl/ + +interface HTMLLabelElement : HTMLElement { +/* FIXME: + readonly attribute HTMLFormElement? form; +*/ + attribute DOMString htmlFor; +/* + readonly attribute HTMLElement? control; +*/ +}; diff --git a/src/components/script/dom/bindings/element.rs b/src/components/script/dom/bindings/element.rs index 95eae0bc7e3..805dea3d2fe 100644 --- a/src/components/script/dom/bindings/element.rs +++ b/src/components/script/dom/bindings/element.rs @@ -92,6 +92,8 @@ generate_cacheable_wrapper!(HTMLImageElement, HTMLImageElementBinding::Wrap) generate_binding_object!(HTMLImageElement) generate_cacheable_wrapper!(HTMLInputElement, HTMLInputElementBinding::Wrap) generate_binding_object!(HTMLInputElement) +generate_cacheable_wrapper!(HTMLLabelElement, HTMLLabelElementBinding::Wrap) +generate_binding_object!(HTMLLabelElement) generate_cacheable_wrapper!(HTMLLegendElement, HTMLLegendElementBinding::Wrap) generate_binding_object!(HTMLLegendElement) generate_cacheable_wrapper!(HTMLLIElement, HTMLLIElementBinding::Wrap) diff --git a/src/components/script/dom/bindings/node.rs b/src/components/script/dom/bindings/node.rs index 39260bb3ae6..9e210bfee35 100644 --- a/src/components/script/dom/bindings/node.rs +++ b/src/components/script/dom/bindings/node.rs @@ -49,6 +49,7 @@ pub fn create(cx: *JSContext, node: &mut AbstractNode) -> *JSObject ElementNodeTypeId(HTMLIframeElementTypeId) => generate_element!(HTMLIFrameElement), ElementNodeTypeId(HTMLImageElementTypeId) => generate_element!(HTMLImageElement), ElementNodeTypeId(HTMLInputElementTypeId) => generate_element!(HTMLInputElement), + ElementNodeTypeId(HTMLLabelElementTypeId) => generate_element!(HTMLLabelElement), ElementNodeTypeId(HTMLLegendElementTypeId) => generate_element!(HTMLLegendElement), ElementNodeTypeId(HTMLLIElementTypeId) => generate_element!(HTMLLIElement), ElementNodeTypeId(HTMLLinkElementTypeId) => generate_element!(HTMLLinkElement), diff --git a/src/components/script/dom/element.rs b/src/components/script/dom/element.rs index 038494c8d36..aca3ae0df2b 100644 --- a/src/components/script/dom/element.rs +++ b/src/components/script/dom/element.rs @@ -73,6 +73,7 @@ pub enum ElementTypeId { HTMLIframeElementTypeId, HTMLImageElementTypeId, HTMLInputElementTypeId, + HTMLLabelElementTypeId, HTMLLegendElementTypeId, HTMLLinkElementTypeId, HTMLLIElementTypeId, diff --git a/src/components/script/dom/htmllabelelement.rs b/src/components/script/dom/htmllabelelement.rs new file mode 100644 index 00000000000..1df3924cff2 --- /dev/null +++ b/src/components/script/dom/htmllabelelement.rs @@ -0,0 +1,19 @@ +/* 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}; +use dom::htmlelement::HTMLElement; + +pub struct HTMLLabelElement { + parent: HTMLElement, +} + +impl HTMLLabelElement { + pub fn HtmlFor(&self) -> DOMString { + null_string + } + + pub fn SetHtmlFor(&mut self, _html_for: &DOMString) { + } +} diff --git a/src/components/script/html/hubbub_html_parser.rs b/src/components/script/html/hubbub_html_parser.rs index e01562f6f32..4587a46e4f5 100644 --- a/src/components/script/html/hubbub_html_parser.rs +++ b/src/components/script/html/hubbub_html_parser.rs @@ -208,6 +208,7 @@ fn build_element_from_tag(cx: *JSContext, tag: &str) -> AbstractNode handle_element!(cx, tag, "head", HTMLHeadElementTypeId, HTMLHeadElement, []); handle_element!(cx, tag, "html", HTMLHtmlElementTypeId, HTMLHtmlElement, []); handle_element!(cx, tag, "input", HTMLInputElementTypeId, HTMLInputElement, []); + handle_element!(cx, tag, "label", HTMLLabelElementTypeId, HTMLLabelElement, []); handle_element!(cx, tag, "legend", HTMLLegendElementTypeId, HTMLLegendElement, []); handle_element!(cx, tag, "link", HTMLLinkElementTypeId, HTMLLinkElement, []); handle_element!(cx, tag, "li", HTMLLIElementTypeId, HTMLLIElement, []); diff --git a/src/components/script/script.rc b/src/components/script/script.rc index 8f47fe00362..b30cb5573d6 100644 --- a/src/components/script/script.rc +++ b/src/components/script/script.rc @@ -84,6 +84,7 @@ pub mod dom { pub mod htmliframeelement; pub mod htmlimageelement; pub mod htmlinputelement; + pub mod htmllabelelement; pub mod htmllegendelement; pub mod htmllielement; pub mod htmllinkelement; From d3108a898dd6b5f60263c10fe704d26fc98b05ec Mon Sep 17 00:00:00 2001 From: Tetsuharu OHZEKI Date: Sat, 31 Aug 2013 04:02:52 +0900 Subject: [PATCH 5/8] Generate bindings for HTMLTrackElement. --- .../script/dom/bindings/codegen/Bindings.conf | 1 + .../bindings/codegen/HTMLTrackElement.webidl | 36 +++++++++++++ src/components/script/dom/bindings/element.rs | 2 + src/components/script/dom/bindings/node.rs | 1 + src/components/script/dom/element.rs | 1 + src/components/script/dom/htmltrackelement.rs | 51 +++++++++++++++++++ .../script/html/hubbub_html_parser.rs | 1 + src/components/script/script.rc | 1 + 8 files changed, 94 insertions(+) create mode 100644 src/components/script/dom/bindings/codegen/HTMLTrackElement.webidl create mode 100644 src/components/script/dom/htmltrackelement.rs diff --git a/src/components/script/dom/bindings/codegen/Bindings.conf b/src/components/script/dom/bindings/codegen/Bindings.conf index 15c1fad3297..39f19bf9df1 100644 --- a/src/components/script/dom/bindings/codegen/Bindings.conf +++ b/src/components/script/dom/bindings/codegen/Bindings.conf @@ -613,6 +613,7 @@ addHTMLElement('HTMLTemplateElement') addHTMLElement('HTMLTextAreaElement') addHTMLElement('HTMLTimeElement') addHTMLElement('HTMLTitleElement') +addHTMLElement('HTMLTrackElement') addHTMLElement('HTMLUListElement') addHTMLElement('HTMLUnknownElement') diff --git a/src/components/script/dom/bindings/codegen/HTMLTrackElement.webidl b/src/components/script/dom/bindings/codegen/HTMLTrackElement.webidl new file mode 100644 index 00000000000..2cf06ea0d00 --- /dev/null +++ b/src/components/script/dom/bindings/codegen/HTMLTrackElement.webidl @@ -0,0 +1,36 @@ +/* -*- 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-track-element + */ + +// import from http://mxr.mozilla.org/mozilla-central/source/dom/webidl/ + +/* +[Pref="media.webvtt.enabled"] +*/ +interface HTMLTrackElement : HTMLElement { + [SetterThrows, Pure] + attribute DOMString kind; + [SetterThrows, Pure] + attribute DOMString src; + [SetterThrows, Pure] + attribute DOMString srclang; + [SetterThrows, Pure] + attribute DOMString label; + [SetterThrows, Pure] + attribute boolean default; + + const unsigned short NONE = 0; + const unsigned short LOADING = 1; + const unsigned short LOADED = 2; + const unsigned short ERROR = 3; + readonly attribute unsigned short readyState; +/* + TODO: + readonly attribute TextTrack track; +*/ +}; diff --git a/src/components/script/dom/bindings/element.rs b/src/components/script/dom/bindings/element.rs index 805dea3d2fe..6478f0289dc 100644 --- a/src/components/script/dom/bindings/element.rs +++ b/src/components/script/dom/bindings/element.rs @@ -158,6 +158,8 @@ generate_cacheable_wrapper!(HTMLTitleElement, HTMLTitleElementBinding::Wrap) generate_binding_object!(HTMLTitleElement) generate_cacheable_wrapper!(HTMLTimeElement, HTMLTimeElementBinding::Wrap) generate_binding_object!(HTMLTimeElement) +generate_cacheable_wrapper!(HTMLTrackElement, HTMLTrackElementBinding::Wrap) +generate_binding_object!(HTMLTrackElement) generate_cacheable_wrapper!(HTMLUListElement, HTMLUListElementBinding::Wrap) generate_binding_object!(HTMLUListElement) generate_cacheable_wrapper!(HTMLUnknownElement, HTMLUnknownElementBinding::Wrap) diff --git a/src/components/script/dom/bindings/node.rs b/src/components/script/dom/bindings/node.rs index 9e210bfee35..ef76c931ffc 100644 --- a/src/components/script/dom/bindings/node.rs +++ b/src/components/script/dom/bindings/node.rs @@ -82,6 +82,7 @@ pub fn create(cx: *JSContext, node: &mut AbstractNode) -> *JSObject ElementNodeTypeId(HTMLTextAreaElementTypeId) => generate_element!(HTMLTextAreaElement), ElementNodeTypeId(HTMLTimeElementTypeId) => generate_element!(HTMLTimeElement), ElementNodeTypeId(HTMLTitleElementTypeId) => generate_element!(HTMLTitleElement), + ElementNodeTypeId(HTMLTrackElementTypeId) => generate_element!(HTMLTrackElement), ElementNodeTypeId(HTMLUListElementTypeId) => generate_element!(HTMLUListElement), ElementNodeTypeId(HTMLUnknownElementTypeId) => generate_element!(HTMLUnknownElement), CommentNodeTypeId => generate_element!(Comment), diff --git a/src/components/script/dom/element.rs b/src/components/script/dom/element.rs index aca3ae0df2b..4e66db145a2 100644 --- a/src/components/script/dom/element.rs +++ b/src/components/script/dom/element.rs @@ -106,6 +106,7 @@ pub enum ElementTypeId { HTMLTextAreaElementTypeId, HTMLTimeElementTypeId, HTMLTitleElementTypeId, + HTMLTrackElementTypeId, HTMLUListElementTypeId, HTMLUnknownElementTypeId, } diff --git a/src/components/script/dom/htmltrackelement.rs b/src/components/script/dom/htmltrackelement.rs new file mode 100644 index 00000000000..40ba4e0f4cb --- /dev/null +++ b/src/components/script/dom/htmltrackelement.rs @@ -0,0 +1,51 @@ +/* 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::htmlelement::HTMLElement; + +pub struct HTMLTrackElement { + parent: HTMLElement, +} + +impl HTMLTrackElement { + pub fn Kind(&self) -> DOMString { + null_string + } + + pub fn SetKind(&mut self, _kind: &DOMString, _rv: &mut ErrorResult) { + } + + pub fn Src(&self) -> DOMString { + null_string + } + + pub fn SetSrc(&mut self, _src: &DOMString, _rv: &mut ErrorResult) { + } + + pub fn Srclang(&self) -> DOMString { + null_string + } + + pub fn SetSrclang(&mut self, _srclang: &DOMString, _rv: &mut ErrorResult) { + } + + pub fn Label(&self) -> DOMString { + null_string + } + + pub fn SetLabel(&mut self, _label: &DOMString, _rv: &mut ErrorResult) { + } + + pub fn Default(&self) -> bool { + false + } + + pub fn SetDefault(&mut self, _default: bool, _rv: &mut ErrorResult) { + } + + pub fn ReadyState(&self) -> u16 { + 0 + } +} diff --git a/src/components/script/html/hubbub_html_parser.rs b/src/components/script/html/hubbub_html_parser.rs index 4587a46e4f5..bfc205aa689 100644 --- a/src/components/script/html/hubbub_html_parser.rs +++ b/src/components/script/html/hubbub_html_parser.rs @@ -242,6 +242,7 @@ fn build_element_from_tag(cx: *JSContext, tag: &str) -> AbstractNode handle_element!(cx, tag, "time", HTMLTimeElementTypeId, HTMLTimeElement, []); handle_element!(cx, tag, "title", HTMLTitleElementTypeId, HTMLTitleElement, []); handle_element!(cx, tag, "tr", HTMLTableRowElementTypeId, HTMLTableRowElement, []); + handle_element!(cx, tag, "track", HTMLTrackElementTypeId, HTMLTrackElement, []); handle_element!(cx, tag, "ul", HTMLUListElementTypeId, HTMLUListElement, []); handle_element!(cx, tag, "img", HTMLImageElementTypeId, HTMLImageElement, [(image: None)]); diff --git a/src/components/script/script.rc b/src/components/script/script.rc index b30cb5573d6..4e8f78d974f 100644 --- a/src/components/script/script.rc +++ b/src/components/script/script.rc @@ -117,6 +117,7 @@ pub mod dom { pub mod htmltextareaelement; pub mod htmltimeelement; pub mod htmltitleelement; + pub mod htmltrackelement; pub mod htmlulistelement; pub mod htmlunknownelement; pub mod mouseevent; From a76e46416a6d68f5a3c5b3bb5badff25078f1b94 Mon Sep 17 00:00:00 2001 From: Tetsuharu OHZEKI Date: Sat, 24 Aug 2013 01:31:24 +0900 Subject: [PATCH 6/8] Generate bindings for HTMLMediaElement. --- .../script/dom/bindings/codegen/Bindings.conf | 1 + .../bindings/codegen/HTMLMediaElement.webidl | 188 ++++++++++++++++++ src/components/script/dom/bindings/element.rs | 2 + src/components/script/dom/bindings/node.rs | 1 + src/components/script/dom/element.rs | 1 + src/components/script/dom/htmlmediaelement.rs | 142 +++++++++++++ src/components/script/script.rc | 1 + 7 files changed, 336 insertions(+) create mode 100644 src/components/script/dom/bindings/codegen/HTMLMediaElement.webidl create mode 100644 src/components/script/dom/htmlmediaelement.rs diff --git a/src/components/script/dom/bindings/codegen/Bindings.conf b/src/components/script/dom/bindings/codegen/Bindings.conf index 39f19bf9df1..9c4ad41d61b 100644 --- a/src/components/script/dom/bindings/codegen/Bindings.conf +++ b/src/components/script/dom/bindings/codegen/Bindings.conf @@ -585,6 +585,7 @@ addHTMLElement('HTMLLegendElement') addHTMLElement('HTMLLIElement') addHTMLElement('HTMLLinkElement') addHTMLElement('HTMLMapElement') +addHTMLElement('HTMLMediaElement') addHTMLElement('HTMLMetaElement') addHTMLElement('HTMLMeterElement') addHTMLElement('HTMLModElement') diff --git a/src/components/script/dom/bindings/codegen/HTMLMediaElement.webidl b/src/components/script/dom/bindings/codegen/HTMLMediaElement.webidl new file mode 100644 index 00000000000..25f03e5111d --- /dev/null +++ b/src/components/script/dom/bindings/codegen/HTMLMediaElement.webidl @@ -0,0 +1,188 @@ +/* -*- 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/#media-elements + * + * © 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 HTMLMediaElement : HTMLElement { +/* + // error state + readonly attribute MediaError? error; +*/ + // network state + [SetterThrows] + attribute DOMString src; + readonly attribute DOMString currentSrc; + + [SetterThrows] + attribute DOMString crossOrigin; + const unsigned short NETWORK_EMPTY = 0; + const unsigned short NETWORK_IDLE = 1; + const unsigned short NETWORK_LOADING = 2; + const unsigned short NETWORK_NO_SOURCE = 3; +/* + TODO: + readonly attribute unsigned short networkState; +*/ + [SetterThrows] + attribute DOMString preload; +/* + [Creator] + readonly attribute TimeRanges buffered; +*/ + void load(); + DOMString canPlayType(DOMString type); + + // ready state + const unsigned short HAVE_NOTHING = 0; + const unsigned short HAVE_METADATA = 1; + const unsigned short HAVE_CURRENT_DATA = 2; + const unsigned short HAVE_FUTURE_DATA = 3; + const unsigned short HAVE_ENOUGH_DATA = 4; + readonly attribute unsigned short readyState; + readonly attribute boolean seeking; + + // playback state + [SetterThrows] + attribute double currentTime; + // TODO: Bug 847375 - void fastSeek(double time); +/* + TODO: + readonly attribute unrestricted double duration; +*/ + // TODO: Bug 847376 - readonly attribute any startDate; + readonly attribute boolean paused; + [SetterThrows] + attribute double defaultPlaybackRate; + [SetterThrows] + attribute double playbackRate; +/* + [Creator] + readonly attribute TimeRanges played; + [Creator] + readonly attribute TimeRanges seekable; +*/ + readonly attribute boolean ended; + [SetterThrows] + attribute boolean autoplay; + [SetterThrows] + attribute boolean loop; + [Throws] + void play(); + [Throws] + void pause(); + + // TODO: Bug 847377 - mediaGroup and MediaController + // media controller + // attribute DOMString mediaGroup; + // attribute MediaController? controller; + + // controls + [SetterThrows] + attribute boolean controls; + [SetterThrows] + attribute double volume; + attribute boolean muted; + [SetterThrows] + attribute boolean defaultMuted; + + // TODO: Bug 847379 + // tracks + //readonly attribute AudioTrackList audioTracks; + //readonly attribute VideoTrackList videoTracks; +/* + [Pref="media.webvtt.enabled"] + readonly attribute TextTrackList textTracks; + [Pref="media.webvtt.enabled"] + TextTrack addTextTrack(TextTrackKind kind, + optional DOMString label = "", + optional DOMString language = ""); +*/ +}; + +/* +// Mozilla extensions: +partial interface HTMLMediaElement { + attribute MediaStream? mozSrcObject; + attribute boolean mozPreservesPitch; + readonly attribute boolean mozAutoplayEnabled; + + // Mozilla extension: stream capture + [Throws] + MediaStream mozCaptureStream(); + [Throws] + MediaStream mozCaptureStreamUntilEnded(); + readonly attribute boolean mozAudioCaptured; + + // Mozilla extension: extra stream metadata information, used as part + // of MozAudioAvailable events and the mozWriteAudio() method. The + // mozFrameBufferLength method allows for the size of the framebuffer + // used within MozAudioAvailable events to be changed. The new size must + // be between 512 and 16384. The default size, for a media element with + // audio is (mozChannels * 1024). + [GetterThrows] + readonly attribute unsigned long mozChannels; + [GetterThrows] + readonly attribute unsigned long mozSampleRate; + [Throws] + attribute unsigned long mozFrameBufferLength; + + // Mozilla extension: return embedded metadata from the stream as a + // JSObject with key:value pairs for each tag. This can be used by + // player interfaces to display the song title, artist, etc. + [Throws] + object? mozGetMetadata(); + + // Mozilla extension: provides access to the fragment end time if + // the media element has a fragment URI for the currentSrc, otherwise + // it is equal to the media duration. + readonly attribute double mozFragmentEnd; + + // Mozilla extension: an audio channel type for media elements. + // An exception is thrown if the app tries to change the audio channel type + // without the permission (manifest file for B2G apps). + // The supported values are: + // * normal (default value) + // Automatically paused if "notification" or higher priority channel + // is played + // Use case: normal applications + // * content + // Automatically paused if "notification" or higher priority channel + // is played. Also paused if another app starts using "content" + // channel. Using this channel never affects applications using + // the "normal" channel. + // Use case: video/audio players + // * notification + // Automatically paused if "alarm" or higher priority channel is played. + // Use case: New email, incoming SMS + // * alarm + // Automatically paused if "telephony" or higher priority channel is + // played. + // User case: Alarm clock, calendar alarms + // * telephony + // Automatically paused if "ringer" or higher priority + // channel is played. + // Use case: dialer, voip + // * ringer + // Automatically paused if "publicnotification" or higher priority + // channel is played. + // Use case: dialer, voip + // * publicnotification + // Always plays in speaker, even when headphones are plugged in. + // Use case: Camera shutter sound. + [SetterThrows] + attribute DOMString mozAudioChannelType; + + // In addition the media element has this new events: + // * onmozinterruptbegin - called when the media element is interrupted + // because of the audiochannel manager. + // * onmozinterruptend - called when the interruption is concluded +}; +*/ diff --git a/src/components/script/dom/bindings/element.rs b/src/components/script/dom/bindings/element.rs index 6478f0289dc..af5e8174003 100644 --- a/src/components/script/dom/bindings/element.rs +++ b/src/components/script/dom/bindings/element.rs @@ -102,6 +102,8 @@ generate_cacheable_wrapper!(HTMLLinkElement, HTMLLinkElementBinding::Wrap) generate_binding_object!(HTMLLinkElement) generate_cacheable_wrapper!(HTMLMapElement, HTMLMapElementBinding::Wrap) generate_binding_object!(HTMLMapElement) +generate_cacheable_wrapper!(HTMLMediaElement, HTMLMediaElementBinding::Wrap) +generate_binding_object!(HTMLMediaElement) generate_cacheable_wrapper!(HTMLMetaElement, HTMLMetaElementBinding::Wrap) generate_binding_object!(HTMLMetaElement) generate_cacheable_wrapper!(HTMLMeterElement, HTMLMeterElementBinding::Wrap) diff --git a/src/components/script/dom/bindings/node.rs b/src/components/script/dom/bindings/node.rs index ef76c931ffc..5e45268d2b4 100644 --- a/src/components/script/dom/bindings/node.rs +++ b/src/components/script/dom/bindings/node.rs @@ -54,6 +54,7 @@ pub fn create(cx: *JSContext, node: &mut AbstractNode) -> *JSObject ElementNodeTypeId(HTMLLIElementTypeId) => generate_element!(HTMLLIElement), ElementNodeTypeId(HTMLLinkElementTypeId) => generate_element!(HTMLLinkElement), ElementNodeTypeId(HTMLMapElementTypeId) => generate_element!(HTMLMapElement), + ElementNodeTypeId(HTMLMediaElementTypeId) => generate_element!(HTMLMediaElement), ElementNodeTypeId(HTMLMetaElementTypeId) => generate_element!(HTMLMetaElement), ElementNodeTypeId(HTMLMeterElementTypeId) => generate_element!(HTMLMeterElement), ElementNodeTypeId(HTMLModElementTypeId) => generate_element!(HTMLModElement), diff --git a/src/components/script/dom/element.rs b/src/components/script/dom/element.rs index 4e66db145a2..59844882af5 100644 --- a/src/components/script/dom/element.rs +++ b/src/components/script/dom/element.rs @@ -78,6 +78,7 @@ pub enum ElementTypeId { HTMLLinkElementTypeId, HTMLLIElementTypeId, HTMLMapElementTypeId, + HTMLMediaElementTypeId, HTMLMetaElementTypeId, HTMLMeterElementTypeId, HTMLModElementTypeId, diff --git a/src/components/script/dom/htmlmediaelement.rs b/src/components/script/dom/htmlmediaelement.rs new file mode 100644 index 00000000000..009940ac926 --- /dev/null +++ b/src/components/script/dom/htmlmediaelement.rs @@ -0,0 +1,142 @@ +/* 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::element::ElementTypeId; +use dom::htmlelement::HTMLElement; + +pub struct HTMLMediaElement { + parent: HTMLElement, +} + +impl HTMLMediaElement { + pub fn new(type_id: ElementTypeId, tag_name: ~str) -> HTMLMediaElement { + HTMLMediaElement { + parent: HTMLElement::new(type_id, tag_name) + } + } +} + +impl HTMLMediaElement { + pub fn Src(&self) -> DOMString { + null_string + } + + pub fn SetSrc(&mut self, _src: &DOMString, _rv: &mut ErrorResult) { + } + + pub fn CurrentSrc(&self) -> DOMString { + null_string + } + + pub fn CrossOrigin(&self) -> DOMString { + null_string + } + + pub fn SetCrossOrigin(&mut self, _cross_origin: &DOMString, _rv: &mut ErrorResult) { + } + + pub fn Preload(&self) -> DOMString { + null_string + } + + pub fn SetPreload(&mut self, _preload: &DOMString, _rv: &mut ErrorResult) { + } + + pub fn Load(&self) { + } + + pub fn CanPlayType(&self, _type: &DOMString) -> DOMString { + null_string + } + + pub fn ReadyState(&self) -> u16 { + 0 + } + + pub fn Seeking(&self) -> bool { + false + } + + pub fn CurrentTime(&self) -> f64 { + 0f64 + } + + pub fn SetCurrentTime(&mut self, _current_time: f64, _rv: &mut ErrorResult) { + } + + pub fn GetDuration(&self) -> f64 { + 0f64 + } + + pub fn Paused(&self) -> bool { + false + } + + pub fn DefaultPlaybackRate(&self) -> f64 { + 0f64 + } + + pub fn SetDefaultPlaybackRate(&mut self, _default_playback_rate: f64, _rv: &mut ErrorResult) { + } + + pub fn PlaybackRate(&self) -> f64 { + 0f64 + } + + pub fn SetPlaybackRate(&mut self, _playback_rate: f64, _rv: &mut ErrorResult) { + } + + pub fn Ended(&self) -> bool { + false + } + + pub fn Autoplay(&self) -> bool { + false + } + + pub fn SetAutoplay(&mut self, _autoplay: bool, _rv: &mut ErrorResult) { + } + + pub fn Loop(&self) -> bool { + false + } + + pub fn SetLoop(&mut self, _loop: bool, _rv: &mut ErrorResult) { + } + + pub fn Play(&self, _rv: &mut ErrorResult) { + } + + pub fn Pause(&self, _rv: &mut ErrorResult) { + } + + pub fn Controls(&self) -> bool { + false + } + + pub fn SetControls(&mut self, _controls: bool, _rv: &mut ErrorResult) { + } + + pub fn Volume(&self) -> f64 { + 0f64 + } + + pub fn SetVolume(&mut self, _volume: f64, _rv: &mut ErrorResult) { + } + + pub fn Muted(&self) -> bool { + false + } + + pub fn SetMuted(&mut self, _muted: bool) { + } + + pub fn DefaultMuted(&self) -> bool { + false + } + + pub fn SetDefaultMuted(&mut self, _default_muted: bool, _rv: &mut ErrorResult) { + } +} diff --git a/src/components/script/script.rc b/src/components/script/script.rc index 4e8f78d974f..a08a354390c 100644 --- a/src/components/script/script.rc +++ b/src/components/script/script.rc @@ -89,6 +89,7 @@ pub mod dom { pub mod htmllielement; pub mod htmllinkelement; pub mod htmlmapelement; + pub mod htmlmediaelement; pub mod htmlmetaelement; pub mod htmlmeterelement; pub mod htmlmodelement; From 17e888bfea95dd0da29898decd284b79d9681d7c Mon Sep 17 00:00:00 2001 From: Tetsuharu OHZEKI Date: Sat, 31 Aug 2013 19:46:55 +0900 Subject: [PATCH 7/8] Generate bindings for HTMLAudioElement, HTMLVideoElement. --- .../script/dom/bindings/codegen/Bindings.conf | 3 +- .../bindings/codegen/HTMLAudioElement.webidl | 37 ++++++++++++ .../bindings/codegen/HTMLVideoElement.webidl | 56 +++++++++++++++++++ src/components/script/dom/bindings/element.rs | 4 ++ src/components/script/dom/bindings/node.rs | 2 + src/components/script/dom/element.rs | 2 + src/components/script/dom/htmlaudioelement.rs | 12 ++++ src/components/script/dom/htmlvideoelement.rs | 41 ++++++++++++++ .../script/html/hubbub_html_parser.rs | 16 ++++++ src/components/script/script.rc | 2 + 10 files changed, 174 insertions(+), 1 deletion(-) create mode 100644 src/components/script/dom/bindings/codegen/HTMLAudioElement.webidl create mode 100644 src/components/script/dom/bindings/codegen/HTMLVideoElement.webidl create mode 100644 src/components/script/dom/htmlaudioelement.rs create mode 100644 src/components/script/dom/htmlvideoelement.rs diff --git a/src/components/script/dom/bindings/codegen/Bindings.conf b/src/components/script/dom/bindings/codegen/Bindings.conf index 9c4ad41d61b..bef2d7c7e22 100644 --- a/src/components/script/dom/bindings/codegen/Bindings.conf +++ b/src/components/script/dom/bindings/codegen/Bindings.conf @@ -556,6 +556,7 @@ addHTMLElement('Text') addHTMLElement('HTMLAnchorElement') addHTMLElement('HTMLAppletElement') addHTMLElement('HTMLAreaElement') +addHTMLElement('HTMLAudioElement') addHTMLElement('HTMLButtonElement') addHTMLElement('HTMLBaseElement') addHTMLElement('HTMLBodyElement') @@ -616,6 +617,7 @@ addHTMLElement('HTMLTimeElement') addHTMLElement('HTMLTitleElement') addHTMLElement('HTMLTrackElement') addHTMLElement('HTMLUListElement') +addHTMLElement('HTMLVideoElement') addHTMLElement('HTMLUnknownElement') # If you add one of these, you need to make sure nsDOMQS.h has the relevant @@ -625,7 +627,6 @@ def addExternalHTMLElement(element): addExternalIface(element, nativeType=nativeElement, headerFile=nativeElement + '.h') -addExternalHTMLElement('HTMLVideoElement') addExternalIface('CanvasGradient', headerFile='nsIDOMCanvasRenderingContext2D.h') addExternalIface('CanvasPattern', headerFile='nsIDOMCanvasRenderingContext2D.h') addExternalIface('CSSRule') diff --git a/src/components/script/dom/bindings/codegen/HTMLAudioElement.webidl b/src/components/script/dom/bindings/codegen/HTMLAudioElement.webidl new file mode 100644 index 00000000000..90084eb52eb --- /dev/null +++ b/src/components/script/dom/bindings/codegen/HTMLAudioElement.webidl @@ -0,0 +1,37 @@ +/* -*- 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-audio-element + * + * © 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. + */ + +// import from http://mxr.mozilla.org/mozilla-central/source/dom/webidl/ + +[NamedConstructor=Audio(optional DOMString src)] +interface HTMLAudioElement : HTMLMediaElement {}; + +partial interface HTMLAudioElement +{ +/* + // Setup the audio stream for writing + [Pref="media.audio_data.enabled", Throws] + void mozSetup(unsigned long channels, unsigned long rate); + + // Write audio to the audio stream + [Pref="media.audio_data.enabled", Throws] + unsigned long mozWriteAudio(Float32Array data); + [Pref="media.audio_data.enabled", Throws] + unsigned long mozWriteAudio(sequence data); + + // Get the current offset (measured in samples since the start) of the audio + // stream created using mozWriteAudio(). + [Pref="media.audio_data.enabled", Throws] + unsigned long long mozCurrentSampleOffset(); +*/ +}; diff --git a/src/components/script/dom/bindings/codegen/HTMLVideoElement.webidl b/src/components/script/dom/bindings/codegen/HTMLVideoElement.webidl new file mode 100644 index 00000000000..4663a6addbc --- /dev/null +++ b/src/components/script/dom/bindings/codegen/HTMLVideoElement.webidl @@ -0,0 +1,56 @@ +/* -*- 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-video-element + * + * © 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. + */ + +// import from http://mxr.mozilla.org/mozilla-central/source/dom/webidl/ + +interface HTMLVideoElement : HTMLMediaElement { + [SetterThrows] + attribute unsigned long width; + [SetterThrows] + attribute unsigned long height; + readonly attribute unsigned long videoWidth; + readonly attribute unsigned long videoHeight; + [SetterThrows] + attribute DOMString poster; +}; +/* +partial interface HTMLVideoElement { + // A count of the number of video frames that have demuxed from the media + // resource. If we were playing perfectly, we'd be able to paint this many + // frames. + readonly attribute unsigned long mozParsedFrames; + + // A count of the number of frames that have been decoded. We may drop + // frames if the decode is taking too much time. + readonly attribute unsigned long mozDecodedFrames; + + // A count of the number of frames that have been presented to the rendering + // pipeline. We may drop frames if they arrive late at the renderer. + readonly attribute unsigned long mozPresentedFrames; + + // Number of presented frames which were painted on screen. + readonly attribute unsigned long mozPaintedFrames; + + // Time which the last painted video frame was late by, in seconds. + readonly attribute double mozFrameDelay; + + // True if the video has an audio track available. + readonly attribute boolean mozHasAudio; +}; + +// https://dvcs.w3.org/hg/html-media/raw-file/default/media-source/media-source.html#idl-def-HTMLVideoElement +partial interface HTMLVideoElement { + [Pref="media.mediasource.enabled", Creator] + VideoPlaybackQuality getVideoPlaybackQuality(); +}; +*/ diff --git a/src/components/script/dom/bindings/element.rs b/src/components/script/dom/bindings/element.rs index af5e8174003..9c925a22d9a 100644 --- a/src/components/script/dom/bindings/element.rs +++ b/src/components/script/dom/bindings/element.rs @@ -48,6 +48,8 @@ generate_cacheable_wrapper!(HTMLAppletElement, HTMLAppletElementBinding::Wrap) generate_binding_object!(HTMLAppletElement) generate_cacheable_wrapper!(HTMLAreaElement, HTMLAreaElementBinding::Wrap) generate_binding_object!(HTMLAreaElement) +generate_cacheable_wrapper!(HTMLAudioElement, HTMLAudioElementBinding::Wrap) +generate_binding_object!(HTMLAudioElement) generate_cacheable_wrapper!(HTMLBaseElement, HTMLBaseElementBinding::Wrap) generate_binding_object!(HTMLBaseElement) generate_cacheable_wrapper!(HTMLBodyElement, HTMLBodyElementBinding::Wrap) @@ -164,5 +166,7 @@ generate_cacheable_wrapper!(HTMLTrackElement, HTMLTrackElementBinding::Wrap) generate_binding_object!(HTMLTrackElement) generate_cacheable_wrapper!(HTMLUListElement, HTMLUListElementBinding::Wrap) generate_binding_object!(HTMLUListElement) +generate_cacheable_wrapper!(HTMLVideoElement, HTMLVideoElementBinding::Wrap) +generate_binding_object!(HTMLVideoElement) generate_cacheable_wrapper!(HTMLUnknownElement, HTMLUnknownElementBinding::Wrap) generate_binding_object!(HTMLUnknownElement) diff --git a/src/components/script/dom/bindings/node.rs b/src/components/script/dom/bindings/node.rs index 5e45268d2b4..059cbe0061c 100644 --- a/src/components/script/dom/bindings/node.rs +++ b/src/components/script/dom/bindings/node.rs @@ -26,6 +26,7 @@ pub fn create(cx: *JSContext, node: &mut AbstractNode) -> *JSObject ElementNodeTypeId(HTMLAnchorElementTypeId) => generate_element!(HTMLAnchorElement), ElementNodeTypeId(HTMLAppletElementTypeId) => generate_element!(HTMLAppletElement), ElementNodeTypeId(HTMLAreaElementTypeId) => generate_element!(HTMLAreaElement), + ElementNodeTypeId(HTMLAudioElementTypeId) => generate_element!(HTMLAudioElement), ElementNodeTypeId(HTMLBaseElementTypeId) => generate_element!(HTMLBaseElement), ElementNodeTypeId(HTMLBodyElementTypeId) => generate_element!(HTMLBodyElement), ElementNodeTypeId(HTMLBRElementTypeId) => generate_element!(HTMLBRElement), @@ -85,6 +86,7 @@ pub fn create(cx: *JSContext, node: &mut AbstractNode) -> *JSObject ElementNodeTypeId(HTMLTitleElementTypeId) => generate_element!(HTMLTitleElement), ElementNodeTypeId(HTMLTrackElementTypeId) => generate_element!(HTMLTrackElement), ElementNodeTypeId(HTMLUListElementTypeId) => generate_element!(HTMLUListElement), + ElementNodeTypeId(HTMLVideoElementTypeId) => generate_element!(HTMLVideoElement), ElementNodeTypeId(HTMLUnknownElementTypeId) => generate_element!(HTMLUnknownElement), CommentNodeTypeId => generate_element!(Comment), DoctypeNodeTypeId => generate_element!(DocumentType), diff --git a/src/components/script/dom/element.rs b/src/components/script/dom/element.rs index 59844882af5..ace84169b33 100644 --- a/src/components/script/dom/element.rs +++ b/src/components/script/dom/element.rs @@ -50,6 +50,7 @@ pub enum ElementTypeId { HTMLAnchorElementTypeId, HTMLAppletElementTypeId, HTMLAreaElementTypeId, + HTMLAudioElementTypeId, HTMLBaseElementTypeId, HTMLBRElementTypeId, HTMLBodyElementTypeId, @@ -109,6 +110,7 @@ pub enum ElementTypeId { HTMLTitleElementTypeId, HTMLTrackElementTypeId, HTMLUListElementTypeId, + HTMLVideoElementTypeId, HTMLUnknownElementTypeId, } diff --git a/src/components/script/dom/htmlaudioelement.rs b/src/components/script/dom/htmlaudioelement.rs new file mode 100644 index 00000000000..f7586e2460e --- /dev/null +++ b/src/components/script/dom/htmlaudioelement.rs @@ -0,0 +1,12 @@ +/* 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::htmlmediaelement::HTMLMediaElement; + +pub struct HTMLAudioElement { + parent: HTMLMediaElement +} + +impl HTMLAudioElement { +} diff --git a/src/components/script/dom/htmlvideoelement.rs b/src/components/script/dom/htmlvideoelement.rs new file mode 100644 index 00000000000..19a6a546fed --- /dev/null +++ b/src/components/script/dom/htmlvideoelement.rs @@ -0,0 +1,41 @@ +/* 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::htmlmediaelement::HTMLMediaElement; + +pub struct HTMLVideoElement { + parent: HTMLMediaElement +} + +impl HTMLVideoElement { + pub fn Width(&self) -> u32 { + 0 + } + + pub fn SetWidth(&mut self, _width: u32, _rv: &ErrorResult) { + } + + pub fn Height(&self) -> u32 { + 0 + } + + pub fn SetHeight(&mut self, _height: u32, _rv: &ErrorResult) { + } + + pub fn VideoWidth(&self) -> u32 { + 0 + } + + pub fn VideoHeight(&self) -> u32 { + 0 + } + + pub fn Poster(&self) -> DOMString { + null_string + } + + pub fn SetPoster(&mut self, _poster: &DOMString, _rv: &ErrorResult) { + } +} diff --git a/src/components/script/html/hubbub_html_parser.rs b/src/components/script/html/hubbub_html_parser.rs index bfc205aa689..70948f3923f 100644 --- a/src/components/script/html/hubbub_html_parser.rs +++ b/src/components/script/html/hubbub_html_parser.rs @@ -58,6 +58,19 @@ macro_rules! handle_htmlelement( } ) ) +macro_rules! handle_htmlmediaelement( + ($cx: expr, $tag:expr, $string:expr, $type_id:expr, $ctor:ident) => ( + if eq_slice($tag, $string) { + let _element = @$ctor { + parent: HTMLMediaElement::new($type_id, ($tag).to_str()) + }; + unsafe { + return Node::as_abstract_node(cx, _element); + } + } + ) +) + type JSResult = ~[~[u8]]; @@ -262,6 +275,9 @@ fn build_element_from_tag(cx: *JSContext, tag: &str) -> AbstractNode handle_htmlelement!(cx, tag, "section", HTMLElementTypeId, HTMLElement); handle_htmlelement!(cx, tag, "small", HTMLElementTypeId, HTMLElement); + handle_htmlmediaelement!(cx, tag, "audio", HTMLAudioElementTypeId, HTMLAudioElement); + handle_htmlmediaelement!(cx, tag, "video", HTMLVideoElementTypeId, HTMLVideoElement); + unsafe { let element = @HTMLUnknownElement { parent: HTMLElement::new(HTMLUnknownElementTypeId, tag.to_str()) diff --git a/src/components/script/script.rc b/src/components/script/script.rc index a08a354390c..d891555e617 100644 --- a/src/components/script/script.rc +++ b/src/components/script/script.rc @@ -58,6 +58,7 @@ pub mod dom { pub mod htmlanchorelement; pub mod htmlappletelement; pub mod htmlareaelement; + pub mod htmlaudioelement; pub mod htmlbaseelement; pub mod htmlbodyelement; pub mod htmlbrelement; @@ -120,6 +121,7 @@ pub mod dom { pub mod htmltitleelement; pub mod htmltrackelement; pub mod htmlulistelement; + pub mod htmlvideoelement; pub mod htmlunknownelement; pub mod mouseevent; pub mod node; From 80e3109bc90aa1872a56f5dda2bc2ffb9aaaded3 Mon Sep 17 00:00:00 2001 From: Tetsuharu OHZEKI Date: Sat, 31 Aug 2013 19:58:30 +0900 Subject: [PATCH 8/8] Add testcases. --- src/test/html/test_bindings.html | 12 +++++++- src/test/html/test_bindings.js | 51 ++++++++++++++++++++++++++++++++ 2 files changed, 62 insertions(+), 1 deletion(-) diff --git a/src/test/html/test_bindings.html b/src/test/html/test_bindings.html index e61904cd005..8223a225180 100644 --- a/src/test/html/test_bindings.html +++ b/src/test/html/test_bindings.html @@ -15,7 +15,12 @@ -
+
+
+ legend + +
+

pppppppppp

@@ -50,5 +55,10 @@ + +
pre
+ diff --git a/src/test/html/test_bindings.js b/src/test/html/test_bindings.js index 25a0611c516..b65ee83eca0 100644 --- a/src/test/html/test_bindings.js +++ b/src/test/html/test_bindings.js @@ -241,6 +241,57 @@ window.alert(tags.length); window.alert(tags[0].tagName); window.alert(tags[0] instanceof HTMLProgressElement); +window.alert("HTMLTemplateElement:"); +let tags = document.getElementsByTagName("template"); +window.alert(tags); +window.alert(tags.length); +window.alert(tags[0].tagName); +window.alert(tags[0] instanceof HTMLTemplateElement); + +window.alert("HTMLPreElement:"); +let tags = document.getElementsByTagName("pre"); +window.alert(tags); +window.alert(tags.length); +window.alert(tags[0].tagName); +window.alert(tags[0] instanceof HTMLPreElement); + +window.alert("HTMLLegendElement:"); +let tags = document.getElementsByTagName("legend"); +window.alert(tags); +window.alert(tags.length); +window.alert(tags[0].tagName); +window.alert(tags[0] instanceof HTMLLegendElement); + +window.alert("HTMLLabelElement:"); +let tags = document.getElementsByTagName("label"); +window.alert(tags); +window.alert(tags.length); +window.alert(tags[0].tagName); +window.alert(tags[0] instanceof HTMLLabelElement); + +window.alert("HTMLTrackElement:"); +let tags = document.getElementsByTagName("track"); +window.alert(tags); +window.alert(tags.length); +window.alert(tags[0].tagName); +window.alert(tags[0] instanceof HTMLTrackElement); + +window.alert("HTMLAudioElement:"); +let tags = document.getElementsByTagName("audio"); +window.alert(tags); +window.alert(tags.length); +window.alert(tags[0].tagName); +window.alert(tags[0] instanceof HTMLMediaElement); +window.alert(tags[0] instanceof HTMLAudioElement); + +window.alert("HTMLVideoElement:"); +let tags = document.getElementsByTagName("video"); +window.alert(tags); +window.alert(tags.length); +window.alert(tags[0].tagName); +window.alert(tags[0] instanceof HTMLMediaElement); +window.alert(tags[0] instanceof HTMLVideoElement); + //TODO: Doesn't work until we throw proper exceptions instead of returning 0 on // unwrap failure. /*try {