| Index: tools/dom/scripts/systemhtml.py
|
| diff --git a/tools/dom/scripts/systemhtml.py b/tools/dom/scripts/systemhtml.py
|
| index 36cf9e55d2a14b012220af3d5615373f308470ce..e9ad05605da0ae7f969e13cbdcab8df2c1a4d467 100644
|
| --- a/tools/dom/scripts/systemhtml.py
|
| +++ b/tools/dom/scripts/systemhtml.py
|
| @@ -69,40 +69,6 @@ _js_custom_members = set([
|
| 'WorkerContext.indexedDB',
|
| ])
|
|
|
| -js_support_checks = {
|
| - 'ArrayBuffer': "JS('bool', 'typeof window.ArrayBuffer != \"undefined\"')",
|
| - 'Database': "JS('bool', '!!(window.openDatabase)')",
|
| - 'DOMApplicationCache': "JS('bool', '!!(window.applicationCache)')",
|
| - 'DOMFileSystem': "JS('bool', '!!(window.webkitRequestFileSystem)')",
|
| - 'HashChangeEvent': "Event._isTypeSupported('HashChangeEvent')",
|
| - 'HTMLContentElement': "Element.isTagSupported('content')",
|
| - 'HTMLDataListElement': "Element.isTagSupported('datalist')",
|
| - 'HTMLDetailsElement': "Element.isTagSupported('details')",
|
| - 'HTMLEmbedElement': "Element.isTagSupported('embed')",
|
| - # IE creates keygen as Block elements
|
| - 'HTMLKeygenElement': "Element.isTagSupported('keygen') "
|
| - "&& (new Element.tag('keygen') is KeygenElement)",
|
| - 'HTMLMeterElement': "Element.isTagSupported('meter')",
|
| - 'HTMLObjectElement': "Element.isTagSupported('object')",
|
| - 'HTMLOutputElement': "Element.isTagSupported('output')",
|
| - 'HTMLProgressElement': "Element.isTagSupported('progress')",
|
| - 'HTMLShadowElement': "Element.isTagSupported('shadow')",
|
| - 'HTMLTrackElement': "Element.isTagSupported('track')",
|
| - 'MediaStreamEvent': "Event._isTypeSupported('MediaStreamEvent')",
|
| - 'MediaStreamTrackEvent': "Event._isTypeSupported('MediaStreamTrackEvent')",
|
| - 'NotificationCenter': "JS('bool', '!!(window.webkitNotifications)')",
|
| - 'Performance': "JS('bool', '!!(window.performance)')",
|
| - 'SpeechRecognition': "JS('bool', '!!(window.SpeechRecognition || "
|
| - "window.webkitSpeechRecognition)')",
|
| - 'XMLHttpRequestProgressEvent':
|
| - "Event._isTypeSupported('XMLHttpRequestProgressEvent')",
|
| - 'WebGLRenderingContext': "JS('bool', '!!(window.WebGLRenderingContext)')",
|
| - 'WebKitCSSMatrix': "JS('bool', '!!(window.WebKitCSSMatrix)')",
|
| - 'WebKitPoint': "JS('bool', '!!(window.WebKitPoint)')",
|
| - 'WebSocket': "JS('bool', 'typeof window.WebSocket != \"undefined\"')",
|
| - 'XSLTProcessor': "JS('bool', '!!(window.XSLTProcessor)')",
|
| -}
|
| -
|
| # Classes that offer only static methods, and therefore we should suppress
|
| # constructor creation.
|
| _static_classes = set(['Url'])
|
| @@ -140,122 +106,139 @@ class ElementConstructorInfo(object):
|
| return info
|
|
|
| _html_element_constructors = {
|
| - 'AnchorElement' :
|
| + 'HTMLAnchorElement' :
|
| ElementConstructorInfo(tag='a', opt_params=[('DOMString', 'href')]),
|
| - 'AreaElement': 'area',
|
| - 'ButtonElement': 'button',
|
| - 'BRElement': 'br',
|
| - 'BaseElement': 'base',
|
| - 'BodyElement': 'body',
|
| - 'ButtonElement': 'button',
|
| - 'CanvasElement':
|
| + 'HTMLAreaElement': 'area',
|
| + 'HTMLButtonElement': 'button',
|
| + 'HTMLBRElement': 'br',
|
| + 'HTMLBaseElement': 'base',
|
| + 'HTMLBodyElement': 'body',
|
| + 'HTMLButtonElement': 'button',
|
| + 'HTMLCanvasElement':
|
| ElementConstructorInfo(tag='canvas',
|
| opt_params=[('int', 'width'), ('int', 'height')]),
|
| - 'ContentElement': 'content',
|
| - 'DataListElement': 'datalist',
|
| - 'DListElement': 'dl',
|
| - 'DetailsElement': 'details',
|
| - 'DivElement': 'div',
|
| - 'EmbedElement': 'embed',
|
| - 'FieldSetElement': 'fieldset',
|
| - 'FormElement': 'form',
|
| - 'HRElement': 'hr',
|
| - 'HeadElement': 'head',
|
| - 'HeadingElement': [ElementConstructorInfo('h1'),
|
| + 'HTMLContentElement': 'content',
|
| + 'HTMLDataListElement': 'datalist',
|
| + 'HTMLDListElement': 'dl',
|
| + 'HTMLDetailsElement': 'details',
|
| + 'HTMLDivElement': 'div',
|
| + 'HTMLEmbedElement': 'embed',
|
| + 'HTMLFieldSetElement': 'fieldset',
|
| + 'HTMLFormElement': 'form',
|
| + 'HTMLHRElement': 'hr',
|
| + 'HTMLHeadElement': 'head',
|
| + 'HTMLHeadingElement': [ElementConstructorInfo('h1'),
|
| ElementConstructorInfo('h2'),
|
| ElementConstructorInfo('h3'),
|
| ElementConstructorInfo('h4'),
|
| ElementConstructorInfo('h5'),
|
| ElementConstructorInfo('h6')],
|
| - 'HtmlElement': 'html',
|
| - 'IFrameElement': 'iframe',
|
| - 'ImageElement':
|
| + 'HTMLHtmlElement': 'html',
|
| + 'HTMLIFrameElement': 'iframe',
|
| + 'HTMLImageElement':
|
| ElementConstructorInfo(tag='img',
|
| opt_params=[('DOMString', 'src'),
|
| ('int', 'width'), ('int', 'height')]),
|
| - 'KeygenElement': 'keygen',
|
| - 'LIElement': 'li',
|
| - 'LabelElement': 'label',
|
| - 'LegendElement': 'legend',
|
| - 'LinkElement': 'link',
|
| - 'MapElement': 'map',
|
| - 'MenuElement': 'menu',
|
| - 'MeterElement': 'meter',
|
| - 'OListElement': 'ol',
|
| - 'ObjectElement': 'object',
|
| - 'OptGroupElement': 'optgroup',
|
| - 'OutputElement': 'output',
|
| - 'ParagraphElement': 'p',
|
| - 'ParamElement': 'param',
|
| - 'PreElement': 'pre',
|
| - 'ProgressElement': 'progress',
|
| - 'ScriptElement': 'script',
|
| - 'SelectElement': 'select',
|
| - 'SourceElement': 'source',
|
| - 'SpanElement': 'span',
|
| - 'StyleElement': 'style',
|
| - 'TableCaptionElement': 'caption',
|
| - 'TableCellElement': 'td',
|
| - 'TableColElement': 'col',
|
| - 'TableElement': 'table',
|
| - 'TableRowElement': 'tr',
|
| - #'TableSectionElement' <thead> <tbody> <tfoot>
|
| - 'TextAreaElement': 'textarea',
|
| - 'TitleElement': 'title',
|
| - 'TrackElement': 'track',
|
| - 'UListElement': 'ul',
|
| - 'VideoElement': 'video'
|
| + 'HTMLKeygenElement': 'keygen',
|
| + 'HTMLLIElement': 'li',
|
| + 'HTMLLabelElement': 'label',
|
| + 'HTMLLegendElement': 'legend',
|
| + 'HTMLLinkElement': 'link',
|
| + 'HTMLMapElement': 'map',
|
| + 'HTMLMenuElement': 'menu',
|
| + 'HTMLMeterElement': 'meter',
|
| + 'HTMLOListElement': 'ol',
|
| + 'HTMLObjectElement': 'object',
|
| + 'HTMLOptGroupElement': 'optgroup',
|
| + 'HTMLOutputElement': 'output',
|
| + 'HTMLParagraphElement': 'p',
|
| + 'HTMLParamElement': 'param',
|
| + 'HTMLPreElement': 'pre',
|
| + 'HTMLProgressElement': 'progress',
|
| + 'HTMLScriptElement': 'script',
|
| + 'HTMLSelectElement': 'select',
|
| + 'HTMLSourceElement': 'source',
|
| + 'HTMLSpanElement': 'span',
|
| + 'HTMLStyleElement': 'style',
|
| + 'HTMLTableCaptionElement': 'caption',
|
| + 'HTMLTableCellElement': 'td',
|
| + 'HTMLTableColElement': 'col',
|
| + 'HTMLTableElement': 'table',
|
| + 'HTMLTableRowElement': 'tr',
|
| + #'HTMLTableSectionElement' <thead> <tbody> <tfoot>
|
| + 'HTMLTextAreaElement': 'textarea',
|
| + 'HTMLTitleElement': 'title',
|
| + 'HTMLTrackElement': 'track',
|
| + 'HTMLUListElement': 'ul',
|
| + 'HTMLVideoElement': 'video'
|
| }
|
|
|
| _svg_element_constructors = {
|
| - 'AElement': 'a',
|
| - 'AnimateColorElement': 'animateColor',
|
| - 'AnimateElement': 'animate',
|
| - 'AnimateMotionElement': 'animateMotion',
|
| - 'AnimateTransformElement': 'animateTransform',
|
| - 'AnimationElement': 'animation',
|
| - 'CircleElement': 'circle',
|
| - 'ClipPathElement': 'clipPath',
|
| - 'CursorElement': 'cursor',
|
| - 'DefsElement': 'defs',
|
| - 'DescElement': 'desc',
|
| - 'EllipseElement': 'ellipse',
|
| - 'FilterElement': 'filter',
|
| - 'FontElement': 'font',
|
| - 'FontFaceElement': 'font-face',
|
| - 'FontFaceFormatElement': 'font-face-format',
|
| - 'FontFaceNameElement': 'font-face-name',
|
| - 'FontFaceSrcElement': 'font-face-src',
|
| - 'FontFaceUriElement': 'font-face-uri',
|
| - 'ForeignObjectElement': 'foreignObject',
|
| - 'GlyphElement': 'glyph',
|
| - 'GElement': 'g',
|
| - 'HKernElement': 'hkern',
|
| - 'ImageElement': 'image',
|
| - 'LinearGradientElement': 'linearGradient',
|
| - 'LineElement': 'line',
|
| - 'MarkerElement': 'marker',
|
| - 'MaskElement': 'mask',
|
| - 'MPathElement': 'mpath',
|
| - 'PathElement': 'path',
|
| - 'PatternElement': 'pattern',
|
| - 'PolygonElement': 'polygon',
|
| - 'PolylineElement': 'polyline',
|
| - 'RadialGradientElement': 'radialGradient',
|
| - 'RectElement': 'rect',
|
| - 'ScriptElement': 'script',
|
| - 'SetElement': 'set',
|
| - 'StopElement': 'stop',
|
| - 'StyleElement': 'style',
|
| - 'SwitchElement': 'switch',
|
| - 'SymbolElement': 'symbol',
|
| - 'TextElement': 'text',
|
| - 'TitleElement': 'title',
|
| - 'TRefElement': 'tref',
|
| - 'TSpanElement': 'tspan',
|
| - 'UseElement': 'use',
|
| - 'ViewElement': 'view',
|
| - 'VKernElement': 'vkern',
|
| + 'SVGAElement': 'a',
|
| + 'SVGAltGlyphElement': 'altGlyph',
|
| + 'SVGAnimateElement': 'animate',
|
| + 'SVGAnimateMotionElement': 'animateMotion',
|
| + 'SVGAnimateTransformElement': 'animateTransform',
|
| + 'SVGAnimationElement': 'animation',
|
| + 'SVGCircleElement': 'circle',
|
| + 'SVGClipPathElement': 'clipPath',
|
| + 'SVGCursorElement': 'cursor',
|
| + 'SVGDefsElement': 'defs',
|
| + 'SVGDescElement': 'desc',
|
| + 'SVGEllipseElement': 'ellipse',
|
| + 'SVGFEBlendElement': 'feBlend',
|
| + 'SVGFEColorMatrixElement': 'feColorMatrix',
|
| + 'SVGFEComponentTransferElement': 'feComponentTransfer',
|
| + 'SVGFEConvolveMatrixElement': 'feConvolveMatrix',
|
| + 'SVGFEDiffuseLightingElement': 'feDiffuseLighting',
|
| + 'SVGFEDisplacementMapElement': 'feDisplacementMap',
|
| + 'SVGFEDistantLightElement': 'feDistantLight',
|
| + 'SVGFEFloodElement': 'feFlood',
|
| + 'SVGFEFuncAElement': 'feFuncA',
|
| + 'SVGFEFuncBElement': 'feFuncB',
|
| + 'SVGFEFuncGElement': 'feFuncG',
|
| + 'SVGFEFuncRElement': 'feFuncR',
|
| + 'SVGFEGaussianBlurElement': 'feGaussianBlur',
|
| + 'SVGFEImageElement': 'feImage',
|
| + 'SVGFEMergeElement': 'feMerge',
|
| + 'SVGFEMergeNodeElement': 'feMergeNode',
|
| + 'SVGFEMorphology': 'feMorphology',
|
| + 'SVGFEOffsetElement': 'feOffset',
|
| + 'SVGFEPointLightElement': 'fePointLight',
|
| + 'SVGFESpecularLightingElement': 'feSpecularLighting',
|
| + 'SVGFESpotLightElement': 'feSpotLight',
|
| + 'SVGFETileElement': 'feTile',
|
| + 'SVGFETurbulenceElement': 'feTurbulence',
|
| + 'SVGFilterElement': 'filter',
|
| + 'SVGForeignObjectElement': 'foreignObject',
|
| + 'SVGGlyphElement': 'glyph',
|
| + 'SVGGElement': 'g',
|
| + 'SVGHKernElement': 'hkern',
|
| + 'SVGImageElement': 'image',
|
| + 'SVGLinearGradientElement': 'linearGradient',
|
| + 'SVGLineElement': 'line',
|
| + 'SVGMarkerElement': 'marker',
|
| + 'SVGMaskElement': 'mask',
|
| + 'SVGMPathElement': 'mpath',
|
| + 'SVGPathElement': 'path',
|
| + 'SVGPatternElement': 'pattern',
|
| + 'SVGPolygonElement': 'polygon',
|
| + 'SVGPolylineElement': 'polyline',
|
| + 'SVGRadialGradientElement': 'radialGradient',
|
| + 'SVGRectElement': 'rect',
|
| + 'SVGScriptElement': 'script',
|
| + 'SVGSetElement': 'set',
|
| + 'SVGStopElement': 'stop',
|
| + 'SVGStyleElement': 'style',
|
| + 'SVGSwitchElement': 'switch',
|
| + 'SVGSymbolElement': 'symbol',
|
| + 'SVGTextElement': 'text',
|
| + 'SVGTitleElement': 'title',
|
| + 'SVGTRefElement': 'tref',
|
| + 'SVGTSpanElement': 'tspan',
|
| + 'SVGUseElement': 'use',
|
| + 'SVGViewElement': 'view',
|
| + 'SVGVKernElement': 'vkern',
|
| }
|
|
|
| _element_constructors = {
|
| @@ -300,6 +283,94 @@ def ElementConstructorInfos(typename, element_constructors,
|
| return infos
|
|
|
| # ------------------------------------------------------------------------------
|
| +def SvgSupportStr(tagName):
|
| + return 'Svg%s' % ElemSupportStr(tagName)
|
| +
|
| +def ElemSupportStr(tagName):
|
| + return "Element.isTagSupported('%s')" % tagName
|
| +
|
| +_js_support_checks_basic_element_with_constructors = [
|
| + 'HTMLContentElement',
|
| + 'HTMLDataListElement',
|
| + 'HTMLDetailsElement',
|
| + 'HTMLEmbedElement',
|
| + 'HTMLMeterElement',
|
| + 'HTMLObjectElement',
|
| + 'HTMLOutputElement',
|
| + 'HTMLProgressElement',
|
| + 'HTMLTrackElement',
|
| +]
|
| +
|
| +_js_support_checks_additional_element = [
|
| + # IE creates keygen as Block elements
|
| + 'HTMLKeygenElement',
|
| + 'SVGAltGlyphElement',
|
| + 'SVGAnimateElement',
|
| + 'SVGAnimateMotionElement',
|
| + 'SVGAnimateTransformElement',
|
| + 'SVGCursorElement',
|
| + 'SVGFEBlendElement',
|
| + 'SVGFEColorMatrixElement',
|
| + 'SVGFEComponentTransferElement',
|
| + 'SVGFEConvolveMatrixElement',
|
| + 'SVGFEDiffuseLightingElement',
|
| + 'SVGFEDisplacementMapElement',
|
| + 'SVGFEDistantLightElement',
|
| + 'SVGFEFloodElement',
|
| + 'SVGFEFuncAElement',
|
| + 'SVGFEFuncBElement',
|
| + 'SVGFEFuncGElement',
|
| + 'SVGFEFuncRElement',
|
| + 'SVGFEGaussianBlurElement',
|
| + 'SVGFEImageElement',
|
| + 'SVGFEMergeElement',
|
| + 'SVGFEMergeNodeElement',
|
| + 'SVGFEMorphology',
|
| + 'SVGFEOffsetElement',
|
| + 'SVGFEPointLightElement',
|
| + 'SVGFESpecularLightingElement',
|
| + 'SVGFESpotLightElement',
|
| + 'SVGFETileElement',
|
| + 'SVGFETurbulenceElement',
|
| + 'SVGFilterElement',
|
| + 'SVGForeignObjectElement',
|
| + 'SVGSetElement',
|
| +]
|
| +
|
| +js_support_checks = dict({
|
| + 'ArrayBuffer': "JS('bool', 'typeof window.ArrayBuffer != \"undefined\"')",
|
| + 'Database': "JS('bool', '!!(window.openDatabase)')",
|
| + 'DOMApplicationCache': "JS('bool', '!!(window.applicationCache)')",
|
| + 'DOMFileSystem': "JS('bool', '!!(window.webkitRequestFileSystem)')",
|
| + 'HashChangeEvent': "Event._isTypeSupported('HashChangeEvent')",
|
| + 'HTMLShadowElement': ElemSupportStr('shadow'),
|
| + 'MediaStreamEvent': "Event._isTypeSupported('MediaStreamEvent')",
|
| + 'MediaStreamTrackEvent': "Event._isTypeSupported('MediaStreamTrackEvent')",
|
| + 'NotificationCenter': "JS('bool', '!!(window.webkitNotifications)')",
|
| + 'Performance': "JS('bool', '!!(window.performance)')",
|
| + 'SpeechRecognition': "JS('bool', '!!(window.SpeechRecognition || "
|
| + "window.webkitSpeechRecognition)')",
|
| + 'SVGExternalResourcesRequired': ('supported(SvgElement element)',
|
| + "JS('bool', '#.externalResourcesRequired !== undefined && "
|
| + "#.externalResourcesRequired.animVal !== undefined', "
|
| + "element, element)"),
|
| + 'SVGLangSpace': ('supported(SvgElement element)',
|
| + "JS('bool', '#.xmlspace !== undefined && #.xmllang !== undefined', "
|
| + "element, element)"),
|
| + 'XMLHttpRequestProgressEvent':
|
| + "Event._isTypeSupported('XMLHttpRequestProgressEvent')",
|
| + 'WebGLRenderingContext': "JS('bool', '!!(window.WebGLRenderingContext)')",
|
| + 'WebKitCSSMatrix': "JS('bool', '!!(window.WebKitCSSMatrix)')",
|
| + 'WebKitPoint': "JS('bool', '!!(window.WebKitPoint)')",
|
| + 'WebSocket': "JS('bool', 'typeof window.WebSocket != \"undefined\"')",
|
| + 'XSLTProcessor': "JS('bool', '!!(window.XSLTProcessor)')",
|
| + }.items() +
|
| + dict((key,
|
| + SvgSupportStr(_svg_element_constructors[key]) if key.startswith('SVG')
|
| + else ElemSupportStr(_html_element_constructors[key])) for key in
|
| + _js_support_checks_basic_element_with_constructors +
|
| + _js_support_checks_additional_element).items())
|
| +# ------------------------------------------------------------------------------
|
|
|
| class HtmlDartInterfaceGenerator(object):
|
| """Generates dart interface and implementation for the DOM IDL interface."""
|
| @@ -359,7 +430,7 @@ class HtmlDartInterfaceGenerator(object):
|
| factory_provider = interface_name
|
|
|
| # HTML Elements and SVG Elements have convenience constructors.
|
| - infos = ElementConstructorInfos(interface_name,
|
| + infos = ElementConstructorInfos(self._interface.id,
|
| _element_constructors[self._library_name], factory_provider_name=
|
| _factory_ctr_strings[self._library_name]['provider_name'])
|
|
|
| @@ -521,6 +592,19 @@ class Dart2JSBackend(HtmlDartGenerator):
|
| return self._interface.doc_js_name in js_support_checks
|
|
|
| def GetSupportCheck(self):
|
| + """Return a tuple of the support check function signature and the support
|
| + test itself. If no parameters are supplied, we assume the default."""
|
| + if self._interface.doc_js_name in _js_support_checks_additional_element:
|
| + if self._interface.doc_js_name in _svg_element_constructors:
|
| + lib_prefix = 'Svg'
|
| + constructors = _svg_element_constructors
|
| + else:
|
| + lib_prefix = ''
|
| + constructors = _html_element_constructors
|
| + return (js_support_checks.get(self._interface.doc_js_name) +
|
| + " && (new %sElement.tag('%s') is %s)" % (lib_prefix,
|
| + constructors[self._interface.doc_js_name],
|
| + self._renamer.RenameInterface(self._interface)))
|
| return js_support_checks.get(self._interface.doc_js_name)
|
|
|
| def GenerateCustomFactory(self, constructor_info):
|
|
|