Changeset 244072 in webkit


Ignore:
Timestamp:
Apr 9, 2019 2:01:35 AM (5 years ago)
Author:
Carlos Garcia Campos
Message:

[ATK] Cleanup WebKitAccessibleHyperlink
https://bugs.webkit.org/show_bug.cgi?id=196602

Reviewed by Michael Catanzaro.

Cleanups:

  • Rename webkitAccessibleHyperlinkNew() as webkitAccessibleHyperlinkGetOrCreate() and move the code to get/set the object data here.
  • Use WEBKIT_DEFINE_TYPE instead of custom type registration. This ensures that all CStrings used in private struct are no longer leaked.
  • Remove all confusing core() functions and simply use webkitAccessibleGetAccessibilityObject().
  • Use nullptr instead of 0 and other coding style issues.
  • accessibility/atk/WebKitAccessibleHyperlink.cpp:

(webkitAccessibleHyperlinkActionDoAction):
(webkitAccessibleHyperlinkActionGetNActions):
(webkitAccessibleHyperlinkActionGetDescription):
(webkitAccessibleHyperlinkActionGetKeybinding):
(webkitAccessibleHyperlinkActionGetName):
(atk_action_interface_init):
(webkitAccessibleHyperlinkGetURI):
(webkitAccessibleHyperlinkGetObject):
(rangeLengthForObject):
(webkitAccessibleHyperlinkGetStartIndex):
(webkitAccessibleHyperlinkGetEndIndex):
(webkitAccessibleHyperlinkIsValid):
(webkitAccessibleHyperlinkGetNAnchors):
(webkitAccessibleHyperlinkIsSelectedLink):
(webkitAccessibleHyperlinkGetProperty):
(webkitAccessibleHyperlinkSetProperty):
(webkit_accessible_hyperlink_class_init):
(webkitAccessibleHyperlinkGetOrCreate):
(core): Deleted.
(atkActionInterfaceInit): Deleted.
(getRangeLengthForObject): Deleted.
(webkitAccessibleHyperlinkFinalize): Deleted.
(webkitAccessibleHyperlinkClassInit): Deleted.
(webkitAccessibleHyperlinkInit): Deleted.
(webkitAccessibleHyperlinkGetType): Deleted.
(webkitAccessibleHyperlinkNew): Deleted.
(webkitAccessibleHyperlinkGetAccessibilityObject): Deleted.

  • accessibility/atk/WebKitAccessibleHyperlink.h:
  • accessibility/atk/WebKitAccessibleInterfaceHyperlinkImpl.cpp:

(webkitAccessibleHyperlinkImplGetHyperlink):
(webkitAccessibleHyperlinkImplInterfaceInit):

Location:
trunk/Source/WebCore
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r244068 r244072  
     12019-04-09  Carlos Garcia Campos  <cgarcia@igalia.com>
     2
     3        [ATK] Cleanup WebKitAccessibleHyperlink
     4        https://bugs.webkit.org/show_bug.cgi?id=196602
     5
     6        Reviewed by Michael Catanzaro.
     7
     8        Cleanups:
     9
     10         - Rename webkitAccessibleHyperlinkNew() as webkitAccessibleHyperlinkGetOrCreate() and move the code to get/set
     11           the object data here.
     12         - Use WEBKIT_DEFINE_TYPE instead of custom type registration. This ensures that all CStrings used in private
     13           struct are no longer leaked.
     14         - Remove all confusing core() functions and simply use webkitAccessibleGetAccessibilityObject().
     15         - Use nullptr instead of 0 and other coding style issues.
     16
     17        * accessibility/atk/WebKitAccessibleHyperlink.cpp:
     18        (webkitAccessibleHyperlinkActionDoAction):
     19        (webkitAccessibleHyperlinkActionGetNActions):
     20        (webkitAccessibleHyperlinkActionGetDescription):
     21        (webkitAccessibleHyperlinkActionGetKeybinding):
     22        (webkitAccessibleHyperlinkActionGetName):
     23        (atk_action_interface_init):
     24        (webkitAccessibleHyperlinkGetURI):
     25        (webkitAccessibleHyperlinkGetObject):
     26        (rangeLengthForObject):
     27        (webkitAccessibleHyperlinkGetStartIndex):
     28        (webkitAccessibleHyperlinkGetEndIndex):
     29        (webkitAccessibleHyperlinkIsValid):
     30        (webkitAccessibleHyperlinkGetNAnchors):
     31        (webkitAccessibleHyperlinkIsSelectedLink):
     32        (webkitAccessibleHyperlinkGetProperty):
     33        (webkitAccessibleHyperlinkSetProperty):
     34        (webkit_accessible_hyperlink_class_init):
     35        (webkitAccessibleHyperlinkGetOrCreate):
     36        (core): Deleted.
     37        (atkActionInterfaceInit): Deleted.
     38        (getRangeLengthForObject): Deleted.
     39        (webkitAccessibleHyperlinkFinalize): Deleted.
     40        (webkitAccessibleHyperlinkClassInit): Deleted.
     41        (webkitAccessibleHyperlinkInit): Deleted.
     42        (webkitAccessibleHyperlinkGetType): Deleted.
     43        (webkitAccessibleHyperlinkNew): Deleted.
     44        (webkitAccessibleHyperlinkGetAccessibilityObject): Deleted.
     45        * accessibility/atk/WebKitAccessibleHyperlink.h:
     46        * accessibility/atk/WebKitAccessibleInterfaceHyperlinkImpl.cpp:
     47        (webkitAccessibleHyperlinkImplGetHyperlink):
     48        (webkitAccessibleHyperlinkImplInterfaceInit):
     49
    1502019-04-08  Simon Fraser  <simon.fraser@apple.com>
    251
  • trunk/Source/WebCore/accessibility/atk/WebKitAccessibleHyperlink.cpp

    r243970 r244072  
    3535#include "WebKitAccessible.h"
    3636#include "WebKitAccessibleUtil.h"
     37#include <wtf/glib/WTFGType.h>
    3738#include <wtf/text/CString.h>
    3839
    39 #include <atk/atk.h>
    40 #include <glib.h>
    41 
    4240using namespace WebCore;
     41
     42static void webkit_accessible_hyperlink_atk_action_interface_init(AtkActionIface*);
    4343
    4444struct _WebKitAccessibleHyperlinkPrivate {
     
    5050};
    5151
    52 #define WEBKIT_ACCESSIBLE_HYPERLINK_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE((obj), WEBKIT_TYPE_ACCESSIBLE_HYPERLINK, WebKitAccessibleHyperlinkPrivate))
     52WEBKIT_DEFINE_TYPE_WITH_CODE(
     53    WebKitAccessibleHyperlink, webkit_accessible_hyperlink, ATK_TYPE_HYPERLINK,
     54    G_IMPLEMENT_INTERFACE(ATK_TYPE_ACTION, webkit_accessible_hyperlink_atk_action_interface_init))
    5355
    5456enum {
     
    5860};
    5961
    60 static gpointer webkitAccessibleHyperlinkParentClass = 0;
    61 
    62 static AccessibilityObject* core(WebKitAccessible* accessible)
    63 {
    64     if (!accessible || !WEBKIT_IS_ACCESSIBLE(accessible))
    65         return 0;
    66 
    67     return &webkitAccessibleGetAccessibilityObject(accessible);
    68 }
    69 
    70 static AccessibilityObject* core(WebKitAccessibleHyperlink* link)
    71 {
    72     if (!link)
    73         return 0;
    74 
    75     return core(link->priv->hyperlinkImpl);
    76 }
    77 
    78 static AccessibilityObject* core(AtkHyperlink* link)
    79 {
    80     if (!WEBKIT_IS_ACCESSIBLE_HYPERLINK(link))
    81         return 0;
    82 
    83     return core(WEBKIT_ACCESSIBLE_HYPERLINK(link));
    84 }
    85 
    86 static AccessibilityObject* core(AtkAction* action)
    87 {
    88     return core(WEBKIT_ACCESSIBLE_HYPERLINK(action));
    89 }
    90 
    91 
    92 static gboolean webkitAccessibleHyperlinkActionDoAction(AtkAction* action, gint index)
    93 {
    94     g_return_val_if_fail(WEBKIT_IS_ACCESSIBLE_HYPERLINK(action), FALSE);
    95     g_return_val_if_fail(WEBKIT_ACCESSIBLE_HYPERLINK(action)->priv->hyperlinkImpl, FALSE);
    96     g_return_val_if_fail(!index, FALSE);
    97     returnValIfWebKitAccessibleIsInvalid(WEBKIT_ACCESSIBLE_HYPERLINK(action)->priv->hyperlinkImpl, FALSE);
    98 
    99     if (!ATK_IS_ACTION(WEBKIT_ACCESSIBLE_HYPERLINK(action)->priv->hyperlinkImpl))
     62static gboolean webkitAccessibleHyperlinkActionDoAction(AtkAction* action, gint)
     63{
     64    auto* accessibleHyperlink = WEBKIT_ACCESSIBLE_HYPERLINK(action);
     65    returnValIfWebKitAccessibleIsInvalid(accessibleHyperlink->priv->hyperlinkImpl, FALSE);
     66
     67    if (!ATK_IS_ACTION(accessibleHyperlink->priv->hyperlinkImpl))
    10068        return FALSE;
    10169
    102     AccessibilityObject* coreObject = core(action);
    103     if (!coreObject)
    104         return FALSE;
    105 
    106     return coreObject->performDefaultAction();
     70    auto& coreObject = webkitAccessibleGetAccessibilityObject(accessibleHyperlink->priv->hyperlinkImpl);
     71    return coreObject.performDefaultAction();
    10772}
    10873
    10974static gint webkitAccessibleHyperlinkActionGetNActions(AtkAction* action)
    11075{
    111     g_return_val_if_fail(WEBKIT_IS_ACCESSIBLE_HYPERLINK(action), 0);
    112     g_return_val_if_fail(WEBKIT_ACCESSIBLE_HYPERLINK(action)->priv->hyperlinkImpl, 0);
    113     returnValIfWebKitAccessibleIsInvalid(WEBKIT_ACCESSIBLE_HYPERLINK(action)->priv->hyperlinkImpl, 0);
    114 
    115     if (!ATK_IS_ACTION(WEBKIT_ACCESSIBLE_HYPERLINK(action)->priv->hyperlinkImpl))
    116         return 0;
    117 
    118     return 1;
    119 }
    120 
    121 static const gchar* webkitAccessibleHyperlinkActionGetDescription(AtkAction* action, gint index)
    122 {
    123     g_return_val_if_fail(WEBKIT_IS_ACCESSIBLE_HYPERLINK(action), 0);
    124     g_return_val_if_fail(WEBKIT_ACCESSIBLE_HYPERLINK(action)->priv->hyperlinkImpl, 0);
    125     g_return_val_if_fail(!index, 0);
    126     returnValIfWebKitAccessibleIsInvalid(WEBKIT_ACCESSIBLE_HYPERLINK(action)->priv->hyperlinkImpl, 0);
     76    auto* accessibleHyperlink = WEBKIT_ACCESSIBLE_HYPERLINK(action);
     77    returnValIfWebKitAccessibleIsInvalid(accessibleHyperlink->priv->hyperlinkImpl, 0);
     78
     79    return ATK_IS_ACTION(accessibleHyperlink->priv->hyperlinkImpl) ? 1 : 0;
     80}
     81
     82static const gchar* webkitAccessibleHyperlinkActionGetDescription(AtkAction* action, gint)
     83{
     84    auto* accessibleHyperlink = WEBKIT_ACCESSIBLE_HYPERLINK(action);
     85    returnValIfWebKitAccessibleIsInvalid(accessibleHyperlink->priv->hyperlinkImpl, nullptr);
    12786
    12887    // TODO: Need a way to provide/localize action descriptions.
     
    13190}
    13291
    133 static const gchar* webkitAccessibleHyperlinkActionGetKeybinding(AtkAction* action, gint index)
    134 {
    135     g_return_val_if_fail(WEBKIT_IS_ACCESSIBLE_HYPERLINK(action), 0);
    136     g_return_val_if_fail(WEBKIT_ACCESSIBLE_HYPERLINK(action)->priv->hyperlinkImpl, 0);
    137     g_return_val_if_fail(!index, 0);
    138 
    139     WebKitAccessibleHyperlinkPrivate* priv = WEBKIT_ACCESSIBLE_HYPERLINK(action)->priv;
    140     returnValIfWebKitAccessibleIsInvalid(priv->hyperlinkImpl, 0);
    141 
    142     if (!ATK_IS_ACTION(priv->hyperlinkImpl))
    143         return 0;
    144 
    145     AccessibilityObject* coreObject = core(action);
    146     if (!coreObject)
    147         return 0;
    148 
    149     priv->actionKeyBinding = coreObject->accessKey().string().utf8();
    150     return priv->actionKeyBinding.data();
    151 }
    152 
    153 static const gchar* webkitAccessibleHyperlinkActionGetName(AtkAction* action, gint index)
    154 {
    155     g_return_val_if_fail(WEBKIT_IS_ACCESSIBLE_HYPERLINK(action), 0);
    156     g_return_val_if_fail(WEBKIT_ACCESSIBLE_HYPERLINK(action)->priv->hyperlinkImpl, 0);
    157     g_return_val_if_fail(!index, 0);
    158 
    159     WebKitAccessibleHyperlinkPrivate* priv = WEBKIT_ACCESSIBLE_HYPERLINK(action)->priv;
    160     returnValIfWebKitAccessibleIsInvalid(priv->hyperlinkImpl, 0);
    161 
    162     if (!ATK_IS_ACTION(priv->hyperlinkImpl))
    163         return 0;
    164 
    165     AccessibilityObject* coreObject = core(action);
    166     if (!coreObject)
    167         return 0;
    168 
    169     priv->actionName = coreObject->actionVerb().utf8();
    170     return priv->actionName.data();
    171 }
    172 
    173 static void atkActionInterfaceInit(AtkActionIface* iface)
     92static const gchar* webkitAccessibleHyperlinkActionGetKeybinding(AtkAction* action, gint)
     93{
     94    auto* accessibleHyperlink = WEBKIT_ACCESSIBLE_HYPERLINK(action);
     95    returnValIfWebKitAccessibleIsInvalid(accessibleHyperlink->priv->hyperlinkImpl, nullptr);
     96
     97    if (!ATK_IS_ACTION(accessibleHyperlink->priv->hyperlinkImpl))
     98        return nullptr;
     99
     100    auto& coreObject = webkitAccessibleGetAccessibilityObject(accessibleHyperlink->priv->hyperlinkImpl);
     101    accessibleHyperlink->priv->actionKeyBinding = coreObject.accessKey().string().utf8();
     102    return accessibleHyperlink->priv->actionKeyBinding.data();
     103}
     104
     105static const gchar* webkitAccessibleHyperlinkActionGetName(AtkAction* action, gint)
     106{
     107    auto* accessibleHyperlink = WEBKIT_ACCESSIBLE_HYPERLINK(action);
     108    returnValIfWebKitAccessibleIsInvalid(accessibleHyperlink->priv->hyperlinkImpl, nullptr);
     109
     110    if (!ATK_IS_ACTION(accessibleHyperlink->priv->hyperlinkImpl))
     111        return nullptr;
     112
     113    auto& coreObject = webkitAccessibleGetAccessibilityObject(accessibleHyperlink->priv->hyperlinkImpl);
     114    accessibleHyperlink->priv->actionName = coreObject.actionVerb().utf8();
     115    return accessibleHyperlink->priv->actionName.data();
     116}
     117
     118static void webkit_accessible_hyperlink_atk_action_interface_init(AtkActionIface* iface)
    174119{
    175120    iface->do_action = webkitAccessibleHyperlinkActionDoAction;
     
    182127static gchar* webkitAccessibleHyperlinkGetURI(AtkHyperlink* link, gint index)
    183128{
    184     g_return_val_if_fail(WEBKIT_IS_ACCESSIBLE_HYPERLINK(link), 0);
    185     g_return_val_if_fail(WEBKIT_ACCESSIBLE_HYPERLINK(link)->priv->hyperlinkImpl, 0);
    186 
    187129    // FIXME: Do NOT support more than one instance of an AtkObject
    188130    // implementing AtkHyperlinkImpl in every instance of AtkHyperLink
    189     g_return_val_if_fail(!index, 0);
    190 
    191     returnValIfWebKitAccessibleIsInvalid(WEBKIT_ACCESSIBLE_HYPERLINK(link)->priv->hyperlinkImpl, 0);
    192 
    193     AccessibilityObject* coreObject = core(link);
    194     if (!coreObject || coreObject->url().isNull())
    195         return 0;
    196 
    197     return g_strdup(coreObject->url().string().utf8().data());
     131    if (index)
     132        return nullptr;
     133
     134    auto* accessibleHyperlink = WEBKIT_ACCESSIBLE_HYPERLINK(link);
     135    returnValIfWebKitAccessibleIsInvalid(accessibleHyperlink->priv->hyperlinkImpl, nullptr);
     136
     137    auto& coreObject = webkitAccessibleGetAccessibilityObject(accessibleHyperlink->priv->hyperlinkImpl);
     138    return !coreObject.url().isNull() ? g_strdup(coreObject.url().string().utf8().data()) : nullptr;
    198139}
    199140
    200141static AtkObject* webkitAccessibleHyperlinkGetObject(AtkHyperlink* link, gint index)
    201142{
    202     g_return_val_if_fail(WEBKIT_IS_ACCESSIBLE_HYPERLINK(link), 0);
    203     g_return_val_if_fail(WEBKIT_ACCESSIBLE_HYPERLINK(link)->priv->hyperlinkImpl, 0);
    204 
    205143    // FIXME: Do NOT support more than one instance of an AtkObject
    206144    // implementing AtkHyperlinkImpl in every instance of AtkHyperLink
    207     g_return_val_if_fail(!index, 0);
    208 
    209     returnValIfWebKitAccessibleIsInvalid(WEBKIT_ACCESSIBLE_HYPERLINK(link)->priv->hyperlinkImpl, 0);
    210 
    211     return ATK_OBJECT(WEBKIT_ACCESSIBLE_HYPERLINK(link)->priv->hyperlinkImpl);
    212 }
    213 
    214 static gint getRangeLengthForObject(AccessibilityObject* obj, Range* range)
     145    if (index)
     146        return nullptr;
     147
     148    auto* accessibleHyperlink = WEBKIT_ACCESSIBLE_HYPERLINK(link);
     149    returnValIfWebKitAccessibleIsInvalid(accessibleHyperlink->priv->hyperlinkImpl, 0);
     150
     151    return ATK_OBJECT(accessibleHyperlink->priv->hyperlinkImpl);
     152}
     153
     154static gint rangeLengthForObject(AccessibilityObject& obj, Range* range)
    215155{
    216156    // This is going to be the actual length in most of the cases
     
    219159    // Check whether the current hyperlink belongs to a list item.
    220160    // If so, we need to consider the length of the item's marker
    221     AccessibilityObject* parent = obj->parentObjectUnignored();
     161    AccessibilityObject* parent = obj.parentObjectUnignored();
    222162    if (!parent || !parent->isAccessibilityRenderObject() || !parent->isListItem())
    223163        return baseLength;
     
    241181static gint webkitAccessibleHyperlinkGetStartIndex(AtkHyperlink* link)
    242182{
    243     g_return_val_if_fail(WEBKIT_IS_ACCESSIBLE_HYPERLINK(link), 0);
    244     g_return_val_if_fail(WEBKIT_ACCESSIBLE_HYPERLINK(link)->priv->hyperlinkImpl, 0);
    245     returnValIfWebKitAccessibleIsInvalid(WEBKIT_ACCESSIBLE_HYPERLINK(link)->priv->hyperlinkImpl, 0);
    246 
    247     AccessibilityObject* coreObject = core(link);
    248     if (!coreObject)
    249         return 0;
    250 
    251     AccessibilityObject* parentUnignored = coreObject->parentObjectUnignored();
     183    auto* accessibleHyperlink = WEBKIT_ACCESSIBLE_HYPERLINK(link);
     184    returnValIfWebKitAccessibleIsInvalid(accessibleHyperlink->priv->hyperlinkImpl, 0);
     185
     186    auto& coreObject = webkitAccessibleGetAccessibilityObject(accessibleHyperlink->priv->hyperlinkImpl);
     187    AccessibilityObject* parentUnignored = coreObject.parentObjectUnignored();
    252188    if (!parentUnignored)
    253189        return 0;
    254190
    255     Node* node = coreObject->node();
     191    Node* node = coreObject.node();
    256192    if (!node)
    257193        return 0;
     
    262198
    263199    auto range = Range::create(node->document(), firstPositionInOrBeforeNode(parentNode), firstPositionInOrBeforeNode(node));
    264     return getRangeLengthForObject(coreObject, range.ptr());
     200    return rangeLengthForObject(coreObject, range.ptr());
    265201}
    266202
    267203static gint webkitAccessibleHyperlinkGetEndIndex(AtkHyperlink* link)
    268204{
    269     g_return_val_if_fail(WEBKIT_IS_ACCESSIBLE_HYPERLINK(link), 0);
    270     g_return_val_if_fail(WEBKIT_ACCESSIBLE_HYPERLINK(link)->priv->hyperlinkImpl, 0);
    271     returnValIfWebKitAccessibleIsInvalid(WEBKIT_ACCESSIBLE_HYPERLINK(link)->priv->hyperlinkImpl, 0);
    272 
    273     AccessibilityObject* coreObject = core(link);
    274     if (!coreObject)
    275         return 0;
    276 
    277     AccessibilityObject* parentUnignored = coreObject->parentObjectUnignored();
     205    auto* accessibleHyperlink = WEBKIT_ACCESSIBLE_HYPERLINK(link);
     206    returnValIfWebKitAccessibleIsInvalid(accessibleHyperlink->priv->hyperlinkImpl, 0);
     207
     208    auto& coreObject = webkitAccessibleGetAccessibilityObject(accessibleHyperlink->priv->hyperlinkImpl);
     209    AccessibilityObject* parentUnignored = coreObject.parentObjectUnignored();
    278210    if (!parentUnignored)
    279211        return 0;
    280212
    281     Node* node = coreObject->node();
     213    Node* node = coreObject.node();
    282214    if (!node)
    283215        return 0;
     
    288220
    289221    auto range = Range::create(node->document(), firstPositionInOrBeforeNode(parentNode), lastPositionInOrAfterNode(node));
    290     return getRangeLengthForObject(coreObject, range.ptr());
     222    return rangeLengthForObject(coreObject, range.ptr());
    291223}
    292224
    293225static gboolean webkitAccessibleHyperlinkIsValid(AtkHyperlink* link)
    294226{
    295     g_return_val_if_fail(WEBKIT_IS_ACCESSIBLE_HYPERLINK(link), FALSE);
    296     g_return_val_if_fail(WEBKIT_ACCESSIBLE_HYPERLINK(link)->priv->hyperlinkImpl, FALSE);
    297     returnValIfWebKitAccessibleIsInvalid(WEBKIT_ACCESSIBLE_HYPERLINK(link)->priv->hyperlinkImpl, FALSE);
     227    auto* accessibleHyperlink = WEBKIT_ACCESSIBLE_HYPERLINK(link);
     228    returnValIfWebKitAccessibleIsInvalid(accessibleHyperlink->priv->hyperlinkImpl, FALSE);
    298229
    299230    // Link is valid for the whole object's lifetime
     
    305236    // FIXME Do NOT support more than one instance of an AtkObject
    306237    // implementing AtkHyperlinkImpl in every instance of AtkHyperLink
    307     g_return_val_if_fail(WEBKIT_IS_ACCESSIBLE_HYPERLINK(link), 0);
    308     g_return_val_if_fail(WEBKIT_ACCESSIBLE_HYPERLINK(link)->priv->hyperlinkImpl, 0);
    309     returnValIfWebKitAccessibleIsInvalid(WEBKIT_ACCESSIBLE_HYPERLINK(link)->priv->hyperlinkImpl, 0);
     238    auto* accessibleHyperlink = WEBKIT_ACCESSIBLE_HYPERLINK(link);
     239    returnValIfWebKitAccessibleIsInvalid(accessibleHyperlink->priv->hyperlinkImpl, 0);
    310240
    311241    return 1;
     
    314244static gboolean webkitAccessibleHyperlinkIsSelectedLink(AtkHyperlink* link)
    315245{
    316     g_return_val_if_fail(WEBKIT_IS_ACCESSIBLE_HYPERLINK(link), FALSE);
    317     g_return_val_if_fail(WEBKIT_ACCESSIBLE_HYPERLINK(link)->priv->hyperlinkImpl, FALSE);
    318     returnValIfWebKitAccessibleIsInvalid(WEBKIT_ACCESSIBLE_HYPERLINK(link)->priv->hyperlinkImpl, FALSE);
     246    auto* accessibleHyperlink = WEBKIT_ACCESSIBLE_HYPERLINK(link);
     247    returnValIfWebKitAccessibleIsInvalid(accessibleHyperlink->priv->hyperlinkImpl, FALSE);
    319248
    320249    // Not implemented: this function is deprecated in ATK now
     
    325254static void webkitAccessibleHyperlinkGetProperty(GObject* object, guint propId, GValue* value, GParamSpec* pspec)
    326255{
     256    auto* accessibleHyperlink = WEBKIT_ACCESSIBLE_HYPERLINK(object);
     257
    327258    switch (propId) {
    328259    case PROP_HYPERLINK_IMPL:
    329         g_value_set_object(value, WEBKIT_ACCESSIBLE_HYPERLINK(object)->priv->hyperlinkImpl);
     260        g_value_set_object(value, accessibleHyperlink->priv->hyperlinkImpl);
    330261        break;
    331262    default:
     
    336267static void webkitAccessibleHyperlinkSetProperty(GObject* object, guint propId, const GValue* value, GParamSpec* pspec)
    337268{
    338     WebKitAccessibleHyperlinkPrivate* priv = WEBKIT_ACCESSIBLE_HYPERLINK(object)->priv;
     269    auto* accessibleHyperlink = WEBKIT_ACCESSIBLE_HYPERLINK(object);
    339270
    340271    switch (propId) {
    341272    case PROP_HYPERLINK_IMPL:
    342         // No need to check and unref previous values of
    343         // priv->hyperlinkImpl as this is a CONSTRUCT ONLY property
    344         priv->hyperlinkImpl = WEBKIT_ACCESSIBLE(g_value_get_object(value));
    345         g_object_weak_ref(G_OBJECT(priv->hyperlinkImpl), (GWeakNotify)(GCallback)g_object_unref, object);
     273        accessibleHyperlink->priv->hyperlinkImpl = WEBKIT_ACCESSIBLE(g_value_get_object(value));
    346274        break;
    347275    default:
     
    350278}
    351279
    352 static void webkitAccessibleHyperlinkFinalize(GObject* object)
    353 {
    354     G_OBJECT_CLASS(webkitAccessibleHyperlinkParentClass)->finalize(object);
    355 }
    356 
    357 static void webkitAccessibleHyperlinkClassInit(AtkHyperlinkClass* klass)
     280static void webkit_accessible_hyperlink_class_init(WebKitAccessibleHyperlinkClass* klass)
    358281{
    359282    GObjectClass* gobjectClass = G_OBJECT_CLASS(klass);
    360 
    361     webkitAccessibleHyperlinkParentClass = g_type_class_peek_parent(klass);
    362 
    363     gobjectClass->finalize = webkitAccessibleHyperlinkFinalize;
    364283    gobjectClass->set_property = webkitAccessibleHyperlinkSetProperty;
    365284    gobjectClass->get_property = webkitAccessibleHyperlinkGetProperty;
    366285
    367     klass->get_uri = webkitAccessibleHyperlinkGetURI;
    368     klass->get_object = webkitAccessibleHyperlinkGetObject;
    369     klass->get_start_index = webkitAccessibleHyperlinkGetStartIndex;
    370     klass->get_end_index = webkitAccessibleHyperlinkGetEndIndex;
    371     klass->is_valid = webkitAccessibleHyperlinkIsValid;
    372     klass->get_n_anchors = webkitAccessibleHyperlinkGetNAnchors;
    373     klass->is_selected_link = webkitAccessibleHyperlinkIsSelectedLink;
     286    AtkHyperlinkClass* atkHyperlinkClass = ATK_HYPERLINK_CLASS(klass);
     287    atkHyperlinkClass->get_uri = webkitAccessibleHyperlinkGetURI;
     288    atkHyperlinkClass->get_object = webkitAccessibleHyperlinkGetObject;
     289    atkHyperlinkClass->get_start_index = webkitAccessibleHyperlinkGetStartIndex;
     290    atkHyperlinkClass->get_end_index = webkitAccessibleHyperlinkGetEndIndex;
     291    atkHyperlinkClass->is_valid = webkitAccessibleHyperlinkIsValid;
     292    atkHyperlinkClass->get_n_anchors = webkitAccessibleHyperlinkGetNAnchors;
     293    atkHyperlinkClass->is_selected_link = webkitAccessibleHyperlinkIsSelectedLink;
    374294
    375295    g_object_class_install_property(gobjectClass, PROP_HYPERLINK_IMPL,
     
    378298            "The associated WebKitAccessible instance.",
    379299            WEBKIT_TYPE_ACCESSIBLE,
    380             (GParamFlags)(G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS)));
    381 
    382     g_type_class_add_private(gobjectClass, sizeof(WebKitAccessibleHyperlinkPrivate));
    383 }
    384 
    385 static void webkitAccessibleHyperlinkInit(AtkHyperlink* link)
    386 {
    387     WEBKIT_ACCESSIBLE_HYPERLINK(link)->priv = WEBKIT_ACCESSIBLE_HYPERLINK_GET_PRIVATE(link);
    388     WEBKIT_ACCESSIBLE_HYPERLINK(link)->priv->hyperlinkImpl = nullptr;
    389 }
    390 
    391 GType webkitAccessibleHyperlinkGetType()
    392 {
    393     static volatile gsize typeVolatile = 0;
    394 
    395     if (g_once_init_enter(&typeVolatile)) {
    396         static const GTypeInfo tinfo = {
    397             sizeof(WebKitAccessibleHyperlinkClass),
    398             (GBaseInitFunc) 0,
    399             (GBaseFinalizeFunc) 0,
    400             (GClassInitFunc)(GCallback) webkitAccessibleHyperlinkClassInit,
    401             (GClassFinalizeFunc) 0,
    402             0, /* class data */
    403             sizeof(WebKitAccessibleHyperlink), /* instance size */
    404             0, /* nb preallocs */
    405             (GInstanceInitFunc)(GCallback) webkitAccessibleHyperlinkInit,
    406             0 /* value table */
    407         };
    408 
    409         static const GInterfaceInfo actionInfo = {
    410             (GInterfaceInitFunc)(GCallback)atkActionInterfaceInit,
    411             (GInterfaceFinalizeFunc) 0, 0
    412         };
    413 
    414         GType type = g_type_register_static(ATK_TYPE_HYPERLINK, "WebKitAccessibleHyperlink", &tinfo, GTypeFlags(0));
    415         g_type_add_interface_static(type, ATK_TYPE_ACTION, &actionInfo);
    416 
    417         g_once_init_leave(&typeVolatile, type);
    418     }
    419 
    420     return typeVolatile;
    421 }
    422 
    423 WebKitAccessibleHyperlink* webkitAccessibleHyperlinkNew(AtkHyperlinkImpl* hyperlinkImpl)
    424 {
    425     g_return_val_if_fail(ATK_IS_HYPERLINK_IMPL(hyperlinkImpl), 0);
    426     return WEBKIT_ACCESSIBLE_HYPERLINK(g_object_new(WEBKIT_TYPE_ACCESSIBLE_HYPERLINK, "hyperlink-impl", hyperlinkImpl, 0));
    427 }
    428 
    429 WebCore::AccessibilityObject* webkitAccessibleHyperlinkGetAccessibilityObject(WebKitAccessibleHyperlink* link)
    430 {
    431     g_return_val_if_fail(WEBKIT_IS_ACCESSIBLE_HYPERLINK(link), 0);
    432     return core(link);
     300            static_cast<GParamFlags>(WEBKIT_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)));
     301}
     302
     303WebKitAccessibleHyperlink* webkitAccessibleHyperlinkGetOrCreate(AtkHyperlinkImpl* hyperlinkImpl)
     304{
     305    g_return_val_if_fail(ATK_IS_HYPERLINK_IMPL(hyperlinkImpl), nullptr);
     306    g_return_val_if_fail(WEBKIT_IS_ACCESSIBLE(hyperlinkImpl), nullptr);
     307
     308    if (auto* currentHyperLink = g_object_get_data(G_OBJECT(hyperlinkImpl), "webkit-accessible-hyperlink-object"))
     309        return WEBKIT_ACCESSIBLE_HYPERLINK(g_object_ref(currentHyperLink));
     310
     311    auto* hyperlink = WEBKIT_ACCESSIBLE_HYPERLINK(g_object_new(WEBKIT_TYPE_ACCESSIBLE_HYPERLINK, "hyperlink-impl", hyperlinkImpl, nullptr));
     312    g_object_set_data_full(G_OBJECT(hyperlinkImpl), "webkit-accessible-hyperlink-object", hyperlink, g_object_unref);
     313    return hyperlink;
    433314}
    434315
  • trunk/Source/WebCore/accessibility/atk/WebKitAccessibleHyperlink.h

    r208179 r244072  
    2424#include <atk/atk.h>
    2525
    26 namespace WebCore {
    27 class AccessibilityObject;
    28 }
    29 
    3026G_BEGIN_DECLS
    3127
    32 #define WEBKIT_TYPE_ACCESSIBLE_HYPERLINK                  (webkitAccessibleHyperlinkGetType ())
    33 #define WEBKIT_ACCESSIBLE_HYPERLINK(obj)                  (G_TYPE_CHECK_INSTANCE_CAST ((obj), WEBKIT_TYPE_ACCESSIBLE_HYPERLINK, WebKitAccessibleHyperlink))
    34 #define WEBKIT_ACCESSIBLE_HYPERLINK_CLASS(klass)          (G_TYPE_CHECK_CLASS_CAST ((klass), WEBKIT_TYPE_ACCESSIBLE_HYPERLINK, WebKitAccessibleHyperlinkClass))
    35 #define WEBKIT_IS_ACCESSIBLE_HYPERLINK(obj)               (G_TYPE_CHECK_INSTANCE_TYPE ((obj), WEBKIT_TYPE_ACCESSIBLE_HYPERLINK))
    36 #define WEBKIT_IS_ACCESSIBLE_HYPERLINK_CLASS(klass)       (G_TYPE_CHECK_CLASS_TYPE ((klass), WEBKIT_TYPE_ACCESSIBLE_HYPERLINK))
    37 #define WEBKIT_ACCESSIBLE_HYPERLINK_GET_CLASS(obj)        (G_TYPE_INSTANCE_GET_CLASS ((obj), WEBKIT_TYPE_ACCESSIBLE_HYPERLINK, WebKitAccessibleHyperlinkClass))
     28#define WEBKIT_TYPE_ACCESSIBLE_HYPERLINK             (webkit_accessible_hyperlink_get_type())
     29#define WEBKIT_ACCESSIBLE_HYPERLINK(obj)             (G_TYPE_CHECK_INSTANCE_CAST((obj), WEBKIT_TYPE_ACCESSIBLE_HYPERLINK, WebKitAccessibleHyperlink))
     30#define WEBKIT_ACCESSIBLE_HYPERLINK_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST((klass), WEBKIT_TYPE_ACCESSIBLE_HYPERLINK, WebKitAccessibleHyperlinkClass))
     31#define WEBKIT_IS_ACCESSIBLE_HYPERLINK(obj)          (G_TYPE_CHECK_INSTANCE_TYPE((obj), WEBKIT_TYPE_ACCESSIBLE_HYPERLINK))
     32#define WEBKIT_IS_ACCESSIBLE_HYPERLINK_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE((klass), WEBKIT_TYPE_ACCESSIBLE_HYPERLINK))
     33#define WEBKIT_ACCESSIBLE_HYPERLINK_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS((obj), WEBKIT_TYPE_ACCESSIBLE_HYPERLINK, WebKitAccessibleHyperlinkClass))
    3834
    39 typedef struct _WebKitAccessibleHyperlink                WebKitAccessibleHyperlink;
    40 typedef struct _WebKitAccessibleHyperlinkClass           WebKitAccessibleHyperlinkClass;
    41 typedef struct _WebKitAccessibleHyperlinkPrivate         WebKitAccessibleHyperlinkPrivate;
     35typedef struct _WebKitAccessibleHyperlink        WebKitAccessibleHyperlink;
     36typedef struct _WebKitAccessibleHyperlinkClass   WebKitAccessibleHyperlinkClass;
     37typedef struct _WebKitAccessibleHyperlinkPrivate WebKitAccessibleHyperlinkPrivate;
    4238
    4339struct _WebKitAccessibleHyperlink {
    4440    AtkHyperlink parent;
    4541
    46     // private
    4742    WebKitAccessibleHyperlinkPrivate *priv;
    4843};
     
    5247};
    5348
    54 GType webkitAccessibleHyperlinkGetType(void) G_GNUC_CONST;
     49GType webkit_accessible_hyperlink_get_type(void);
    5550
    56 WebKitAccessibleHyperlink* webkitAccessibleHyperlinkNew(AtkHyperlinkImpl*);
    57 
    58 WebCore::AccessibilityObject* webkitAccessibleHyperlinkGetAccessibilityObject(WebKitAccessibleHyperlink*);
     51WebKitAccessibleHyperlink* webkitAccessibleHyperlinkGetOrCreate(AtkHyperlinkImpl*);
    5952
    6053G_END_DECLS
  • trunk/Source/WebCore/accessibility/atk/WebKitAccessibleInterfaceHyperlinkImpl.cpp

    r139159 r244072  
    2525#include "WebKitAccessibleHyperlink.h"
    2626
    27 using namespace WebCore;
    28 
    29 static GQuark hyperlinkObjectQuark = 0;
    30 
    3127static AtkHyperlink* webkitAccessibleHyperlinkImplGetHyperlink(AtkHyperlinkImpl* hyperlink)
    3228{
    33     AtkHyperlink* hyperlinkObject = ATK_HYPERLINK(g_object_get_qdata(G_OBJECT(hyperlink), hyperlinkObjectQuark));
    34     if (!hyperlinkObject) {
    35         hyperlinkObject = ATK_HYPERLINK(webkitAccessibleHyperlinkNew(hyperlink));
    36         g_object_set_qdata(G_OBJECT(hyperlink), hyperlinkObjectQuark, hyperlinkObject);
    37     }
    38     return hyperlinkObject;
     29    return ATK_HYPERLINK(webkitAccessibleHyperlinkGetOrCreate(hyperlink));
    3930}
    4031
     
    4233{
    4334    iface->get_hyperlink = webkitAccessibleHyperlinkImplGetHyperlink;
    44     hyperlinkObjectQuark = g_quark_from_static_string("webkit-accessible-hyperlink-object");
    4535}
    4636
    47 #endif
     37#endif // HAVE(ACCESSIBILITY)
Note: See TracChangeset for help on using the changeset viewer.