summaryrefslogtreecommitdiffstats
path: root/accessible/base/CacheConstants.h
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--accessible/base/CacheConstants.h255
1 files changed, 255 insertions, 0 deletions
diff --git a/accessible/base/CacheConstants.h b/accessible/base/CacheConstants.h
new file mode 100644
index 0000000000..eb5cc79f5e
--- /dev/null
+++ b/accessible/base/CacheConstants.h
@@ -0,0 +1,255 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set expandtab shiftwidth=2 tabstop=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 _CacheConstants_h_
+#define _CacheConstants_h_
+
+#include "nsGkAtoms.h"
+#include "mozilla/a11y/RelationType.h"
+
+namespace mozilla {
+namespace a11y {
+
+class CacheDomain {
+ public:
+ static constexpr uint64_t NameAndDescription = ((uint64_t)0x1) << 0;
+ static constexpr uint64_t Value = ((uint64_t)0x1) << 1;
+ static constexpr uint64_t Bounds = ((uint64_t)0x1) << 2;
+ static constexpr uint64_t Resolution = ((uint64_t)0x1) << 3;
+ static constexpr uint64_t Text = ((uint64_t)0x1) << 4;
+ static constexpr uint64_t DOMNodeIDAndClass = ((uint64_t)0x1) << 5;
+ static constexpr uint64_t State = ((uint64_t)0x1) << 6;
+ static constexpr uint64_t GroupInfo = ((uint64_t)0x1) << 7;
+ static constexpr uint64_t Actions = ((uint64_t)0x1) << 8;
+ static constexpr uint64_t Style = ((uint64_t)0x1) << 9;
+ static constexpr uint64_t TransformMatrix = ((uint64_t)0x1) << 10;
+ static constexpr uint64_t ScrollPosition = ((uint64_t)0x1) << 11;
+ static constexpr uint64_t Table = ((uint64_t)0x1) << 12;
+ static constexpr uint64_t Spelling = ((uint64_t)0x1) << 13;
+ static constexpr uint64_t Viewport = ((uint64_t)0x1) << 14;
+ static constexpr uint64_t ARIA = ((uint64_t)0x1) << 15;
+ static constexpr uint64_t Relations = ((uint64_t)0x1) << 16;
+#ifdef XP_WIN
+ // Used for MathML.
+ static constexpr uint64_t InnerHTML = ((uint64_t)0x1) << 17;
+#endif
+ static constexpr uint64_t All = ~((uint64_t)0x0);
+};
+
+enum class CacheUpdateType {
+ /*
+ * An initial cache push of a loaded document or inserted subtree.
+ */
+ Initial,
+
+ /*
+ * An incremental cache push of one or more fields that have changed.
+ */
+ Update,
+};
+
+struct RelationData {
+ nsStaticAtom* const mAtom;
+ nsStaticAtom* const mValidTag;
+ RelationType mType;
+ RelationType mReverseType;
+};
+
+/**
+ * This array of RelationData lists our relation types (explicit and reverse)
+ * and the cache attribute atoms that store their targets. Attributes may
+ * describe different kinds of relations, depending on the element they
+ * originate on. For example, an <output> element's `for` attribute describes a
+ * CONTROLLER_FOR relation, while the `for` attribute of a <label> describes a
+ * LABEL_FOR relation. To ensure we process these attributes appropriately,
+ * RelationData.mValidTag contains the atom for the tag this attribute/relation
+ * type pairing is valid on. If the pairing is valid for all tag types, this
+ * field is null.
+ */
+static constexpr RelationData kRelationTypeAtoms[] = {
+ {nsGkAtoms::aria_labelledby, nullptr, RelationType::LABELLED_BY,
+ RelationType::LABEL_FOR},
+ {nsGkAtoms::_for, nsGkAtoms::label, RelationType::LABEL_FOR,
+ RelationType::LABELLED_BY},
+ {nsGkAtoms::aria_controls, nullptr, RelationType::CONTROLLER_FOR,
+ RelationType::CONTROLLED_BY},
+ {nsGkAtoms::_for, nsGkAtoms::output, RelationType::CONTROLLED_BY,
+ RelationType::CONTROLLER_FOR},
+ {nsGkAtoms::aria_describedby, nullptr, RelationType::DESCRIBED_BY,
+ RelationType::DESCRIPTION_FOR},
+ {nsGkAtoms::aria_flowto, nullptr, RelationType::FLOWS_TO,
+ RelationType::FLOWS_FROM},
+ {nsGkAtoms::aria_details, nullptr, RelationType::DETAILS,
+ RelationType::DETAILS_FOR},
+ {nsGkAtoms::aria_errormessage, nullptr, RelationType::ERRORMSG,
+ RelationType::ERRORMSG_FOR},
+};
+
+// The count of numbers needed to serialize an nsRect. This is used when
+// flattening character rects into an array of ints.
+constexpr int32_t kNumbersInRect = 4;
+
+/**
+ * RemoteAccessible cache keys.
+ * Cache keys are nsAtoms, but this is mostly an implementation detail. Rather
+ * than creating new atoms specific to the RemoteAccessible cache, we often
+ * reuse existing atoms which are a reasonably close match for the value we're
+ * caching, though the choices aren't always clear or intuitive. For clarity, we
+ * alias the cache keys to atoms below. Code dealing with the RemoteAccessible
+ * cache should generally use these aliases rather than using nsAtoms directly.
+ * There are two exceptions:
+ * 1. Some ARIA attributes are copied directly from the DOM node, so these
+ * aren't aliased. Specifically, aria-level, aria-posinset and aria-setsize
+ * are copied as separate cache keys as part of CacheDomain::GroupInfo.
+ * 2. Keys for relations are defined in kRelationTypeAtoms above.
+ */
+class CacheKey {
+ public:
+ // uint64_t, CacheDomain::Actions
+ // As returned by Accessible::AccessKey.
+ static constexpr nsStaticAtom* AccessKey = nsGkAtoms::accesskey;
+ // int32_t, no domain
+ static constexpr nsStaticAtom* AppUnitsPerDevPixel =
+ nsGkAtoms::_moz_device_pixel_ratio;
+ // AccAttributes, CacheDomain::ARIA
+ // ARIA attributes that are exposed as object attributes; i.e. returned in
+ // Accessible::Attributes.
+ static constexpr nsStaticAtom* ARIAAttributes = nsGkAtoms::aria;
+ // nsString, CacheUpdateType::Initial
+ // The ARIA role attribute if the role is unknown or if there are multiple
+ // roles.
+ static constexpr nsStaticAtom* ARIARole = nsGkAtoms::role;
+ // bool, CacheDomain::State
+ // The aria-selected attribute.
+ static constexpr nsStaticAtom* ARIASelected = nsGkAtoms::aria_selected;
+ // nsTArray<uint64_t>, CacheDomain::Table
+ // The explicit headers of an HTML table cell.
+ static constexpr nsStaticAtom* CellHeaders = nsGkAtoms::headers;
+ // int32_t, CacheDomain::Table
+ // The colspan of an HTML table cell.
+ static constexpr nsStaticAtom* ColSpan = nsGkAtoms::colspan;
+ // nsTArray<int32_t, 2>, CacheDomain::Bounds
+ // The offset from an OuterDocAccessible (iframe) to its embedded document.
+ static constexpr nsStaticAtom* CrossDocOffset = nsGkAtoms::crossorigin;
+ // nsAtom, CacheDomain::Style
+ // CSS display; block, inline, etc.
+ static constexpr nsStaticAtom* CSSDisplay = nsGkAtoms::display;
+ // nsAtom, CacheDomain::Style
+ // CSS overflow; e.g. hidden.
+ static constexpr nsStaticAtom* CSSOverflow = nsGkAtoms::overflow;
+ // nsAtom, CacheDomain::Style
+ // CSS position; e.g. fixed.
+ static constexpr nsStaticAtom* CssPosition = nsGkAtoms::position;
+ // nsString, CacheDomain::NameAndDescription
+ static constexpr nsStaticAtom* Description = nsGkAtoms::description;
+ // nsString, CacheDomain::Relations
+ // The "name" DOM attribute.
+ static constexpr nsStaticAtom* DOMName = nsGkAtoms::attributeName;
+ // nsAtom, CacheDomain::DOMNodeIDAndClass
+ // The "class" DOM attribute.
+ static constexpr nsStaticAtom* DOMNodeClass = nsGkAtoms::_class;
+ // nsAtom, CacheDomain::DOMNodeIDAndClass
+ static constexpr nsStaticAtom* DOMNodeID = nsGkAtoms::id;
+ // AccGroupInfo, no domain
+ static constexpr nsStaticAtom* GroupInfo = nsGkAtoms::group;
+ // nsTArray<int32_t>, no domain
+ // As returned by HyperTextAccessibleBase::CachedHyperTextOffsets.
+ static constexpr nsStaticAtom* HyperTextOffsets = nsGkAtoms::offset;
+ // bool, CacheDomain::Actions
+ // Whether this image has a longdesc.
+ static constexpr nsStaticAtom* HasLongdesc = nsGkAtoms::longdesc;
+ // nsString, CacheDomain::NameAndDescription
+ static constexpr nsStaticAtom* HTMLPlaceholder = nsGkAtoms::placeholder;
+#ifdef XP_WIN
+ // nsString, CacheDomain::InnerHTML
+ static constexpr nsStaticAtom* InnerHTML = nsGkAtoms::html;
+#endif
+ // nsAtom, CacheUpdateType::Initial
+ // The type of an <input> element; tel, email, etc.
+ static constexpr nsStaticAtom* InputType = nsGkAtoms::textInputType;
+ // bool, CacheDomain::Bounds
+ // Whether the Accessible is fully clipped.
+ static constexpr nsStaticAtom* IsClipped = nsGkAtoms::clip_rule;
+ // nsString, CacheUpdateType::Initial
+ static constexpr nsStaticAtom* MimeType = nsGkAtoms::headerContentType;
+ // double, CacheDomain::Value
+ static constexpr nsStaticAtom* MaxValue = nsGkAtoms::max;
+ // double, CacheDomain::Value
+ static constexpr nsStaticAtom* MinValue = nsGkAtoms::min;
+ // nsString, CacheDomain::NameAndDescription
+ static constexpr nsStaticAtom* Name = nsGkAtoms::name;
+ // ENameValueFlag, CacheDomain::NameAndDescription
+ // Returned by Accessible::Name.
+ static constexpr nsStaticAtom* NameValueFlag = nsGkAtoms::explicit_name;
+ // double, CacheDomain::Value
+ // The numeric value returned by Accessible::CurValue.
+ static constexpr nsStaticAtom* NumericValue = nsGkAtoms::value;
+ // float, CacheDomain::Style
+ static constexpr nsStaticAtom* Opacity = nsGkAtoms::opacity;
+ // nsTArray<int32_t, 4>, CacheDomain::Bounds
+ // The screen bounds relative to the parent Accessible
+ // as returned by LocalAccessible::ParentRelativeBounds.
+ static constexpr nsStaticAtom* ParentRelativeBounds =
+ nsGkAtoms::relativeBounds;
+ // nsAtom, CacheUpdateType::Initial
+ // The type of a popup (used for HTML popover).
+ static constexpr nsStaticAtom* PopupType = nsGkAtoms::ispopup;
+ // nsAtom, CacheDomain::Actions
+ static constexpr nsStaticAtom* PrimaryAction = nsGkAtoms::action;
+ // float, no domain
+ // Document resolution.
+ static constexpr nsStaticAtom* Resolution = nsGkAtoms::resolution;
+ // int32_t, CacheDomain::Table
+ // The rowspan of an HTML table cell.
+ static constexpr nsStaticAtom* RowSpan = nsGkAtoms::rowspan;
+ // nsTArray<int32_t, 2>, CacheDomain::ScrollPosition
+ static constexpr nsStaticAtom* ScrollPosition = nsGkAtoms::scrollPosition;
+ // nsTArray<int32_t>, CacheDomain::Spelling | CacheDomain::Text
+ // The offsets of spelling errors.
+ static constexpr nsStaticAtom* SpellingErrors = nsGkAtoms::spelling;
+ // nsString, CacheDomain::Value
+ // The src URL of images.
+ static constexpr nsStaticAtom* SrcURL = nsGkAtoms::src;
+ // uint64_t, CacheDomain::State
+ // As returned by Accessible::State.
+ static constexpr nsStaticAtom* State = nsGkAtoms::state;
+ // double, CacheDomain::Value
+ // The value step returned by Accessible::Step.
+ static constexpr nsStaticAtom* Step = nsGkAtoms::step;
+ // nsAtom, CacheUpdateType::Initial
+ // The tag name of the element.
+ static constexpr nsStaticAtom* TagName = nsGkAtoms::tag;
+ // bool, CacheDomain::Table
+ // Whether this is a layout table.
+ static constexpr nsStaticAtom* TableLayoutGuess = nsGkAtoms::layout_guess;
+ // nsString, CacheDomain::Text
+ // The text of TextLeafAccessibles.
+ static constexpr nsStaticAtom* Text = nsGkAtoms::text;
+ // AccAttributes, CacheDomain::Text
+ // Text attributes; font, etc.
+ static constexpr nsStaticAtom* TextAttributes = nsGkAtoms::style;
+ // nsTArray<int32_t, 4 * n>, CacheDomain::Text | CacheDomain::Bounds
+ // The bounds of each character in a text leaf.
+ static constexpr nsStaticAtom* TextBounds = nsGkAtoms::characterData;
+ // nsTArray<int32_t>, CacheDomain::Text | CacheDomain::Bounds
+ // The text offsets where new lines start.
+ static constexpr nsStaticAtom* TextLineStarts = nsGkAtoms::line;
+ // nsString, CacheDomain::Value
+ // The textual value returned by Accessible::Value (as opposed to
+ // the numeric value returned by Accessible::CurValue).
+ static constexpr nsStaticAtom* TextValue = nsGkAtoms::aria_valuetext;
+ // gfx::Matrix4x4, CacheDomain::TransformMatrix
+ static constexpr nsStaticAtom* TransformMatrix = nsGkAtoms::transform;
+ // nsTArray<uint64_t>, CacheDomain::Viewport
+ // The list of Accessibles in the viewport used for hit testing and on-screen
+ // determination.
+ static constexpr nsStaticAtom* Viewport = nsGkAtoms::viewport;
+};
+
+} // namespace a11y
+} // namespace mozilla
+
+#endif