Skip to content

Commit

Permalink
Have ATK scrolling APIs scroll even when the node is already visible
Browse files Browse the repository at this point in the history
Previously, when a node was already visible, ATK scrolling APIs would
not trigger a scroll. This change modifies the platform interface to
include an argument determining the behavior when the node is visible.
It is used to modify the behavior of the ATK API implementation.

Bug: 1022075
Change-Id: I31a70c4bb0086910768c439337f39d070933d6af
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1911781
Reviewed-by: dsinclair <dsinclair@chromium.org>
Reviewed-by: Dominic Mazzoni <dmazzoni@chromium.org>
Reviewed-by: Kinuko Yasuda <kinuko@chromium.org>
Commit-Queue: Martin Robinson <mrobinson@igalia.com>
Cr-Commit-Position: refs/heads/master@{#718093}
  • Loading branch information
mrobinson authored and Commit Bot committed Nov 22, 2019
1 parent bafeeee commit cf67a9c
Show file tree
Hide file tree
Showing 28 changed files with 101 additions and 58 deletions.
12 changes: 8 additions & 4 deletions components/pdf/renderer/pdf_accessibility_tree_browsertest.cc
Original file line number Diff line number Diff line change
Expand Up @@ -746,7 +746,8 @@ TEST_F(PdfAccessibilityTreeTest, TestActionDataConversion) {
EXPECT_EQ(ui::AXActionTarget::Type::kPdf, pdf_action_target->GetType());
EXPECT_TRUE(pdf_action_target->ScrollToMakeVisibleWithSubFocus(
gfx::Rect(0, 0, 50, 50), ax::mojom::ScrollAlignment::kScrollAlignmentLeft,
ax::mojom::ScrollAlignment::kScrollAlignmentTop));
ax::mojom::ScrollAlignment::kScrollAlignmentTop,
ax::mojom::ScrollBehavior::kDoNotScrollIfVisible));
PP_PdfAccessibilityActionData action_data =
fake_pepper_instance.GetReceivedActionData();
EXPECT_EQ(PP_PdfAccessibilityAction::PP_PDF_SCROLL_TO_MAKE_VISIBLE,
Expand All @@ -759,23 +760,26 @@ TEST_F(PdfAccessibilityTreeTest, TestActionDataConversion) {
EXPECT_TRUE(pdf_action_target->ScrollToMakeVisibleWithSubFocus(
gfx::Rect(0, 0, 50, 50),
ax::mojom::ScrollAlignment::kScrollAlignmentRight,
ax::mojom::ScrollAlignment::kScrollAlignmentTop));
ax::mojom::ScrollAlignment::kScrollAlignmentTop,
ax::mojom::ScrollBehavior::kDoNotScrollIfVisible));
action_data = fake_pepper_instance.GetReceivedActionData();
EXPECT_EQ(PP_PdfAccessibilityScrollAlignment::PP_PDF_SCROLL_ALIGNMENT_RIGHT,
action_data.horizontal_scroll_alignment);

EXPECT_TRUE(pdf_action_target->ScrollToMakeVisibleWithSubFocus(
gfx::Rect(0, 0, 50, 50),
ax::mojom::ScrollAlignment::kScrollAlignmentBottom,
ax::mojom::ScrollAlignment::kScrollAlignmentBottom));
ax::mojom::ScrollAlignment::kScrollAlignmentBottom,
ax::mojom::ScrollBehavior::kDoNotScrollIfVisible));
action_data = fake_pepper_instance.GetReceivedActionData();
EXPECT_EQ(PP_PdfAccessibilityScrollAlignment::PP_PDF_SCROLL_ALIGNMENT_BOTTOM,
action_data.horizontal_scroll_alignment);

EXPECT_TRUE(pdf_action_target->ScrollToMakeVisibleWithSubFocus(
gfx::Rect(0, 0, 50, 50),
ax::mojom::ScrollAlignment::kScrollAlignmentCenter,
ax::mojom::ScrollAlignment::kScrollAlignmentClosestEdge));
ax::mojom::ScrollAlignment::kScrollAlignmentClosestEdge,
ax::mojom::ScrollBehavior::kDoNotScrollIfVisible));
action_data = fake_pepper_instance.GetReceivedActionData();
EXPECT_EQ(PP_PdfAccessibilityScrollAlignment::PP_PDF_SCROLL_ALIGNMENT_CENTER,
action_data.horizontal_scroll_alignment);
Expand Down
3 changes: 2 additions & 1 deletion components/pdf/renderer/pdf_ax_action_target.cc
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,8 @@ bool PdfAXActionTarget::ScrollToMakeVisible() const {
bool PdfAXActionTarget::ScrollToMakeVisibleWithSubFocus(
const gfx::Rect& rect,
ax::mojom::ScrollAlignment horizontal_scroll_alignment,
ax::mojom::ScrollAlignment vertical_scroll_alignment) const {
ax::mojom::ScrollAlignment vertical_scroll_alignment,
ax::mojom::ScrollBehavior scroll_behavior) const {
PP_PdfAccessibilityActionData pdf_action_data = {};
pdf_action_data.action =
PP_PdfAccessibilityAction::PP_PDF_SCROLL_TO_MAKE_VISIBLE;
Expand Down
3 changes: 2 additions & 1 deletion components/pdf/renderer/pdf_ax_action_target.h
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,8 @@ class PdfAXActionTarget : public ui::AXActionTarget {
bool ScrollToMakeVisibleWithSubFocus(
const gfx::Rect& rect,
ax::mojom::ScrollAlignment horizontal_scroll_alignment,
ax::mojom::ScrollAlignment vertical_scroll_alignment) const override;
ax::mojom::ScrollAlignment vertical_scroll_alignment,
ax::mojom::ScrollBehavior scroll_behavior) const override;
bool ScrollToGlobalPoint(const gfx::Point& point) const override;

private:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -848,74 +848,58 @@ IN_PROC_BROWSER_TEST_F(AccessibilityAuraLinuxBrowserTest,
ASSERT_EQ(3, atk_object_get_n_accessible_children(document));

AtkObject* target1 = atk_object_ref_accessible_child(document, 0);
AtkObject* target2 = atk_object_ref_accessible_child(document, 1);

ASSERT_TRUE(ATK_IS_TEXT(target1));
ASSERT_TRUE(ATK_IS_TEXT(target2));

ASSERT_EQ(ATK_ROLE_SECTION, atk_object_get_role(target1));
ASSERT_EQ(ATK_ROLE_SECTION, atk_object_get_role(target2));

AccessibilityNotificationWaiter waiter(
shell()->web_contents(), ui::kAXModeComplete,
ax::mojom::Event::kScrollPositionChanged);
ASSERT_TRUE(ScrollSubstringTo(ATK_TEXT(target1), 1, 2, ATK_SCROLL_TOP_LEFT));
ASSERT_TRUE(ScrollSubstringTo(ATK_TEXT(target1), 1, 2, ATK_SCROLL_TOP_EDGE));
waiter.WaitForNotification();
int x, y;
atk_text_get_character_extents(ATK_TEXT(target1), 1, &x, &y, nullptr, nullptr,
ATK_XY_SCREEN);
EXPECT_EQ(y, doc_y);
EXPECT_EQ(x, doc_x);
EXPECT_NE(x, doc_x);

ASSERT_TRUE(ScrollSubstringTo(ATK_TEXT(target2), 1, 2, ATK_SCROLL_TOP_LEFT));
ASSERT_TRUE(ScrollSubstringTo(ATK_TEXT(target1), 1, 2, ATK_SCROLL_TOP_LEFT));
waiter.WaitForNotification();
atk_text_get_character_extents(ATK_TEXT(target2), 1, &x, &y, nullptr, nullptr,
atk_text_get_character_extents(ATK_TEXT(target1), 1, &x, &y, nullptr, nullptr,
ATK_XY_SCREEN);
EXPECT_EQ(y, doc_y);
EXPECT_EQ(x, doc_x);

ASSERT_TRUE(ScrollSubstringTo(ATK_TEXT(target1), 1, 2, ATK_SCROLL_TOP_LEFT));
waiter.WaitForNotification();

ASSERT_TRUE(
ScrollSubstringTo(ATK_TEXT(target2), 1, 2, ATK_SCROLL_RIGHT_EDGE));
ScrollSubstringTo(ATK_TEXT(target1), 1, 2, ATK_SCROLL_BOTTOM_EDGE));
waiter.WaitForNotification();
atk_text_get_character_extents(ATK_TEXT(target2), 1, &x, &y, nullptr, nullptr,
atk_text_get_character_extents(ATK_TEXT(target1), 1, &x, &y, nullptr, nullptr,
ATK_XY_SCREEN);
EXPECT_NE(x, doc_x);

ASSERT_TRUE(ScrollSubstringTo(ATK_TEXT(target1), 1, 2, ATK_SCROLL_TOP_LEFT));
waiter.WaitForNotification();
EXPECT_NE(y, doc_y);
EXPECT_EQ(x, doc_x);

ASSERT_TRUE(
ScrollSubstringTo(ATK_TEXT(target2), 1, 2, ATK_SCROLL_BOTTOM_EDGE));
ScrollSubstringTo(ATK_TEXT(target1), 1, 2, ATK_SCROLL_RIGHT_EDGE));
waiter.WaitForNotification();
atk_text_get_character_extents(ATK_TEXT(target2), 1, &x, &y, nullptr, nullptr,
atk_text_get_character_extents(ATK_TEXT(target1), 1, &x, &y, nullptr, nullptr,
ATK_XY_SCREEN);
EXPECT_NE(y, doc_y);
EXPECT_NE(x, doc_x);

ASSERT_TRUE(ScrollSubstringTo(ATK_TEXT(target1), 1, 2, ATK_SCROLL_TOP_LEFT));
waiter.WaitForNotification();

ASSERT_TRUE(ScrollSubstringTo(ATK_TEXT(target2), 1, 2, ATK_SCROLL_LEFT_EDGE));
ASSERT_TRUE(ScrollSubstringTo(ATK_TEXT(target1), 1, 2, ATK_SCROLL_LEFT_EDGE));
waiter.WaitForNotification();
atk_text_get_character_extents(ATK_TEXT(target2), 1, &x, &y, nullptr, nullptr,
atk_text_get_character_extents(ATK_TEXT(target1), 1, &x, &y, nullptr, nullptr,
ATK_XY_SCREEN);
EXPECT_NE(y, doc_y);
EXPECT_EQ(x, doc_x);

ASSERT_TRUE(ScrollSubstringTo(ATK_TEXT(target1), 1, 2, ATK_SCROLL_TOP_LEFT));
waiter.WaitForNotification();

ASSERT_TRUE(ScrollSubstringTo(ATK_TEXT(target2), 1, 2, ATK_SCROLL_TOP_LEFT));
waiter.WaitForNotification();
atk_text_get_character_extents(ATK_TEXT(target2), 1, &x, &y, nullptr, nullptr,
atk_text_get_character_extents(ATK_TEXT(target1), 1, &x, &y, nullptr, nullptr,
ATK_XY_SCREEN);
EXPECT_EQ(y, doc_y);
EXPECT_EQ(x, doc_x);

g_object_unref(target1);
g_object_unref(target2);
}

typedef gboolean (*ScrollSubstringToPointFunc)(AtkText* text,
Expand Down
6 changes: 3 additions & 3 deletions content/browser/accessibility/browser_accessibility.cc
Original file line number Diff line number Diff line change
Expand Up @@ -1810,9 +1810,9 @@ bool BrowserAccessibility::AccessibilityPerformAction(
return true;
}
case ax::mojom::Action::kScrollToMakeVisible:
manager_->ScrollToMakeVisible(*this, data.target_rect,
data.horizontal_scroll_alignment,
data.vertical_scroll_alignment);
manager_->ScrollToMakeVisible(
*this, data.target_rect, data.horizontal_scroll_alignment,
data.vertical_scroll_alignment, data.scroll_behavior);
return true;
case ax::mojom::Action::kSetScrollOffset:
manager_->SetScrollOffset(*this, data.target_point);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -752,7 +752,8 @@ void BrowserAccessibilityManager::ScrollToMakeVisible(
const BrowserAccessibility& node,
gfx::Rect subfocus,
ax::mojom::ScrollAlignment horizontal_scroll_alignment,
ax::mojom::ScrollAlignment vertical_scroll_alignment) {
ax::mojom::ScrollAlignment vertical_scroll_alignment,
ax::mojom::ScrollBehavior scroll_behavior) {
if (!delegate_)
return;

Expand All @@ -765,6 +766,7 @@ void BrowserAccessibilityManager::ScrollToMakeVisible(
action_data.target_rect = subfocus;
action_data.horizontal_scroll_alignment = horizontal_scroll_alignment;
action_data.vertical_scroll_alignment = vertical_scroll_alignment;
action_data.scroll_behavior = scroll_behavior;
delegate_->AccessibilityPerformAction(action_data);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -249,7 +249,9 @@ class CONTENT_EXPORT BrowserAccessibilityManager : public ui::AXTreeObserver,
ax::mojom::ScrollAlignment horizontal_scroll_alignment =
ax::mojom::ScrollAlignment::kScrollAlignmentCenter,
ax::mojom::ScrollAlignment vertical_scroll_alignment =
ax::mojom::ScrollAlignment::kScrollAlignmentCenter);
ax::mojom::ScrollAlignment::kScrollAlignmentCenter,
ax::mojom::ScrollBehavior scroll_behavior =
ax::mojom::ScrollBehavior::kDoNotScrollIfVisible);
void ScrollToPoint(const BrowserAccessibility& node, gfx::Point point);
void SetAccessibilityFocus(const BrowserAccessibility& node);
void SetFocus(const BrowserAccessibility& node);
Expand Down
4 changes: 4 additions & 0 deletions content/common/accessibility_messages.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,9 @@ IPC_ENUM_TRAITS_MAX_VALUE(ax::mojom::Action, ax::mojom::Action::kMaxValue)
IPC_ENUM_TRAITS_MAX_VALUE(ax::mojom::ScrollAlignment,
ax::mojom::ScrollAlignment::kMaxValue)

IPC_ENUM_TRAITS_MAX_VALUE(ax::mojom::ScrollBehavior,
ax::mojom::ScrollBehavior::kMaxValue)

IPC_STRUCT_TRAITS_BEGIN(ui::AXActionData)
IPC_STRUCT_TRAITS_MEMBER(action)
IPC_STRUCT_TRAITS_MEMBER(target_tree_id)
Expand All @@ -52,6 +55,7 @@ IPC_STRUCT_TRAITS_BEGIN(ui::AXActionData)
IPC_STRUCT_TRAITS_MEMBER(hit_test_event_to_fire)
IPC_STRUCT_TRAITS_MEMBER(horizontal_scroll_alignment)
IPC_STRUCT_TRAITS_MEMBER(vertical_scroll_alignment)
IPC_STRUCT_TRAITS_MEMBER(scroll_behavior)
IPC_STRUCT_TRAITS_END()

IPC_STRUCT_TRAITS_BEGIN(content::AXContentNodeData)
Expand Down
5 changes: 3 additions & 2 deletions content/renderer/accessibility/blink_ax_action_target.cc
Original file line number Diff line number Diff line change
Expand Up @@ -131,10 +131,11 @@ bool BlinkAXActionTarget::ScrollToMakeVisible() const {
bool BlinkAXActionTarget::ScrollToMakeVisibleWithSubFocus(
const gfx::Rect& rect,
ax::mojom::ScrollAlignment horizontal_scroll_alignment,
ax::mojom::ScrollAlignment vertical_scroll_alignment) const {
ax::mojom::ScrollAlignment vertical_scroll_alignment,
ax::mojom::ScrollBehavior scroll_behavior) const {
return web_ax_object_.ScrollToMakeVisibleWithSubFocus(
WebRect(rect.x(), rect.y(), rect.width(), rect.height()),
horizontal_scroll_alignment, vertical_scroll_alignment);
horizontal_scroll_alignment, vertical_scroll_alignment, scroll_behavior);
}

bool BlinkAXActionTarget::ScrollToGlobalPoint(const gfx::Point& point) const {
Expand Down
3 changes: 2 additions & 1 deletion content/renderer/accessibility/blink_ax_action_target.h
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,8 @@ class BlinkAXActionTarget : public ui::AXActionTarget {
bool ScrollToMakeVisibleWithSubFocus(
const gfx::Rect& rect,
ax::mojom::ScrollAlignment horizontal_scroll_alignment,
ax::mojom::ScrollAlignment vertical_scroll_alignment) const override;
ax::mojom::ScrollAlignment vertical_scroll_alignment,
ax::mojom::ScrollBehavior scroll_behavior) const override;
bool ScrollToGlobalPoint(const gfx::Point& point) const override;

private:
Expand Down
6 changes: 3 additions & 3 deletions content/renderer/accessibility/render_accessibility_impl.cc
Original file line number Diff line number Diff line change
Expand Up @@ -760,9 +760,9 @@ void RenderAccessibilityImpl::OnPerformAction(
target->Increment();
break;
case ax::mojom::Action::kScrollToMakeVisible:
target->ScrollToMakeVisibleWithSubFocus(data.target_rect,
data.horizontal_scroll_alignment,
data.vertical_scroll_alignment);
target->ScrollToMakeVisibleWithSubFocus(
data.target_rect, data.horizontal_scroll_alignment,
data.vertical_scroll_alignment, data.scroll_behavior);
break;
case ax::mojom::Action::kScrollToPoint:
target->ScrollToGlobalPoint(data.target_point);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -638,7 +638,8 @@ TEST_F(BlinkAXActionTargetTest, TestMethods) {
EXPECT_EQ(gfx::Point(0, 0), scroller_action_target->GetScrollOffset());
EXPECT_TRUE(scroller_child_action_target->ScrollToMakeVisibleWithSubFocus(
gfx::Rect(0, 0, 50, 50), ax::mojom::ScrollAlignment::kScrollAlignmentLeft,
ax::mojom::ScrollAlignment::kScrollAlignmentTop));
ax::mojom::ScrollAlignment::kScrollAlignmentTop,
ax::mojom::ScrollBehavior::kDoNotScrollIfVisible));
EXPECT_GE(scroller_action_target->GetScrollOffset().y(), 900);

scroller_action_target->SetScrollOffset(gfx::Point(0, 0));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -395,6 +395,8 @@ AutomationInternalPerformActionFunction::ConvertToAXActionData(
ax::mojom::ScrollAlignment::kScrollAlignmentCenter;
action->vertical_scroll_alignment =
ax::mojom::ScrollAlignment::kScrollAlignmentCenter;
action->scroll_behavior =
ax::mojom::ScrollBehavior::kDoNotScrollIfVisible;
break;
case api::automation::ACTION_TYPE_SCROLLBACKWARD:
action->action = ax::mojom::Action::kScrollBackward;
Expand Down
4 changes: 3 additions & 1 deletion third_party/blink/public/web/web_ax_object.h
Original file line number Diff line number Diff line change
Expand Up @@ -303,7 +303,9 @@ class WebAXObject {
ax::mojom::ScrollAlignment horizontal_scroll_alignment =
ax::mojom::ScrollAlignment::kScrollAlignmentCenter,
ax::mojom::ScrollAlignment vertical_scroll_alignment =
ax::mojom::ScrollAlignment::kScrollAlignmentCenter) const;
ax::mojom::ScrollAlignment::kScrollAlignmentCenter,
ax::mojom::ScrollBehavior scroll_behavior =
ax::mojom::ScrollBehavior::kDoNotScrollIfVisible) const;
// Scroll this object to a given point in global coordinates of the top-level
// window.
BLINK_EXPORT bool ScrollToGlobalPoint(const WebPoint&) const;
Expand Down
17 changes: 14 additions & 3 deletions third_party/blink/renderer/modules/exported/web_ax_object.cc
Original file line number Diff line number Diff line change
Expand Up @@ -1594,7 +1594,8 @@ bool WebAXObject::ScrollToMakeVisible() const {
bool WebAXObject::ScrollToMakeVisibleWithSubFocus(
const WebRect& subfocus,
ax::mojom::ScrollAlignment horizontal_scroll_alignment,
ax::mojom::ScrollAlignment vertical_scroll_alignment) const {
ax::mojom::ScrollAlignment vertical_scroll_alignment,
ax::mojom::ScrollBehavior scroll_behavior) const {
if (IsDetached())
return false;

Expand All @@ -1603,10 +1604,20 @@ bool WebAXObject::ScrollToMakeVisibleWithSubFocus(
ToBlinkScrollAlignmentBehavior(horizontal_scroll_alignment);
auto vertical_behavior =
ToBlinkScrollAlignmentBehavior(vertical_scroll_alignment);

blink::ScrollAlignmentBehavior visible_horizontal_behavior =
scroll_behavior == ax::mojom::ScrollBehavior::kScrollIfVisible
? horizontal_behavior
: kScrollAlignmentNoScroll;
blink::ScrollAlignmentBehavior visible_vertical_behavior =
scroll_behavior == ax::mojom::ScrollBehavior::kScrollIfVisible
? vertical_behavior
: kScrollAlignmentNoScroll;

blink::ScrollAlignment blink_horizontal_scroll_alignment = {
kScrollAlignmentNoScroll, horizontal_behavior, horizontal_behavior};
visible_horizontal_behavior, horizontal_behavior, horizontal_behavior};
blink::ScrollAlignment blink_vertical_scroll_alignment = {
kScrollAlignmentNoScroll, vertical_behavior, vertical_behavior};
visible_vertical_behavior, vertical_behavior, vertical_behavior};
return private_->RequestScrollToMakeVisibleWithSubFocusAction(
subfocus, blink_horizontal_scroll_alignment,
blink_vertical_scroll_alignment);
Expand Down
3 changes: 2 additions & 1 deletion ui/accessibility/ax_action_data.cc
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,8 @@ AXActionData::AXActionData()
: action(ax::mojom::Action::kNone),
hit_test_event_to_fire(ax::mojom::Event::kNone),
horizontal_scroll_alignment(ax::mojom::ScrollAlignment::kNone),
vertical_scroll_alignment(ax::mojom::ScrollAlignment::kNone) {}
vertical_scroll_alignment(ax::mojom::ScrollAlignment::kNone),
scroll_behavior(ax::mojom::ScrollBehavior::kNone) {}

AXActionData::AXActionData(const AXActionData& other) = default;
AXActionData::~AXActionData() = default;
Expand Down
4 changes: 4 additions & 0 deletions ui/accessibility/ax_action_data.h
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,10 @@ struct AX_EXPORT AXActionData {
// scroll alignment controls where a node is scrolled within the viewport.
ax::mojom::ScrollAlignment horizontal_scroll_alignment;
ax::mojom::ScrollAlignment vertical_scroll_alignment;

// The behavior to use for a SCROLL_TO_MAKE_VISIBLE. This controls whether or
// not the viewport is scrolled when the node is already visible.
ax::mojom::ScrollBehavior scroll_behavior;
};

} // namespace ui
Expand Down
3 changes: 2 additions & 1 deletion ui/accessibility/ax_action_target.h
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,8 @@ class AXActionTarget {
virtual bool ScrollToMakeVisibleWithSubFocus(
const gfx::Rect& rect,
ax::mojom::ScrollAlignment horizontal_scroll_alignment,
ax::mojom::ScrollAlignment vertical_scroll_alignment) const = 0;
ax::mojom::ScrollAlignment vertical_scroll_alignment,
ax::mojom::ScrollBehavior scroll_behavior) const = 0;
// Scroll this object to a given point in global coordinates of the top-level
// window.
virtual bool ScrollToGlobalPoint(const gfx::Point& point) const = 0;
Expand Down
9 changes: 9 additions & 0 deletions ui/accessibility/ax_enums.mojom
Original file line number Diff line number Diff line change
Expand Up @@ -445,6 +445,15 @@ enum ScrollAlignment {
kScrollAlignmentClosestEdge
};

// A list of valid values for the scroll behavior argument to argument in
// |AXActionData|. These values control whether a node is scrolled in the
// viewport if it is already visible.
enum ScrollBehavior {
kNone,
kDoNotScrollIfVisible,
kScrollIfVisible,
};

// A list of valid values for the |AXIntAttribute| |default_action_verb|.
// These will describe the action that will be performed on a given node when
// executing the default action, which is a click.
Expand Down
1 change: 1 addition & 0 deletions ui/accessibility/mojom/ax_action_data.mojom
Original file line number Diff line number Diff line change
Expand Up @@ -28,4 +28,5 @@ struct AXActionData {
Event hit_test_event_to_fire;
ScrollAlignment horizontal_scroll_alignment;
ScrollAlignment vertical_scroll_alignment;
ScrollBehavior scroll_behavior;
};
1 change: 1 addition & 0 deletions ui/accessibility/mojom/ax_action_data_mojom_traits.cc
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ bool StructTraits<ax::mojom::AXActionDataDataView, ui::AXActionData>::Read(
out->custom_action_id = data.custom_action_id();
out->horizontal_scroll_alignment = data.horizontal_scroll_alignment();
out->vertical_scroll_alignment = data.vertical_scroll_alignment();
out->scroll_behavior = data.scroll_behavior();
return data.ReadTargetRect(&out->target_rect) &&
data.ReadTargetPoint(&out->target_point) &&
data.ReadValue(&out->value) &&
Expand Down
3 changes: 3 additions & 0 deletions ui/accessibility/mojom/ax_action_data_mojom_traits.h
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,9 @@ struct StructTraits<ax::mojom::AXActionDataDataView, ui::AXActionData> {
const ui::AXActionData& a) {
return a.vertical_scroll_alignment;
}
static ax::mojom::ScrollBehavior scroll_behavior(const ui::AXActionData& a) {
return a.scroll_behavior;
}

static bool Read(ax::mojom::AXActionDataDataView data, ui::AXActionData* out);
};
Expand Down
3 changes: 2 additions & 1 deletion ui/accessibility/null_ax_action_target.cc
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,8 @@ bool NullAXActionTarget::ScrollToMakeVisible() const {
bool NullAXActionTarget::ScrollToMakeVisibleWithSubFocus(
const gfx::Rect& rect,
ax::mojom::ScrollAlignment horizontal_scroll_alignment,
ax::mojom::ScrollAlignment vertical_scroll_alignment) const {
ax::mojom::ScrollAlignment vertical_scroll_alignment,
ax::mojom::ScrollBehavior scroll_behavior) const {
return false;
}

Expand Down
3 changes: 2 additions & 1 deletion ui/accessibility/null_ax_action_target.h
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,8 @@ class AX_EXPORT NullAXActionTarget : public AXActionTarget {
bool ScrollToMakeVisibleWithSubFocus(
const gfx::Rect& rect,
ax::mojom::ScrollAlignment horizontal_scroll_alignment,
ax::mojom::ScrollAlignment vertical_scroll_alignment) const override;
ax::mojom::ScrollAlignment vertical_scroll_alignment,
ax::mojom::ScrollBehavior scroll_behavior) const override;
bool ScrollToGlobalPoint(const gfx::Point& point) const override;
};

Expand Down
Loading

0 comments on commit cf67a9c

Please sign in to comment.