Commit e4f3a088 authored by Rob Buis's avatar Rob Buis Committed by Commit Bot

[mathml] Implement MathML DOM

Add MathMLElement idl to allow useful DOM operations on MathML elements.
See https://mathml-refresh.github.io/mathml-core/#dom-and-javascript

The failures are due to attributes missing from GlobalEventHandler.idl.
See for example https://crbug.com/1006096

Bug: 6606
Change-Id: I86f65635e30f74eabeaf5ec0097cb9694137c3e2
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1904195Reviewed-by: default avatarKentaro Hara <haraken@chromium.org>
Reviewed-by: default avatarFrédéric Wang <fwang@igalia.com>
Commit-Queue: Rob Buis <rbuis@igalia.com>
Cr-Commit-Position: refs/heads/master@{#714164}
parent 68551d7a
......@@ -317,6 +317,7 @@ core_idl_files =
"layout/ng/custom/layout_child.idl",
"layout/ng/custom/layout_worklet_global_scope.idl",
"loader/appcache/application_cache.idl",
"mathml/mathml_element.idl",
"messaging/message_channel.idl",
"messaging/message_port.idl",
"mojo/mojo.idl",
......
......@@ -37,6 +37,15 @@ math[display="block"] {
text-align: center;
}
:-internal-spatial-navigation-interest {
outline: auto 1px -webkit-focus-ring-color;
box-shadow: none !important;
}
:focus {
outline: auto 1px -webkit-focus-ring-color;
}
/* We hide the PresentationExpression constructions that are children of a <semantics> element.
http://www.w3.org/TR/MathML/appendixa.html#parsing_PresentationExpression */
semantics > mi, semantics > mn, semantics > mo, semantics > mtext, semantics > mspace, semantics > ms, semantics > maligngroup, semantics > malignmark, semantics > mrow, semantics > mfrac, semantics > msqrt, semantics > mroot, semantics > mstyle, semantics > merror, semantics > mpadded, semantics > mphantom, semantics > mfenced, semantics > menclose, semantics > msub, semantics > msup, semantics > msubsup, semantics > munder, semantics > mover, semantics > munderover, semantics > mmultiscripts, semantics > mtable, semantics > mstack, semantics > mlongdiv, semantics > maction {
......
......@@ -4,6 +4,9 @@
#include "third_party/blink/renderer/core/mathml/mathml_element.h"
#include "third_party/blink/renderer/bindings/core/v8/script_event_listener.h"
#include "third_party/blink/renderer/core/html/html_element.h"
namespace blink {
MathMLElement::MathMLElement(const QualifiedName& tagName,
......@@ -13,4 +16,17 @@ MathMLElement::MathMLElement(const QualifiedName& tagName,
MathMLElement::~MathMLElement() {}
void MathMLElement::ParseAttribute(const AttributeModificationParams& param) {
const AtomicString& event_name =
HTMLElement::EventNameForAttributeName(param.name);
if (!event_name.IsNull()) {
SetAttributeEventListener(
event_name,
CreateAttributeEventListener(this, param.name, param.new_value));
return;
}
Element::ParseAttribute(param);
}
} // namespace blink
......@@ -13,6 +13,8 @@
namespace blink {
class CORE_EXPORT MathMLElement : public Element {
DEFINE_WRAPPERTYPEINFO();
public:
MathMLElement(const QualifiedName& tagName,
Document& document,
......@@ -24,6 +26,8 @@ class CORE_EXPORT MathMLElement : public Element {
}
private:
void ParseAttribute(const AttributeModificationParams&) final;
bool IsMathMLElement() const =
delete; // This will catch anyone doing an unnecessary check.
};
......
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
[RuntimeEnabled=MathMLCore, Exposed=Window]
interface MathMLElement : Element {
// CSS Object Model (CSSOM)
// https://drafts.csswg.org/cssom/#the-elementcssinlinestyle-interface
// TODO(crbug.com/835762): we should support ElementCSSInlineStyle.
[SameObject, PutForwards=cssText] readonly attribute CSSStyleDeclaration style;
};
MathMLElement includes GlobalEventHandlers;
MathMLElement includes DocumentAndElementEventHandlers;
MathMLElement includes HTMLOrForeignElement;
......@@ -3,7 +3,7 @@
namespace: "MathML",
namespaceURI: "http://www.w3.org/1998/Math/MathML",
fallbackInterfaceName: "MathMLElement",
fallbackJSInterfaceName: "Element",
fallbackJSInterfaceName: "MathMLElement",
export: "CORE_EXPORT",
},
data: [
......
......@@ -1629,24 +1629,18 @@ crbug.com/6606 external/wpt/mathml/relations/css-styling/visibility-004.html [ F
crbug.com/6606 external/wpt/mathml/relations/css-styling/width-height-001.html [ Failure ]
crbug.com/6606 external/wpt/mathml/relations/css-styling/writing-mode/writing-mode-001.html [ Failure ]
crbug.com/6606 external/wpt/mathml/relations/css-styling/writing-mode/writing-mode-002.html [ Failure ]
crbug.com/6606 external/wpt/mathml/relations/html5-tree/clipboard-event-handlers.tentative.html [ Failure ]
crbug.com/6606 external/wpt/mathml/relations/html5-tree/color-attributes-1.html [ Failure ]
crbug.com/6606 external/wpt/mathml/relations/html5-tree/css-inline-style-interface.tentative.html [ Failure ]
crbug.com/6606 external/wpt/mathml/relations/html5-tree/display-1.html [ Failure ]
crbug.com/6606 external/wpt/mathml/relations/html5-tree/display-2.html [ Failure ]
crbug.com/6606 external/wpt/mathml/relations/html5-tree/href-click-1.html [ Failure ]
crbug.com/6606 external/wpt/mathml/relations/html5-tree/href-click-2.html [ Failure ]
crbug.com/6606 external/wpt/mathml/relations/html5-tree/html-or-foreign-element-interfaces.tentative.html [ Failure ]
crbug.com/6606 external/wpt/mathml/relations/html5-tree/integration-point-1.html [ Failure ]
crbug.com/6606 external/wpt/mathml/relations/html5-tree/integration-point-2.html [ Failure ]
crbug.com/6606 external/wpt/mathml/relations/html5-tree/integration-point-4.html [ Failure ]
crbug.com/6606 external/wpt/mathml/relations/html5-tree/math-global-event-handlers.tentative.html [ Failure ]
crbug.com/6606 external/wpt/mathml/relations/html5-tree/required-extensions-2.html [ Failure ]
crbug.com/6606 external/wpt/mathml/relations/html5-tree/tabindex-001.html [ Failure ]
# These tests time out when MathML is not implemented.
# See https://github.com/mathml-refresh/mathml/issues/167
crbug.com/6606 external/wpt/mathml/relations/html5-tree/css-inline-style-dynamic.tentative.html [ Timeout ]
crbug.com/6606 external/wpt/mathml/relations/html5-tree/href-click-3.html [ Timeout ]
# This test fails on macOS.
......
......@@ -4696,6 +4696,198 @@ interface Magnetometer : Sensor
getter y
getter z
method constructor
interface MathMLElement : Element
attribute @@toStringTag
getter autofocus
getter dataset
getter nonce
getter onabort
getter onactivateinvisible
getter onanimationend
getter onanimationiteration
getter onanimationstart
getter onauxclick
getter onbeforeactivate
getter onblur
getter oncancel
getter oncanplay
getter oncanplaythrough
getter onchange
getter onclick
getter onclose
getter oncontextmenu
getter oncopy
getter oncuechange
getter oncut
getter ondblclick
getter ondrag
getter ondragend
getter ondragenter
getter ondragleave
getter ondragover
getter ondragstart
getter ondrop
getter ondurationchange
getter onemptied
getter onended
getter onerror
getter onfocus
getter onformdata
getter ongotpointercapture
getter oninput
getter oninvalid
getter onkeydown
getter onkeypress
getter onkeyup
getter onload
getter onloadeddata
getter onloadedmetadata
getter onloadstart
getter onlostpointercapture
getter onmousedown
getter onmouseenter
getter onmouseleave
getter onmousemove
getter onmouseout
getter onmouseover
getter onmouseup
getter onmousewheel
getter onoverscroll
getter onpaste
getter onpause
getter onplay
getter onplaying
getter onpointercancel
getter onpointerdown
getter onpointerenter
getter onpointerleave
getter onpointermove
getter onpointerout
getter onpointerover
getter onpointerrawupdate
getter onpointerup
getter onprogress
getter onratechange
getter onreset
getter onresize
getter onscroll
getter onscrollend
getter onseeked
getter onseeking
getter onselect
getter onselectionchange
getter onselectstart
getter onstalled
getter onsubmit
getter onsuspend
getter ontimeupdate
getter ontoggle
getter ontouchcancel
getter ontouchend
getter ontouchmove
getter ontouchstart
getter ontransitionend
getter onvolumechange
getter onwaiting
getter onwheel
getter style
getter tabIndex
method blur
method constructor
method focus
setter autofocus
setter nonce
setter onabort
setter onactivateinvisible
setter onanimationend
setter onanimationiteration
setter onanimationstart
setter onauxclick
setter onbeforeactivate
setter onblur
setter oncancel
setter oncanplay
setter oncanplaythrough
setter onchange
setter onclick
setter onclose
setter oncontextmenu
setter oncopy
setter oncuechange
setter oncut
setter ondblclick
setter ondrag
setter ondragend
setter ondragenter
setter ondragleave
setter ondragover
setter ondragstart
setter ondrop
setter ondurationchange
setter onemptied
setter onended
setter onerror
setter onfocus
setter onformdata
setter ongotpointercapture
setter oninput
setter oninvalid
setter onkeydown
setter onkeypress
setter onkeyup
setter onload
setter onloadeddata
setter onloadedmetadata
setter onloadstart
setter onlostpointercapture
setter onmousedown
setter onmouseenter
setter onmouseleave
setter onmousemove
setter onmouseout
setter onmouseover
setter onmouseup
setter onmousewheel
setter onoverscroll
setter onpaste
setter onpause
setter onplay
setter onplaying
setter onpointercancel
setter onpointerdown
setter onpointerenter
setter onpointerleave
setter onpointermove
setter onpointerout
setter onpointerover
setter onpointerrawupdate
setter onpointerup
setter onprogress
setter onratechange
setter onreset
setter onresize
setter onscroll
setter onscrollend
setter onseeked
setter onseeking
setter onselect
setter onselectionchange
setter onselectstart
setter onstalled
setter onsubmit
setter onsuspend
setter ontimeupdate
setter ontoggle
setter ontouchcancel
setter ontouchend
setter ontouchmove
setter ontouchstart
setter ontransitionend
setter onvolumechange
setter onwaiting
setter onwheel
setter style
setter tabIndex
interface MediaCapabilities
attribute @@toStringTag
method constructor
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment