[Mac] Add a new quirk to HTMLFormControlElement::isMouseFocusable
authorjiewen_tan@apple.com <jiewen_tan@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 17 Jan 2019 19:34:29 +0000 (19:34 +0000)
committerjiewen_tan@apple.com <jiewen_tan@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 17 Jan 2019 19:34:29 +0000 (19:34 +0000)
https://bugs.webkit.org/show_bug.cgi?id=193478
<rdar://problem/34368591>

Reviewed by Brent Fulgham.

By default in macOS, submit buttons (controls) are not focusable. WebKit follows this system convention
as suggested by the spec: https://html.spec.whatwg.org/multipage/interaction.html#focusable-area. This
is also the convention Firefox respects. However, Chrome doesn't. ceac.state.gov is by far the only
website that assumes submit buttons are focusable, and will prohibit users from completing immigration
forms, such as DS160 if buttons are not. To help immigrations, we decide to add a new quirk to
HTMLFormControlElement::isMouseFocusable such that submit buttons are mouse focusable.

This quirk is for ceac.state.gov specifically, and therefore no tests.

* html/HTMLFormControlElement.cpp:
(WebCore::HTMLFormControlElement::isMouseFocusable const):
(WebCore::HTMLFormControlElement::needsSiteSpecificQuirks const):
* html/HTMLFormControlElement.h:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@240122 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/ChangeLog
Source/WebCore/html/HTMLFormControlElement.cpp
Source/WebCore/html/HTMLFormControlElement.h

index 965152b..088803b 100644 (file)
@@ -1,3 +1,25 @@
+2019-01-17  Jiewen Tan  <jiewen_tan@apple.com>
+
+        [Mac] Add a new quirk to HTMLFormControlElement::isMouseFocusable
+        https://bugs.webkit.org/show_bug.cgi?id=193478
+        <rdar://problem/34368591>
+
+        Reviewed by Brent Fulgham.
+
+        By default in macOS, submit buttons (controls) are not focusable. WebKit follows this system convention
+        as suggested by the spec: https://html.spec.whatwg.org/multipage/interaction.html#focusable-area. This
+        is also the convention Firefox respects. However, Chrome doesn't. ceac.state.gov is by far the only
+        website that assumes submit buttons are focusable, and will prohibit users from completing immigration
+        forms, such as DS160 if buttons are not. To help immigrations, we decide to add a new quirk to
+        HTMLFormControlElement::isMouseFocusable such that submit buttons are mouse focusable.
+
+        This quirk is for ceac.state.gov specifically, and therefore no tests.
+
+        * html/HTMLFormControlElement.cpp:
+        (WebCore::HTMLFormControlElement::isMouseFocusable const):
+        (WebCore::HTMLFormControlElement::needsSiteSpecificQuirks const):
+        * html/HTMLFormControlElement.h:
+
 2019-01-17  Alex Christensen  <achristensen@webkit.org>
 
         Fix WinCairo build after r240117
index 1d647ef..0d2b8ef 100644 (file)
@@ -40,6 +40,7 @@
 #include "HTMLTextAreaElement.h"
 #include "RenderBox.h"
 #include "RenderTheme.h"
+#include "Settings.h"
 #include "StyleTreeResolver.h"
 #include "ValidationMessage.h"
 #include <wtf/IsoMallocInlines.h>
@@ -372,6 +373,8 @@ bool HTMLFormControlElement::isMouseFocusable() const
 #if PLATFORM(GTK)
     return HTMLElement::isMouseFocusable();
 #else
+    if (needsMouseFocusableQuirk())
+        return HTMLElement::isMouseFocusable();
     return false;
 #endif
 }
@@ -655,4 +658,18 @@ AutofillData HTMLFormControlElement::autofillData() const
     return AutofillData::createFromHTMLFormControlElement(*this);
 }
 
+// FIXME: We should remove the quirk once <rdar://problem/47334655> is fixed.
+bool HTMLFormControlElement::needsMouseFocusableQuirk() const
+{
+#if PLATFORM(MAC)
+    if (!document().settings().needsSiteSpecificQuirks())
+        return false;
+
+    auto host = document().url().host();
+    return equalLettersIgnoringASCIICase(host, "ceac.state.gov") || host.endsWithIgnoringASCIICase(".ceac.state.gov");
+#else
+    return false;
+#endif
+}
+
 } // namespace Webcore
index d876573..9a42e4e 100644 (file)
@@ -177,6 +177,8 @@ private:
     const HTMLFormControlElement& asHTMLElement() const final { return *this; }
     HTMLFormControlElement* asFormNamedItem() final { return this; }
 
+    bool needsMouseFocusableQuirk() const;
+
     std::unique_ptr<ValidationMessage> m_validationMessage;
     unsigned m_disabled : 1;
     unsigned m_isReadOnly : 1;