Commit fa43fbd0 authored by Nektarios Paisios's avatar Nektarios Paisios Committed by Commit Bot

Addss three parameterized attributes that will be used in dump tree tests

Similar to what Safari exposes, we expose three new parameterized
attributes on Mac, which will be used for dumping
text markers, text marker ranges and their anchor nodes.

A followup patch will wire these attributes through to
dump tree tests as follows:

The @MAC-ALLOW directive will be extended to take parameterized attributes
and an argument for each one. For example, if we want to dump
the current selection, we could write:

@MAC-ALLOW:AXTextMarkerRangeDebugDescription(AXSelectedTextMarkerRange)

R=dmazzoni@chromium.org

Change-Id: Ife020ad4ebc5d7d0002126a53d7d150555d31d20
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1857049
Commit-Queue: Nektarios Paisios <nektar@chromium.org>
Reviewed-by: default avatarDominic Mazzoni <dmazzoni@chromium.org>
Cr-Commit-Position: refs/heads/master@{#706462}
parent 18dc35b8
......@@ -34,7 +34,7 @@ namespace content {
class CONTENT_EXPORT AccessibilityTreeFormatterBase
: public AccessibilityTreeFormatter {
public:
explicit AccessibilityTreeFormatterBase();
AccessibilityTreeFormatterBase();
~AccessibilityTreeFormatterBase() override;
// AccessibilityTreeFormatter overrides.
......
......@@ -1998,6 +1998,10 @@ base::Optional<int> BrowserAccessibility::GetSetSize() const {
return node()->GetSetSize();
}
std::string BrowserAccessibility::ToString() const {
return GetData().ToString();
}
bool BrowserAccessibility::SetHypertextSelection(int start_offset,
int end_offset) {
manager()->SetSelection(
......@@ -2176,4 +2180,9 @@ bool BrowserAccessibility::HasInvalidAttribute(
}) != attributes.end();
}
std::ostream& operator<<(std::ostream& stream,
const BrowserAccessibility& object) {
return stream << object.ToString();
}
} // namespace content
......@@ -9,6 +9,7 @@
#include <map>
#include <memory>
#include <ostream>
#include <set>
#include <string>
#include <utility>
......@@ -545,6 +546,9 @@ class CONTENT_EXPORT BrowserAccessibility : public ui::AXPlatformNodeDelegate {
base::Optional<int> GetPosInSet() const override;
base::Optional<int> GetSetSize() const override;
// Returns a string representation of this object for debugging purposes.
std::string ToString() const;
protected:
// The UIA tree formatter needs access to GetUniqueId() to identify the
// starting point for tree dumps.
......@@ -642,6 +646,9 @@ class CONTENT_EXPORT BrowserAccessibility : public ui::AXPlatformNodeDelegate {
DISALLOW_COPY_AND_ASSIGN(BrowserAccessibility);
};
CONTENT_EXPORT std::ostream& operator<<(std::ostream& stream,
const BrowserAccessibility& object);
} // namespace content
#endif // CONTENT_BROWSER_ACCESSIBILITY_BROWSER_ACCESSIBILITY_H_
......@@ -207,6 +207,18 @@ NSString* const
NSString* const NSAccessibilityLengthForTextMarkerRangeParameterizedAttribute =
@"AXLengthForTextMarkerRange";
// Private attributes that can be used for testing text markers, e.g. in dump
// tree tests.
NSString* const
NSAccessibilityTextMarkerDebugDescriptionParameterizedAttribute =
@"AXTextMarkerDebugDescription";
NSString* const
NSAccessibilityTextMarkerRangeDebugDescriptionParameterizedAttribute =
@"AXTextMarkerRangeDebugDescription";
NSString* const
NSAccessibilityTextMarkerNodeDebugDescriptionParameterizedAttribute =
@"AXTextMarkerNodeDebugDescription";
// Other private attributes.
NSString* const NSAccessibilitySelectTextWithCriteriaParameterizedAttribute =
@"AXSelectTextWithCriteria";
......@@ -3026,6 +3038,32 @@ NSString* const NSAccessibilityRequiredAttributeChrome = @"AXRequired";
}
}
if ([attribute
isEqualToString:
NSAccessibilityTextMarkerDebugDescriptionParameterizedAttribute]) {
BrowserAccessibilityPositionInstance position =
CreatePositionFromTextMarker(parameter);
return base::SysUTF8ToNSString(position->ToString());
}
if ([attribute
isEqualToString:
NSAccessibilityTextMarkerRangeDebugDescriptionParameterizedAttribute]) {
AXPlatformRange range = CreateRangeFromTextMarkerRange(parameter);
return base::SysUTF8ToNSString(range.ToString());
}
if ([attribute
isEqualToString:
NSAccessibilityTextMarkerNodeDebugDescriptionParameterizedAttribute]) {
BrowserAccessibilityPositionInstance position =
CreatePositionFromTextMarker(parameter);
if (position->IsNullPosition())
return @"nil";
DCHECK(position->GetAnchor());
return base::SysUTF8ToNSString(position->GetAnchor()->ToString());
}
if ([attribute
isEqualToString:
NSAccessibilityIndexForChildUIElementParameterizedAttribute]) {
......
......@@ -6,6 +6,8 @@
#define UI_ACCESSIBILITY_AX_RANGE_H_
#include <memory>
#include <ostream>
#include <string>
#include <utility>
#include <vector>
......@@ -125,6 +127,11 @@ class AXRange {
return anchor_->IsNullPosition() || focus_->IsNullPosition();
}
std::string ToString() const {
return "Range\nAnchor:" + anchor_->ToString() +
"\nFocus:" + focus_->ToString();
}
// We can decompose any given AXRange into multiple "leaf text ranges".
// As an example, consider the following HTML code:
//
......@@ -349,6 +356,12 @@ class AXRange {
AXPositionInstance focus_;
};
template <class AXPositionType>
std::ostream& operator<<(std::ostream& stream,
const AXRange<AXPositionType>& range) {
return stream << range.ToString();
}
} // namespace ui
#endif // UI_ACCESSIBILITY_AX_RANGE_H_
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment