Diff
Modified: trunk/LayoutTests/ChangeLog (249193 => 249194)
--- trunk/LayoutTests/ChangeLog 2019-08-28 10:21:12 UTC (rev 249193)
+++ trunk/LayoutTests/ChangeLog 2019-08-28 10:22:56 UTC (rev 249194)
@@ -1,3 +1,16 @@
+2019-08-28 Carlos Garcia Campos <[email protected]>
+
+ Unable to enter text in https://eat.fi
+ https://bugs.webkit.org/show_bug.cgi?id=193046
+
+ Reviewed by Ryosuke Niwa.
+
+ Add new test imported for blink.
+
+ * imported/blink/fast/forms/label/label-contains-other-interactive-content-expected.txt: Added.
+ * imported/blink/fast/forms/label/label-contains-other-interactive-content.html: Added.
+ * platform/ios-wk2/TestExpectations: Skip the new test because it requires eventSender.mouseDown/Up/MoveTo()
+
2019-08-28 Said Abou-Hallawa <[email protected]>
SVG2: Add length, item getter and item setter to all SVG lists
Added: trunk/LayoutTests/imported/blink/fast/forms/label/label-contains-other-interactive-content-expected.txt (0 => 249194)
--- trunk/LayoutTests/imported/blink/fast/forms/label/label-contains-other-interactive-content-expected.txt (rev 0)
+++ trunk/LayoutTests/imported/blink/fast/forms/label/label-contains-other-interactive-content-expected.txt 2019-08-28 10:22:56 UTC (rev 249194)
@@ -0,0 +1,39 @@
+button
+PASS document.activeElement.id is not "control"
+details
+PASS document.activeElement.id is not "control"
+embed
+PASS document.activeElement.id is not "control"
+iframe
+PASS document.activeElement.id is not "control"
+label
+PASS document.activeElement.id is not "control"
+select
+PASS document.activeElement.id is not "control"
+textarea
+PASS document.activeElement.id is not "control"
+
+a
+PASS document.activeElement.id is "control"
+a[href]
+PASS document.activeElement.id is not "control"
+audio[controls]
+PASS document.activeElement.id is not "control"
+video
+PASS document.activeElement.id is "control"
+video[controls]
+PASS document.activeElement.id is not "control"
+img
+PASS document.activeElement.id is "control"
+img[usemap]
+PASS document.activeElement.id is not "control"
+object
+PASS document.activeElement.id is "control"
+object[usemap]
+PASS document.activeElement.id is not "control"
+input
+PASS document.activeElement.id is not "control"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
Added: trunk/LayoutTests/imported/blink/fast/forms/label/label-contains-other-interactive-content.html (0 => 249194)
--- trunk/LayoutTests/imported/blink/fast/forms/label/label-contains-other-interactive-content.html (rev 0)
+++ trunk/LayoutTests/imported/blink/fast/forms/label/label-contains-other-interactive-content.html 2019-08-28 10:22:56 UTC (rev 249194)
@@ -0,0 +1,78 @@
+<!DOCTYPE html>
+<body id="body">
+<script src=""
+<script src=""
+<script>
+var interactiveElements1 = ['button', 'details', 'embed', 'iframe', 'label', 'select', 'textarea'];
+var interactiveElements2 = [
+ ['a', 'href'],
+ ['audio', 'controls'],
+ ['video', 'controls'],
+ ['img', 'usemap'],
+ ['object', 'usemap'],
+];
+
+var label = document.createElement('label');
+document.body.appendChild(label);
+var control = document.createElement('input');
+control.id = 'control';
+label.appendChild(control);
+
+interactiveElements1.forEach(function(tag) {
+ var element = document.createElement(tag);
+ element.id = tag;
+ element.style.display = 'block';
+ element.style.width = '100px';
+ element.style.height = '100px';
+ label.appendChild(element);
+ clickElement(element);
+ debug(tag);
+ shouldNotBe('document.activeElement.id', '"control"');
+ document.activeElement.blur();
+ label.removeChild(element);
+});
+debug('');
+
+interactiveElements2.forEach(function(entry) {
+ var element = document.createElement(entry[0]);
+ element.id = entry[0];
+ element.style.display = 'block';
+ element.style.width = '100px';
+ element.style.height = '100px';
+ label.appendChild(element);
+ // Audio elements without controls attribute is always invisible.
+ if (entry[0] != 'audio') {
+ clickElement(element);
+ debug(entry[0]);
+ shouldBeEqualToString('document.activeElement.id', 'control');
+ }
+ document.activeElement.blur();
+
+ element.setAttribute(entry[1], entry[1]);
+ // Prevents page transition.
+ if (entry[0] == 'a')
+ element.addEventListener('click', function(e) { e.preventDefault(); }, false);
+ clickElement(element);
+ debug(entry[0] + '[' + entry[1] + ']');
+ shouldNotBe('document.activeElement.id', '"control"');
+ document.activeElement.blur();
+ label.removeChild(element);
+});
+
+var element = document.createElement('input');
+element.id = 'input';
+element.type = 'text';
+element.style.display = 'block';
+element.style.width = '100px';
+element.style.height = '100px';
+label.appendChild(element);
+clickElement(element);
+debug('input');
+shouldNotBe('document.activeElement.id', '"control"');
+document.activeElement.blur();
+
+// Note: It's impossible to click on input[type=hidden].
+
+label.remove();
+</script>
+</body>
Modified: trunk/LayoutTests/platform/ios-wk2/TestExpectations (249193 => 249194)
--- trunk/LayoutTests/platform/ios-wk2/TestExpectations 2019-08-28 10:21:12 UTC (rev 249193)
+++ trunk/LayoutTests/platform/ios-wk2/TestExpectations 2019-08-28 10:22:56 UTC (rev 249194)
@@ -1016,6 +1016,7 @@
# eventSender.mouseDown is not implemented
fast/loader/location-hash-user-gesture.html [ Skip ]
imported/blink/editing/selection/selectstart-event-crash.html [ Skip ]
+imported/blink/fast/forms/label/label-contains-other-interactive-content.html [ Skip ]
fast/dom/Window/post-message-user-action.html [ Skip ]
fast/images/image-usemap-parsing.html [ Skip ]
fast/shadow-dom/fullscreen-in-shadow-full-screen-ancestor.html [ Skip ]
Modified: trunk/Source/WebCore/ChangeLog (249193 => 249194)
--- trunk/Source/WebCore/ChangeLog 2019-08-28 10:21:12 UTC (rev 249193)
+++ trunk/Source/WebCore/ChangeLog 2019-08-28 10:22:56 UTC (rev 249194)
@@ -1,3 +1,62 @@
+2019-08-28 Carlos Garcia Campos <[email protected]>
+
+ Unable to enter text in https://eat.fi
+ https://bugs.webkit.org/show_bug.cgi?id=193046
+
+ Reviewed by Ryosuke Niwa.
+
+ This is because the button element inside the label is receiving the click event, which causes the form to be
+ submitted. According to the spec we should do nothing in this case, because button element is considered to be
+ interactive content.
+
+ "The activation behavior of a label element for events targeted at interactive content descendants of a label
+ element, and any descendants of those interactive content descendants, must be to do nothing."
+ https://html.spec.whatwg.org/#the-label-element
+
+ This patch adds HTMLElement::isInteractiveContent() according to the HTML spec:
+
+ "Interactive content is content that is specifically intended for user interaction.
+ a (if the href attribute is present), audio (if the controls attribute is present), button, details, embed,
+ iframe, img (if the usemap attribute is present), input (if the type attribute is not in the Hidden state),
+ label, object (if the usemap attribute is present), select, textarea, video (if the controls attribute is
+ present)"
+ https://html.spec.whatwg.org/#interactive-content-2
+
+ That's used in HTMLLabelElement::defaultEventHandler() using the helper method
+ isEventTargetedAtInteractiveDescendants() to decide whether to simulate a click event or do nothing.
+
+ * html/HTMLAnchorElement.cpp:
+ (WebCore::HTMLAnchorElement::isInteractiveContent const):
+ * html/HTMLAnchorElement.h:
+ * html/HTMLButtonElement.h:
+ * html/HTMLDetailsElement.h:
+ * html/HTMLElement.h:
+ (WebCore::HTMLElement::isInteractiveContent const):
+ * html/HTMLEmbedElement.h:
+ * html/HTMLIFrameElement.h:
+ * html/HTMLImageElement.cpp:
+ (WebCore::HTMLImageElement::isInteractiveContent const):
+ * html/HTMLImageElement.h:
+ * html/HTMLInputElement.cpp:
+ (WebCore::HTMLInputElement::isInteractiveContent const):
+ * html/HTMLInputElement.h:
+ * html/HTMLLabelElement.cpp:
+ (WebCore::HTMLLabelElement::isEventTargetedAtInteractiveDescendants const):
+ (WebCore::HTMLLabelElement::defaultEventHandler):
+ * html/HTMLLabelElement.h:
+ * html/HTMLMediaElement.cpp:
+ (WebCore::HTMLMediaElement::isInteractiveContent const):
+ * html/HTMLMediaElement.h:
+ * html/HTMLObjectElement.cpp:
+ (WebCore::HTMLObjectElement::isInteractiveContent const):
+ * html/HTMLObjectElement.h:
+ * html/HTMLSelectElement.h:
+ * html/HTMLTextAreaElement.h:
+ * html/HiddenInputType.h:
+ * html/InputType.cpp:
+ (WebCore::InputType::isInteractiveContent const):
+ * html/InputType.h:
+
2019-08-28 Claudio Saavedra <[email protected]>
[GTK][WPE] Implement HSTS for the soup network backend
Modified: trunk/Source/WebCore/html/HTMLAnchorElement.cpp (249193 => 249194)
--- trunk/Source/WebCore/html/HTMLAnchorElement.cpp 2019-08-28 10:21:12 UTC (rev 249193)
+++ trunk/Source/WebCore/html/HTMLAnchorElement.cpp 2019-08-28 10:22:56 UTC (rev 249194)
@@ -103,6 +103,11 @@
return HTMLElement::isMouseFocusable();
}
+bool HTMLAnchorElement::isInteractiveContent() const
+{
+ return isLink();
+}
+
static bool hasNonEmptyBox(RenderBoxModelObject* renderer)
{
if (!renderer)
Modified: trunk/Source/WebCore/html/HTMLAnchorElement.h (249193 => 249194)
--- trunk/Source/WebCore/html/HTMLAnchorElement.h 2019-08-28 10:21:12 UTC (rev 249193)
+++ trunk/Source/WebCore/html/HTMLAnchorElement.h 2019-08-28 10:22:56 UTC (rev 249194)
@@ -90,6 +90,7 @@
String target() const override;
int defaultTabIndex() const final;
bool draggable() const final;
+ bool isInteractiveContent() const final;
String effectiveTarget() const;
Modified: trunk/Source/WebCore/html/HTMLAppletElement.h (249193 => 249194)
--- trunk/Source/WebCore/html/HTMLAppletElement.h 2019-08-28 10:21:12 UTC (rev 249193)
+++ trunk/Source/WebCore/html/HTMLAppletElement.h 2019-08-28 10:22:56 UTC (rev 249194)
@@ -44,6 +44,8 @@
void updateWidget(CreatePlugins) final;
bool canEmbedJava() const;
+
+ bool isInteractiveContent() const final { return true; }
};
} // namespace WebCore
Modified: trunk/Source/WebCore/html/HTMLButtonElement.h (249193 => 249194)
--- trunk/Source/WebCore/html/HTMLButtonElement.h 2019-08-28 10:21:12 UTC (rev 249193)
+++ trunk/Source/WebCore/html/HTMLButtonElement.h 2019-08-28 10:22:56 UTC (rev 249194)
@@ -61,6 +61,7 @@
bool isEnumeratable() const final { return true; }
bool supportLabels() const final { return true; }
+ bool isInteractiveContent() const final { return true; }
bool isSuccessfulSubmitButton() const final;
bool matchesDefaultPseudoClass() const final;
Modified: trunk/Source/WebCore/html/HTMLDetailsElement.h (249193 => 249194)
--- trunk/Source/WebCore/html/HTMLDetailsElement.h 2019-08-28 10:21:12 UTC (rev 249193)
+++ trunk/Source/WebCore/html/HTMLDetailsElement.h 2019-08-28 10:22:56 UTC (rev 249194)
@@ -51,6 +51,7 @@
void didAddUserAgentShadowRoot(ShadowRoot&) final;
bool hasCustomFocusLogic() const final { return true; }
+ bool isInteractiveContent() const final { return true; }
bool m_isOpen { false };
HTMLSlotElement* m_summarySlot { nullptr };
Modified: trunk/Source/WebCore/html/HTMLElement.h (249193 => 249194)
--- trunk/Source/WebCore/html/HTMLElement.h 2019-08-28 10:21:12 UTC (rev 249193)
+++ trunk/Source/WebCore/html/HTMLElement.h 2019-08-28 10:22:56 UTC (rev 249194)
@@ -90,6 +90,8 @@
virtual FormNamedItem* asFormNamedItem();
virtual FormAssociatedElement* asFormAssociatedElement();
+ virtual bool isInteractiveContent() const { return false; }
+
bool hasTagName(const HTMLQualifiedName& name) const { return hasLocalName(name.localName()); }
static const AtomString& eventNameForEventHandlerAttribute(const QualifiedName& attributeName);
Modified: trunk/Source/WebCore/html/HTMLEmbedElement.h (249193 => 249194)
--- trunk/Source/WebCore/html/HTMLEmbedElement.h 2019-08-28 10:21:12 UTC (rev 249193)
+++ trunk/Source/WebCore/html/HTMLEmbedElement.h 2019-08-28 10:22:56 UTC (rev 249194)
@@ -43,6 +43,8 @@
bool isURLAttribute(const Attribute&) const final;
const AtomString& imageSourceURL() const final;
+ bool isInteractiveContent() const final { return true; }
+
RenderWidget* renderWidgetLoadingPlugin() const final;
void updateWidget(CreatePlugins) final;
Modified: trunk/Source/WebCore/html/HTMLIFrameElement.h (249193 => 249194)
--- trunk/Source/WebCore/html/HTMLIFrameElement.h 2019-08-28 10:21:12 UTC (rev 249193)
+++ trunk/Source/WebCore/html/HTMLIFrameElement.h 2019-08-28 10:22:56 UTC (rev 249194)
@@ -53,6 +53,8 @@
bool isPresentationAttribute(const QualifiedName&) const final;
void collectStyleForPresentationAttribute(const QualifiedName&, const AtomString&, MutableStyleProperties&) final;
+ bool isInteractiveContent() const final { return true; }
+
bool rendererIsNeeded(const RenderStyle&) final;
RenderPtr<RenderElement> createElementRenderer(RenderStyle&&, const RenderTreePosition&) final;
Modified: trunk/Source/WebCore/html/HTMLImageElement.cpp (249193 => 249194)
--- trunk/Source/WebCore/html/HTMLImageElement.cpp 2019-08-28 10:21:12 UTC (rev 249193)
+++ trunk/Source/WebCore/html/HTMLImageElement.cpp 2019-08-28 10:22:56 UTC (rev 249194)
@@ -303,6 +303,11 @@
return HTMLElement::isFocusable();
}
+bool HTMLImageElement::isInteractiveContent() const
+{
+ return hasAttributeWithoutSynchronization(usemapAttr);
+}
+
void HTMLImageElement::didAttachRenderers()
{
if (!is<RenderImage>(renderer()))
Modified: trunk/Source/WebCore/html/HTMLImageElement.h (249193 => 249194)
--- trunk/Source/WebCore/html/HTMLImageElement.h 2019-08-28 10:21:12 UTC (rev 249193)
+++ trunk/Source/WebCore/html/HTMLImageElement.h 2019-08-28 10:22:56 UTC (rev 249194)
@@ -156,6 +156,8 @@
HTMLImageElement& asHTMLElement() final { return *this; }
const HTMLImageElement& asHTMLElement() const final { return *this; }
+ bool isInteractiveContent() const final;
+
void selectImageSource();
ImageCandidate bestFitSourceFromPictureElement();
Modified: trunk/Source/WebCore/html/HTMLInputElement.cpp (249193 => 249194)
--- trunk/Source/WebCore/html/HTMLInputElement.cpp 2019-08-28 10:21:12 UTC (rev 249193)
+++ trunk/Source/WebCore/html/HTMLInputElement.cpp 2019-08-28 10:22:56 UTC (rev 249194)
@@ -450,6 +450,11 @@
return m_inputType->isMouseFocusable();
}
+bool HTMLInputElement::isInteractiveContent() const
+{
+ return m_inputType->isInteractiveContent();
+}
+
bool HTMLInputElement::isTextFormControlFocusable() const
{
return HTMLTextFormControlElement::isFocusable();
Modified: trunk/Source/WebCore/html/HTMLInputElement.h (249193 => 249194)
--- trunk/Source/WebCore/html/HTMLInputElement.h 2019-08-28 10:21:12 UTC (rev 249193)
+++ trunk/Source/WebCore/html/HTMLInputElement.h 2019-08-28 10:22:56 UTC (rev 249194)
@@ -375,6 +375,8 @@
void updateFocusAppearance(SelectionRestorationMode, SelectionRevealMode) final;
bool shouldUseInputMethod() final;
+ bool isInteractiveContent() const final;
+
bool isInnerTextElementEditable() const final { return !hasAutoFillStrongPasswordButton() && HTMLTextFormControlElement::isInnerTextElementEditable(); }
bool canTriggerImplicitSubmission() const final { return isTextField(); }
Modified: trunk/Source/WebCore/html/HTMLLabelElement.cpp (249193 => 249194)
--- trunk/Source/WebCore/html/HTMLLabelElement.cpp 2019-08-28 10:21:12 UTC (rev 249193)
+++ trunk/Source/WebCore/html/HTMLLabelElement.cpp 2019-08-28 10:22:56 UTC (rev 249194)
@@ -111,6 +111,22 @@
element->setHovered(over);
}
+bool HTMLLabelElement::isEventTargetedAtInteractiveDescendants(Event& event) const
+{
+ if (!is<Node>(event.target()))
+ return false;
+
+ auto& node = downcast<Node>(*event.target());
+ if (!containsIncludingShadowDOM(&node))
+ return false;
+
+ for (const auto* it = &node; it && it != this; it = it->parentElementInComposedTree()) {
+ if (is<HTMLElement>(it) && downcast<HTMLElement>(*it).isInteractiveContent())
+ return true;
+ }
+
+ return false;
+}
void HTMLLabelElement::defaultEventHandler(Event& event)
{
static bool processingClick = false;
@@ -125,6 +141,15 @@
return;
}
+ // The activation behavior of a label element for events targeted at interactive
+ // content descendants of a label element, and any descendants of those interactive
+ // content descendants, must be to do nothing.
+ // https://html.spec.whatwg.org/#the-label-element
+ if (isEventTargetedAtInteractiveDescendants(event)) {
+ HTMLElement::defaultEventHandler(event);
+ return;
+ }
+
processingClick = true;
control->dispatchSimulatedClick(&event);
Modified: trunk/Source/WebCore/html/HTMLLabelElement.h (249193 => 249194)
--- trunk/Source/WebCore/html/HTMLLabelElement.h 2019-08-28 10:21:12 UTC (rev 249193)
+++ trunk/Source/WebCore/html/HTMLLabelElement.h 2019-08-28 10:22:56 UTC (rev 249194)
@@ -40,6 +40,8 @@
private:
HTMLLabelElement(const QualifiedName&, Document&);
+ bool isEventTargetedAtInteractiveDescendants(Event&) const;
+
void accessKeyAction(bool sendMouseEvents) final;
// Overridden to update the hover/active state of the corresponding control.
@@ -50,6 +52,8 @@
void defaultEventHandler(Event&) final;
void focus(bool restorePreviousSelection, FocusDirection) final;
+
+ bool isInteractiveContent() const final { return true; }
};
} //namespace
Modified: trunk/Source/WebCore/html/HTMLMediaElement.cpp (249193 => 249194)
--- trunk/Source/WebCore/html/HTMLMediaElement.cpp 2019-08-28 10:21:12 UTC (rev 249193)
+++ trunk/Source/WebCore/html/HTMLMediaElement.cpp 2019-08-28 10:22:56 UTC (rev 249194)
@@ -803,6 +803,11 @@
return false;
}
+bool HTMLMediaElement::isInteractiveContent() const
+{
+ return controls();
+}
+
void HTMLMediaElement::parseAttribute(const QualifiedName& name, const AtomString& value)
{
if (name == srcAttr) {
Modified: trunk/Source/WebCore/html/HTMLMediaElement.h (249193 => 249194)
--- trunk/Source/WebCore/html/HTMLMediaElement.h 2019-08-28 10:21:12 UTC (rev 249193)
+++ trunk/Source/WebCore/html/HTMLMediaElement.h 2019-08-28 10:22:56 UTC (rev 249194)
@@ -626,6 +626,7 @@
void didFinishInsertingNode() override;
void removedFromAncestor(RemovalType, ContainerNode&) override;
void didRecalcStyle(Style::Change) override;
+ bool isInteractiveContent() const override;
void willBecomeFullscreenElement() override;
void willStopBeingFullscreenElement() override;
Modified: trunk/Source/WebCore/html/HTMLObjectElement.cpp (249193 => 249194)
--- trunk/Source/WebCore/html/HTMLObjectElement.cpp 2019-08-28 10:21:12 UTC (rev 249193)
+++ trunk/Source/WebCore/html/HTMLObjectElement.cpp 2019-08-28 10:22:56 UTC (rev 249194)
@@ -325,6 +325,11 @@
return attribute.name() == dataAttr || attribute.name() == codebaseAttr || (attribute.name() == usemapAttr && attribute.value().string()[0] != '#') || HTMLPlugInImageElement::isURLAttribute(attribute);
}
+bool HTMLObjectElement::isInteractiveContent() const
+{
+ return hasAttributeWithoutSynchronization(usemapAttr);
+}
+
const AtomString& HTMLObjectElement::imageSourceURL() const
{
return attributeWithoutSynchronization(dataAttr);
Modified: trunk/Source/WebCore/html/HTMLObjectElement.h (249193 => 249194)
--- trunk/Source/WebCore/html/HTMLObjectElement.h 2019-08-28 10:21:12 UTC (rev 249193)
+++ trunk/Source/WebCore/html/HTMLObjectElement.h 2019-08-28 10:22:56 UTC (rev 249194)
@@ -95,6 +95,8 @@
HTMLObjectElement& asHTMLElement() final { return *this; }
const HTMLObjectElement& asHTMLElement() const final { return *this; }
+ bool isInteractiveContent() const final;
+
bool isFormControlElement() const final { return false; }
bool isEnumeratable() const final { return true; }
Modified: trunk/Source/WebCore/html/HTMLSelectElement.h (249193 => 249194)
--- trunk/Source/WebCore/html/HTMLSelectElement.h 2019-08-28 10:21:12 UTC (rev 249193)
+++ trunk/Source/WebCore/html/HTMLSelectElement.h 2019-08-28 10:22:56 UTC (rev 249194)
@@ -124,6 +124,8 @@
bool isEnumeratable() const final { return true; }
bool supportLabels() const final { return true; }
+ bool isInteractiveContent() const final { return true; }
+
FormControlState saveFormControlState() const final;
void restoreFormControlState(const FormControlState&) final;
Modified: trunk/Source/WebCore/html/HTMLTextAreaElement.h (249193 => 249194)
--- trunk/Source/WebCore/html/HTMLTextAreaElement.h 2019-08-28 10:21:12 UTC (rev 249193)
+++ trunk/Source/WebCore/html/HTMLTextAreaElement.h 2019-08-28 10:22:56 UTC (rev 249194)
@@ -98,6 +98,8 @@
bool isEnumeratable() const final { return true; }
bool supportLabels() const final { return true; }
+ bool isInteractiveContent() const final { return true; }
+
const AtomString& formControlType() const final;
FormControlState saveFormControlState() const final;
Modified: trunk/Source/WebCore/html/HiddenInputType.h (249193 => 249194)
--- trunk/Source/WebCore/html/HiddenInputType.h 2019-08-28 10:21:12 UTC (rev 249193)
+++ trunk/Source/WebCore/html/HiddenInputType.h 2019-08-28 10:22:56 UTC (rev 249194)
@@ -49,6 +49,7 @@
bool storesValueSeparateFromAttribute() override;
bool isHiddenType() const override;
bool supportLabels() const override { return false; }
+ bool isInteractiveContent() const final { return false; }
bool shouldRespectHeightAndWidthAttributes() override;
void setValue(const String&, bool, TextFieldEventBehavior) override;
bool appendFormData(DOMFormData&, bool) const override;
Modified: trunk/Source/WebCore/html/InputType.cpp (249193 => 249194)
--- trunk/Source/WebCore/html/InputType.cpp 2019-08-28 10:21:12 UTC (rev 249193)
+++ trunk/Source/WebCore/html/InputType.cpp 2019-08-28 10:22:56 UTC (rev 249194)
@@ -797,6 +797,11 @@
return false;
}
+bool InputType::isInteractiveContent() const
+{
+ return true;
+}
+
bool InputType::supportLabels() const
{
return true;
Modified: trunk/Source/WebCore/html/InputType.h (249193 => 249194)
--- trunk/Source/WebCore/html/InputType.h 2019-08-28 10:21:12 UTC (rev 249193)
+++ trunk/Source/WebCore/html/InputType.h 2019-08-28 10:22:56 UTC (rev 249194)
@@ -101,6 +101,7 @@
virtual bool isFileUpload() const;
virtual bool isHiddenType() const;
virtual bool isImageButton() const;
+ virtual bool isInteractiveContent() const;
virtual bool supportLabels() const;
virtual bool isMonthField() const;
virtual bool isNumberField() const;