mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-24 05:11:16 +00:00
f8b9470054
Per the HTML-AAM spec, a and area elements without href attributes should have generic roles. This revision implements this preference by creating hypertext accessibles when said elements lack href attributes (or click listeners). A byproduct of this change is recognizing that a elements have no intrinsic role mapping; they could be generics or links. This revision handles situations where href or click listeners might appear or dissapear, and recreates the accessibles when necessary. Since image map areas are handled by their containing image maps, this revision specializes HTMLAreaAccessible::NativeRole to account for the discrepancy that we can't account for in the markup map. This revision also changes the relevant WPT test expectations, updates existing tests that this change affects, and adds tests to verify that changing href and click listeners dynamically changes the role appropriately. Differential Revision: https://phabricator.services.mozilla.com/D183550
83 lines
2.3 KiB
C++
83 lines
2.3 KiB
C++
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
#ifndef mozilla_a11y_HTMLImageMapAccessible_h__
|
|
#define mozilla_a11y_HTMLImageMapAccessible_h__
|
|
|
|
#include "HTMLLinkAccessible.h"
|
|
#include "ImageAccessible.h"
|
|
|
|
namespace mozilla {
|
|
namespace a11y {
|
|
|
|
/**
|
|
* Used for HTML image maps.
|
|
*/
|
|
class HTMLImageMapAccessible final : public ImageAccessible {
|
|
public:
|
|
HTMLImageMapAccessible(nsIContent* aContent, DocAccessible* aDoc);
|
|
|
|
// nsISupports and cycle collector
|
|
NS_INLINE_DECL_REFCOUNTING_INHERITED(HTMLImageMapAccessible, ImageAccessible)
|
|
|
|
// LocalAccessible
|
|
virtual a11y::role NativeRole() const override;
|
|
|
|
/**
|
|
* Update area children of the image map.
|
|
*/
|
|
void UpdateChildAreas(bool aDoFireEvents = true);
|
|
|
|
/**
|
|
* Return accessible of child node.
|
|
*/
|
|
LocalAccessible* GetChildAccessibleFor(const nsINode* aNode) const;
|
|
|
|
protected:
|
|
virtual ~HTMLImageMapAccessible() {}
|
|
};
|
|
|
|
/**
|
|
* Accessible for image map areas - must be child of image.
|
|
*/
|
|
class HTMLAreaAccessible final : public HTMLLinkAccessible {
|
|
public:
|
|
HTMLAreaAccessible(nsIContent* aContent, DocAccessible* aDoc);
|
|
|
|
// LocalAccessible
|
|
virtual void Description(nsString& aDescription) const override;
|
|
virtual LocalAccessible* LocalChildAtPoint(
|
|
int32_t aX, int32_t aY, EWhichChildAtPoint aWhichChild) override;
|
|
virtual nsRect RelativeBounds(nsIFrame** aBoundingFrame) const override;
|
|
virtual nsRect ParentRelativeBounds() override;
|
|
|
|
// HyperLinkAccessible
|
|
virtual uint32_t StartOffset() override;
|
|
virtual uint32_t EndOffset() override;
|
|
|
|
virtual bool IsAcceptableChild(nsIContent* aEl) const override {
|
|
return false;
|
|
}
|
|
|
|
// LocalAccessible
|
|
virtual role NativeRole() const override;
|
|
|
|
protected:
|
|
// LocalAccessible
|
|
virtual ENameValueFlag NativeName(nsString& aName) const override;
|
|
};
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
// LocalAccessible downcasting method
|
|
|
|
inline HTMLImageMapAccessible* LocalAccessible::AsImageMap() {
|
|
return IsImageMap() ? static_cast<HTMLImageMapAccessible*>(this) : nullptr;
|
|
}
|
|
|
|
} // namespace a11y
|
|
} // namespace mozilla
|
|
|
|
#endif
|