⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 286056 in webkit


Ignore:
Timestamp:
Nov 19, 2021, 6:30:34 AM (5 years ago)
Author:
Carlos Garcia Campos
Message:

[GTK][a11y] Add implementation of action interface when building with ATSPI
https://bugs.webkit.org/show_bug.cgi?id=232749

Reviewed by Adrian Perez de Castro.

Source/WebCore:

  • SourcesGTK.txt:
  • accessibility/atspi/AccessibilityObjectActionAtspi.cpp: Added.

(WebCore::AccessibilityObjectAtspi::actionName const):
(WebCore::AccessibilityObjectAtspi::localizedActionName const):
(WebCore::AccessibilityObjectAtspi::actionKeyBinding const):
(WebCore::AccessibilityObjectAtspi::doAction const):

  • accessibility/atspi/AccessibilityObjectAtspi.cpp:

(WebCore::AccessibilityObjectAtspi::interfacesForObject):
(WebCore::AccessibilityObjectAtspi::path):
(WebCore::AccessibilityObjectAtspi::buildInterfaces const):

  • accessibility/atspi/AccessibilityObjectAtspi.h:

Tools:

Add a unit test for the action interface and WTR implementation.

  • TestWebKitAPI/Tests/WebKitGtk/TestWebKitAccessibility.cpp:

(testActionBasic):
(beforeAll):

  • WebKitTestRunner/InjectedBundle/atspi/AccessibilityUIElementAtspi.cpp:

(WTR::AccessibilityUIElement::isPressActionSupported):
(WTR::AccessibilityUIElement::press):

Location:
trunk
Files:
1 added
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r286055 r286056  
     12021-11-19  Carlos Garcia Campos  <cgarcia@igalia.com>
     2
     3        [GTK][a11y] Add implementation of action interface when building with ATSPI
     4        https://bugs.webkit.org/show_bug.cgi?id=232749
     5
     6        Reviewed by Adrian Perez de Castro.
     7
     8        * SourcesGTK.txt:
     9        * accessibility/atspi/AccessibilityObjectActionAtspi.cpp: Added.
     10        (WebCore::AccessibilityObjectAtspi::actionName const):
     11        (WebCore::AccessibilityObjectAtspi::localizedActionName const):
     12        (WebCore::AccessibilityObjectAtspi::actionKeyBinding const):
     13        (WebCore::AccessibilityObjectAtspi::doAction const):
     14        * accessibility/atspi/AccessibilityObjectAtspi.cpp:
     15        (WebCore::AccessibilityObjectAtspi::interfacesForObject):
     16        (WebCore::AccessibilityObjectAtspi::path):
     17        (WebCore::AccessibilityObjectAtspi::buildInterfaces const):
     18        * accessibility/atspi/AccessibilityObjectAtspi.h:
     19
    1202021-11-19  Carlos Garcia Campos  <cgarcia@igalia.com>
    221
  • trunk/Source/WebCore/SourcesGTK.txt

    r286055 r286056  
    4242accessibility/atspi/AccessibilityAtspi.cpp
    4343accessibility/atspi/AccessibilityObjectAtspi.cpp
     44accessibility/atspi/AccessibilityObjectActionAtspi.cpp
    4445accessibility/atspi/AccessibilityObjectComponentAtspi.cpp
    4546accessibility/atspi/AccessibilityObjectHyperlinkAtspi.cpp
  • trunk/Source/WebCore/accessibility/atspi/AccessibilityObjectAtspi.cpp

    r286055 r286056  
    6161OptionSet<AccessibilityObjectAtspi::Interface> AccessibilityObjectAtspi::interfacesForObject(AXCoreObject& coreObject)
    6262{
    63     OptionSet<Interface> interfaces = { Interface::Accessible, Interface::Component };
     63    OptionSet<Interface> interfaces = { Interface::Accessible, Interface::Component, Interface::Action };
    6464
    6565    RenderObject* renderer = coreObject.isAccessibilityRenderObject() ? coreObject.renderer() : nullptr;
     
    484484        if (m_interfaces.contains(Interface::Hypertext))
    485485            interfaces.append({ const_cast<GDBusInterfaceInfo*>(&webkit_hypertext_interface), &s_hypertextFunctions });
     486        if (m_interfaces.contains(Interface::Action))
     487            interfaces.append({ const_cast<GDBusInterfaceInfo*>(&webkit_action_interface), &s_actionFunctions });
    486488        m_path = atspiRoot->atspi().registerObject(*this, WTFMove(interfaces));
    487489    }
     
    11161118    if (m_interfaces.contains(Interface::Hypertext))
    11171119        g_variant_builder_add(builder, "s", webkit_hypertext_interface.name);
     1120    if (m_interfaces.contains(Interface::Action))
     1121        g_variant_builder_add(builder, "s", webkit_action_interface.name);
    11181122}
    11191123
  • trunk/Source/WebCore/accessibility/atspi/AccessibilityObjectAtspi.h

    r286055 r286056  
    4949        Value = 1 << 3,
    5050        Hyperlink = 1 << 4,
    51         Hypertext = 1 << 5
     51        Hypertext = 1 << 5,
     52        Action = 1 << 6
    5253    };
    5354    const OptionSet<Interface>& interfaces() const { return m_interfaces; }
     
    123124    WEBCORE_EXPORT URL url() const;
    124125
     126    WEBCORE_EXPORT String actionName() const;
     127    WEBCORE_EXPORT bool doAction() const;
     128
    125129private:
    126130    explicit AccessibilityObjectAtspi(AXCoreObject*);
     
    162166    std::optional<unsigned> hyperlinkIndex(unsigned) const;
    163167
     168    String localizedActionName() const;
     169    String actionKeyBinding() const;
     170
    164171    static OptionSet<Interface> interfacesForObject(AXCoreObject&);
    165172
     
    170177    static GDBusInterfaceVTable s_hyperlinkFunctions;
    171178    static GDBusInterfaceVTable s_hypertextFunctions;
     179    static GDBusInterfaceVTable s_actionFunctions;
    172180
    173181    AXCoreObject* m_axObject { nullptr };
  • trunk/Tools/ChangeLog

    r286055 r286056  
     12021-11-19  Carlos Garcia Campos  <cgarcia@igalia.com>
     2
     3        [GTK][a11y] Add implementation of action interface when building with ATSPI
     4        https://bugs.webkit.org/show_bug.cgi?id=232749
     5
     6        Reviewed by Adrian Perez de Castro.
     7
     8        Add a unit test for the action interface and WTR implementation.
     9
     10        * TestWebKitAPI/Tests/WebKitGtk/TestWebKitAccessibility.cpp:
     11        (testActionBasic):
     12        (beforeAll):
     13        * WebKitTestRunner/InjectedBundle/atspi/AccessibilityUIElementAtspi.cpp:
     14        (WTR::AccessibilityUIElement::isPressActionSupported):
     15        (WTR::AccessibilityUIElement::press):
     16
    1172021-11-19  Carlos Garcia Campos  <cgarcia@igalia.com>
    218
  • trunk/Tools/TestWebKitAPI/Tests/WebKitGtk/TestWebKitAccessibility.cpp

    r286055 r286056  
    18851885}
    18861886
     1887static void testActionBasic(AccessibilityTest* test, gconstpointer)
     1888{
     1889    test->showInWindow(800, 600);
     1890    test->loadHtml(
     1891        "<html>"
     1892        "  <body>"
     1893        "    <p>This is <button accessKey='p'>button</button> and <a href='https://www.webkitgtk.org'>link</a> in a paragraph</p>"
     1894        "  </body>"
     1895        "</html>",
     1896        nullptr);
     1897    test->waitUntilLoadFinished();
     1898
     1899    auto testApp = test->findTestApplication();
     1900    g_assert_true(ATSPI_IS_ACCESSIBLE(testApp.get()));
     1901
     1902    auto documentWeb = test->findDocumentWeb(testApp.get());
     1903    g_assert_true(ATSPI_IS_ACCESSIBLE(documentWeb.get()));
     1904    g_assert_cmpint(atspi_accessible_get_child_count(documentWeb.get(), nullptr), ==, 1);
     1905
     1906    auto p = adoptGRef(atspi_accessible_get_child_at_index(documentWeb.get(), 0, nullptr));
     1907    g_assert_true(ATSPI_IS_ACTION(p.get()));
     1908    // Paragraph implements action interface, but it does nothing.
     1909    g_assert_cmpint(atspi_action_get_n_actions(ATSPI_ACTION(p.get()), nullptr), ==, 1);
     1910    GUniquePtr<char> name(atspi_action_get_action_name(ATSPI_ACTION(p.get()), 0, nullptr));
     1911    g_assert_cmpstr(name.get(), ==, "");
     1912    GUniquePtr<char> localizedName(atspi_action_get_localized_name(ATSPI_ACTION(p.get()), 0, nullptr));
     1913    g_assert_cmpstr(localizedName.get(), ==, "");
     1914    GUniquePtr<char> keyBinding(atspi_action_get_key_binding(ATSPI_ACTION(p.get()), 0, nullptr));
     1915    g_assert_cmpstr(keyBinding.get(), ==, "");
     1916
     1917    auto button = adoptGRef(atspi_accessible_get_child_at_index(p.get(), 0, nullptr));
     1918    g_assert_true(ATSPI_IS_ACTION(button.get()));
     1919    g_assert_cmpint(atspi_action_get_n_actions(ATSPI_ACTION(button.get()), nullptr), ==, 1);
     1920    name.reset(atspi_action_get_action_name(ATSPI_ACTION(button.get()), 0, nullptr));
     1921    g_assert_cmpstr(name.get(), ==, "press");
     1922#if USE(ATSPI)
     1923    localizedName.reset(atspi_action_get_localized_name(ATSPI_ACTION(button.get()), 0, nullptr));
     1924    g_assert_cmpstr(localizedName.get(), ==, "press");
     1925#endif
     1926    keyBinding.reset(atspi_action_get_key_binding(ATSPI_ACTION(button.get()), 0, nullptr));
     1927    g_assert_cmpstr(keyBinding.get(), ==, "p");
     1928
     1929    auto a = adoptGRef(atspi_accessible_get_child_at_index(p.get(), 1, nullptr));
     1930    g_assert_true(ATSPI_IS_ACTION(a.get()));
     1931    g_assert_cmpint(atspi_action_get_n_actions(ATSPI_ACTION(a.get()), nullptr), ==, 1);
     1932    name.reset(atspi_action_get_action_name(ATSPI_ACTION(a.get()), 0, nullptr));
     1933    g_assert_cmpstr(name.get(), ==, "jump");
     1934#if USE(ATSPI)
     1935    localizedName.reset(atspi_action_get_localized_name(ATSPI_ACTION(a.get()), 0, nullptr));
     1936    g_assert_cmpstr(localizedName.get(), ==, "jump");
     1937#endif
     1938    keyBinding.reset(atspi_action_get_key_binding(ATSPI_ACTION(a.get()), 0, nullptr));
     1939    g_assert_cmpstr(keyBinding.get(), ==, "");
     1940}
     1941
    18871942void beforeAll()
    18881943{
     
    19081963    AccessibilityTest::add("WebKitAccessibility", "hyperlink/basic", testHyperlinkBasic);
    19091964    AccessibilityTest::add("WebKitAccessibility", "hypertext/basic", testHypertextBasic);
     1965    AccessibilityTest::add("WebKitAccessibility", "action/basic", testActionBasic);
    19101966}
    19111967
  • trunk/Tools/WebKitTestRunner/InjectedBundle/atspi/AccessibilityUIElementAtspi.cpp

    r286050 r286056  
    795795bool AccessibilityUIElement::isPressActionSupported()
    796796{
    797     return false;
     797    m_element->updateBackingStore();
     798    auto name = m_element->actionName();
     799    return name == "press" || name == "jump";
    798800}
    799801
     
    10951097void AccessibilityUIElement::press()
    10961098{
     1099    m_element->doAction();
    10971100}
    10981101
Note: See TracChangeset for help on using the changeset viewer.