Commit 56a75817 authored by Qiang Xu's avatar Qiang Xu Committed by Commit Bot

mash: create AccessibilityFocusRingController mojo interface

changes:
Declare methods in AccessibilityFocusRingController that chrome needs
in mojo interface.

Bug: 594887
Change-Id: I5d8b47eb91301e848e2a2d3d13ad60b946db8a65
Reviewed-on: https://chromium-review.googlesource.com/957524
Commit-Queue: Qiang Xu <warx@google.com>
Reviewed-by: default avatarTom Sepez <tsepez@chromium.org>
Reviewed-by: default avatarDominic Mazzoni <dmazzoni@chromium.org>
Reviewed-by: default avatarJames Cook <jamescook@chromium.org>
Cr-Commit-Position: refs/heads/master@{#543254}
parent a504f941
......@@ -9,6 +9,7 @@
#include <algorithm>
#include <memory>
#include <set>
#include <utility>
#include <vector>
#include "ash/accessibility/accessibility_highlight_layer.h"
......@@ -68,7 +69,8 @@ AccessibilityFocusRingController::GetInstance() {
return base::Singleton<AccessibilityFocusRingController>::get();
}
AccessibilityFocusRingController::AccessibilityFocusRingController() {
AccessibilityFocusRingController::AccessibilityFocusRingController()
: binding_(this) {
focus_animation_info_.fade_in_time =
base::TimeDelta::FromMilliseconds(kFocusFadeInTimeMilliseconds);
focus_animation_info_.fade_out_time =
......@@ -85,6 +87,11 @@ AccessibilityFocusRingController::AccessibilityFocusRingController() {
AccessibilityFocusRingController::~AccessibilityFocusRingController() = default;
void AccessibilityFocusRingController::BindRequest(
mojom::AccessibilityFocusRingControllerRequest request) {
binding_.Bind(std::move(request));
}
void AccessibilityFocusRingController::SetFocusRingColor(SkColor color) {
focus_ring_color_ = color;
UpdateFocusRingsFromFocusRects();
......@@ -97,7 +104,7 @@ void AccessibilityFocusRingController::ResetFocusRingColor() {
void AccessibilityFocusRingController::SetFocusRing(
const std::vector<gfx::Rect>& rects,
AccessibilityFocusRingController::FocusRingBehavior focus_ring_behavior) {
mojom::FocusRingBehavior focus_ring_behavior) {
std::vector<gfx::Rect> clean_rects(rects);
// Remove duplicates
if (rects.size() > 1) {
......@@ -112,15 +119,25 @@ void AccessibilityFocusRingController::SetFocusRing(
OnLayerChange(&focus_animation_info_);
focus_rects_ = clean_rects;
UpdateFocusRingsFromFocusRects();
if (focus_ring_observer_for_testing_)
focus_ring_observer_for_testing_.Run();
}
void AccessibilityFocusRingController::HideFocusRing() {
focus_rects_.clear();
UpdateFocusRingsFromFocusRects();
if (focus_ring_observer_for_testing_)
focus_ring_observer_for_testing_.Run();
}
void AccessibilityFocusRingController::SetHighlights(
const std::vector<gfx::Rect>& rects,
SkColor color) {
highlight_rects_ = rects;
GetColorAndOpacityFromColor(color, kHighlightOpacity, &highlight_color_,
&highlight_opacity_);
UpdateHighlightFromHighlightRects();
}
void AccessibilityFocusRingController::HideHighlights() {
highlight_rects_.clear();
UpdateHighlightFromHighlightRects();
}
void AccessibilityFocusRingController::UpdateFocusRingsFromFocusRects() {
......@@ -136,7 +153,7 @@ void AccessibilityFocusRingController::UpdateFocusRingsFromFocusRects() {
focus_layers_[i] = std::make_unique<AccessibilityFocusRingLayer>(this);
}
if (focus_ring_behavior_ == PERSIST_FOCUS_RING &&
if (focus_ring_behavior_ == mojom::FocusRingBehavior::PERSIST_FOCUS_RING &&
focus_layers_[0]->CanAnimate()) {
// In PERSIST mode, animate the first ring to its destination
// location, then set the rest of the rings directly.
......@@ -203,20 +220,6 @@ void AccessibilityFocusRingController::HideCaretRing() {
caret_layer_.reset();
}
void AccessibilityFocusRingController::SetHighlights(
const std::vector<gfx::Rect>& rects,
SkColor color) {
highlight_rects_ = rects;
GetColorAndOpacityFromColor(color, kHighlightOpacity, &highlight_color_,
&highlight_opacity_);
UpdateHighlightFromHighlightRects();
}
void AccessibilityFocusRingController::HideHighlights() {
highlight_rects_.clear();
UpdateHighlightFromHighlightRects();
}
void AccessibilityFocusRingController::SetNoFadeForTesting() {
focus_animation_info_.fade_in_time = base::TimeDelta();
focus_animation_info_.fade_out_time = base::TimeDelta::FromHours(1);
......@@ -455,7 +458,7 @@ void AccessibilityFocusRingController::AnimateFocusRings(
if (timestamp < focus_animation_info_.change_time)
timestamp = focus_animation_info_.change_time;
if (focus_ring_behavior_ == PERSIST_FOCUS_RING) {
if (focus_ring_behavior_ == mojom::FocusRingBehavior::PERSIST_FOCUS_RING) {
base::TimeDelta delta = timestamp - focus_animation_info_.change_time;
base::TimeDelta transition_time =
base::TimeDelta::FromMilliseconds(kTransitionTimeMilliseconds);
......
......@@ -12,11 +12,13 @@
#include "ash/accessibility/accessibility_focus_ring_layer.h"
#include "ash/accessibility/accessibility_highlight_layer.h"
#include "ash/ash_export.h"
#include "ash/public/interfaces/accessibility_focus_ring_controller.mojom.h"
#include "base/bind.h"
#include "base/macros.h"
#include "base/memory/singleton.h"
#include "base/optional.h"
#include "base/time/time.h"
#include "mojo/public/cpp/bindings/binding.h"
#include "third_party/skia/include/core/SkColor.h"
#include "ui/gfx/geometry/rect.h"
......@@ -24,25 +26,25 @@ namespace ash {
// AccessibilityFocusRingController handles drawing custom rings around
// the focused object, cursor, and/or caret for accessibility.
// TODO(mash): Provide mojo API for access from chrome.
class ASH_EXPORT AccessibilityFocusRingController
: public AccessibilityLayerDelegate {
: public AccessibilityLayerDelegate,
public mojom::AccessibilityFocusRingController {
public:
// Get the single instance of this class.
static AccessibilityFocusRingController* GetInstance();
enum FocusRingBehavior { FADE_OUT_FOCUS_RING, PERSIST_FOCUS_RING };
// Binds the mojom::AccessibilityFocusRingController interface to this object.
void BindRequest(mojom::AccessibilityFocusRingControllerRequest request);
// Set the focus ring color, or reset it back to the default.
void SetFocusRingColor(SkColor color);
void ResetFocusRingColor();
// Draw a focus ring around the given set of rects, in global screen
// coordinates. Use |focus_ring_behavior| to specify whether the focus
// ring should persist or fade out.
// mojom::AccessibilityFocusRingController overrides:
void SetFocusRingColor(SkColor color) override;
void ResetFocusRingColor() override;
void SetFocusRing(const std::vector<gfx::Rect>& rects,
FocusRingBehavior focus_ring_behavior);
void HideFocusRing();
mojom::FocusRingBehavior focus_ring_behavior) override;
void HideFocusRing() override;
void SetHighlights(const std::vector<gfx::Rect>& rects,
SkColor color) override;
void HideHighlights() override;
// Draw a ring around the mouse cursor. It fades out automatically.
void SetCursorRing(const gfx::Point& location);
......@@ -52,13 +54,6 @@ class ASH_EXPORT AccessibilityFocusRingController
void SetCaretRing(const gfx::Point& location);
void HideCaretRing();
// Draw a highlight at the given rects, in global screen coordinates.
// Rects may be overlapping and will be merged into one layer.
// This looks similar to selecting a region with the cursor, except
// it is drawn in the foreground rather than behind a text layer.
void SetHighlights(const std::vector<gfx::Rect>& rects, SkColor color);
void HideHighlights();
// Don't fade in / out, for testing.
void SetNoFadeForTesting();
......@@ -77,12 +72,6 @@ class ASH_EXPORT AccessibilityFocusRingController
return highlight_layer_.get();
}
// Sets an observer of focus ring layer changes.
void set_focus_ring_observer_for_testing(
base::RepeatingCallback<void()> observer) {
focus_ring_observer_for_testing_ = observer;
}
protected:
AccessibilityFocusRingController();
~AccessibilityFocusRingController() override;
......@@ -137,12 +126,16 @@ class ASH_EXPORT AccessibilityFocusRingController
void ComputeOpacity(LayerAnimationInfo* animation_info,
base::TimeTicks timestamp);
// Binding for mojom::AccessibilityFocusRingController interface.
mojo::Binding<mojom::AccessibilityFocusRingController> binding_;
LayerAnimationInfo focus_animation_info_;
std::vector<gfx::Rect> focus_rects_;
std::vector<AccessibilityFocusRing> previous_focus_rings_;
std::vector<AccessibilityFocusRing> focus_rings_;
std::vector<std::unique_ptr<AccessibilityFocusRingLayer>> focus_layers_;
FocusRingBehavior focus_ring_behavior_ = FADE_OUT_FOCUS_RING;
mojom::FocusRingBehavior focus_ring_behavior_ =
mojom::FocusRingBehavior::FADE_OUT_FOCUS_RING;
base::Optional<SkColor> focus_ring_color_;
LayerAnimationInfo cursor_animation_info_;
......@@ -160,8 +153,6 @@ class ASH_EXPORT AccessibilityFocusRingController
friend struct base::DefaultSingletonTraits<AccessibilityFocusRingController>;
base::RepeatingCallback<void()> focus_ring_observer_for_testing_;
DISALLOW_COPY_AND_ASSIGN(AccessibilityFocusRingController);
};
......
......@@ -8,6 +8,7 @@
#include "ash/accessibility/accessibility_focus_ring_controller.h"
#include "ash/public/cpp/config.h"
#include "ash/public/interfaces/accessibility_focus_ring_controller.mojom.h"
#include "ash/shell.h"
#include "ui/aura/window.h"
#include "ui/aura/window_tree_host.h"
......@@ -42,8 +43,7 @@ AccessibilityHighlightController::AccessibilityHighlightController() {
AccessibilityHighlightController::~AccessibilityHighlightController() {
AccessibilityFocusRingController::GetInstance()->SetFocusRing(
std::vector<gfx::Rect>(),
AccessibilityFocusRingController::FADE_OUT_FOCUS_RING);
std::vector<gfx::Rect>(), mojom::FocusRingBehavior::FADE_OUT_FOCUS_RING);
AccessibilityFocusRingController::GetInstance()->HideCaretRing();
AccessibilityFocusRingController::GetInstance()->HideCursorRing();
......@@ -147,21 +147,19 @@ void AccessibilityHighlightController::UpdateFocusAndCaretHighlights() {
// both are visible.
if (caret_ && caret_visible_) {
controller->SetCaretRing(caret_point_);
controller->SetFocusRing(
std::vector<gfx::Rect>(),
AccessibilityFocusRingController::FADE_OUT_FOCUS_RING);
controller->SetFocusRing(std::vector<gfx::Rect>(),
mojom::FocusRingBehavior::FADE_OUT_FOCUS_RING);
} else if (focus_) {
controller->HideCaretRing();
std::vector<gfx::Rect> rects;
if (!focus_rect_.IsEmpty())
rects.push_back(focus_rect_);
controller->SetFocusRing(
rects, AccessibilityFocusRingController::FADE_OUT_FOCUS_RING);
controller->SetFocusRing(rects,
mojom::FocusRingBehavior::FADE_OUT_FOCUS_RING);
} else {
controller->HideCaretRing();
controller->SetFocusRing(
std::vector<gfx::Rect>(),
AccessibilityFocusRingController::FADE_OUT_FOCUS_RING);
controller->SetFocusRing(std::vector<gfx::Rect>(),
mojom::FocusRingBehavior::FADE_OUT_FOCUS_RING);
}
}
......
......@@ -12,6 +12,7 @@
#include "ash/accessibility/touch_exploration_controller.h"
#include "ash/keyboard/keyboard_observer_register.h"
#include "ash/public/cpp/app_types.h"
#include "ash/public/interfaces/accessibility_focus_ring_controller.mojom.h"
#include "ash/root_window_controller.h"
#include "ash/shell.h"
#include "ash/wm/window_util.h"
......@@ -213,7 +214,7 @@ void TouchExplorationManager::UpdateTouchExplorationState() {
// Clear the focus highlight.
AccessibilityFocusRingController::GetInstance()->SetFocusRing(
std::vector<gfx::Rect>(),
AccessibilityFocusRingController::PERSIST_FOCUS_RING);
mojom::FocusRingBehavior::PERSIST_FOCUS_RING);
} else {
touch_exploration_controller_->SetExcludeBounds(gfx::Rect());
}
......
......@@ -11,6 +11,7 @@
"app_list::mojom::AppList",
"ash::mojom::AcceleratorController",
"ash::mojom::AccessibilityController",
"ash::mojom::AccessibilityFocusRingController",
"ash::mojom::AppListController",
"ash::mojom::AshMessageCenterController",
"ash::mojom::CastConfig",
......
......@@ -8,6 +8,7 @@
#include "ash/accelerators/accelerator_controller.h"
#include "ash/accessibility/accessibility_controller.h"
#include "ash/accessibility/accessibility_focus_ring_controller.h"
#include "ash/app_list/app_list_controller_impl.h"
#include "ash/cast_config_controller.h"
#include "ash/display/ash_display_controller.h"
......@@ -57,6 +58,12 @@ void BindAccessibilityControllerRequestOnMainThread(
Shell::Get()->accessibility_controller()->BindRequest(std::move(request));
}
void BindAccessibilityFocusRingControllerRequestOnMainThread(
mojom::AccessibilityFocusRingControllerRequest request) {
AccessibilityFocusRingController::GetInstance()->BindRequest(
std::move(request));
}
void BindAppListControllerRequestOnMainThread(
mojom::AppListControllerRequest request) {
Shell::Get()->app_list_controller()->BindRequest(std::move(request));
......@@ -182,6 +189,9 @@ void RegisterInterfaces(
registry->AddInterface(
base::Bind(&BindAccessibilityControllerRequestOnMainThread),
main_thread_task_runner);
registry->AddInterface(
base::Bind(&BindAccessibilityFocusRingControllerRequestOnMainThread),
main_thread_task_runner);
registry->AddInterface(base::Bind(&BindAppListControllerRequestOnMainThread),
main_thread_task_runner);
registry->AddInterface(
......
......@@ -14,6 +14,7 @@ mojom("interfaces_internal") {
sources = [
"accelerator_controller.mojom",
"accessibility_controller.mojom",
"accessibility_focus_ring_controller.mojom",
"app_list.mojom",
"ash_display_controller.mojom",
"ash_message_center_controller.mojom",
......
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
module ash.mojom;
import "ui/gfx/geometry/mojo/geometry.mojom";
enum FocusRingBehavior { FADE_OUT_FOCUS_RING, PERSIST_FOCUS_RING };
// Interface for ash client (e.g. Chrome) to control and query accessibility
// focus ring features.
interface AccessibilityFocusRingController {
// Sets the focus ring color.
SetFocusRingColor(uint32 skcolor);
// Resets the focus ring color back to the default.
ResetFocusRingColor();
// Draws a focus ring around the given set of rects in screen coordinates. Use
// |focus_ring_behavior| to specify whether the focus ring should persist or
// fade out.
SetFocusRing(array<gfx.mojom.Rect> rects_in_screen,
FocusRingBehavior focus_ring_behavior);
// Hides focus ring on screen.
HideFocusRing();
// Draws a highlight at the given rects in screen coordinates. Rects may be
// overlapping and will be merged into one layer. This looks similar to
// selecting a region with the cursor, except it is drawn in the foreground
// rather than behind a text layer.
SetHighlights(array<gfx.mojom.Rect> rects_in_screen, uint32 skcolor);
// Hides highlight on screen.
HideHighlights();
};
......@@ -5,6 +5,9 @@
#include "chrome/browser/accessibility/accessibility_extension_api.h"
#include <stddef.h>
#include <memory>
#include <set>
#include <vector>
#include "base/json/json_writer.h"
#include "base/strings/string_number_conversions.h"
......@@ -30,14 +33,12 @@
#include "ui/events/keycodes/keyboard_codes.h"
#if defined(OS_CHROMEOS)
#include "ash/accessibility/accessibility_focus_ring_controller.h"
#include "ash/public/interfaces/accessibility_focus_ring_controller.mojom.h"
#include "ash/shell.h"
#include "chrome/browser/chromeos/accessibility/accessibility_manager.h"
#include "chrome/browser/chromeos/arc/accessibility/arc_accessibility_helper_bridge.h"
#include "ui/aura/window_tree_host.h"
#include "ui/events/event_sink.h"
using ash::AccessibilityFocusRingController;
#endif
namespace accessibility_private = extensions::api::accessibility_private;
......@@ -78,18 +79,19 @@ AccessibilityPrivateSetFocusRingFunction::Run() {
rects.push_back(gfx::Rect(rect.left, rect.top, rect.width, rect.height));
}
auto* accessibility_manager = chromeos::AccessibilityManager::Get();
if (params->color) {
SkColor color;
if (!extensions::image_util::ParseHexColorString(*(params->color), &color))
return RespondNow(Error("Could not parse hex color"));
AccessibilityFocusRingController::GetInstance()->SetFocusRingColor(color);
accessibility_manager->SetFocusRingColor(color);
} else {
AccessibilityFocusRingController::GetInstance()->ResetFocusRingColor();
accessibility_manager->ResetFocusRingColor();
}
// Move the visible focus ring to cover all of these rects.
AccessibilityFocusRingController::GetInstance()->SetFocusRing(
rects, AccessibilityFocusRingController::PERSIST_FOCUS_RING);
accessibility_manager->SetFocusRing(
rects, ash::mojom::FocusRingBehavior::PERSIST_FOCUS_RING);
// Also update the touch exploration controller so that synthesized
// touch events are anchored within the focused object.
......@@ -125,7 +127,7 @@ AccessibilityPrivateSetHighlightsFunction::Run() {
return RespondNow(Error("Could not parse hex color"));
// Set the highlights to cover all of these rects.
AccessibilityFocusRingController::GetInstance()->SetHighlights(rects, color);
chromeos::AccessibilityManager::Get()->SetHighlights(rects, color);
return RespondNow(NoArguments());
#endif // defined(OS_CHROMEOS)
......
......@@ -12,8 +12,8 @@
#include <vector>
#include "ash/accessibility/accessibility_controller.h"
#include "ash/accessibility/accessibility_focus_ring_controller.h"
#include "ash/public/cpp/ash_pref_names.h"
#include "ash/public/interfaces/accessibility_focus_ring_controller.mojom.h"
#include "ash/public/interfaces/constants.mojom.h"
#include "ash/root_window_controller.h"
#include "ash/shell.h"
......@@ -317,6 +317,12 @@ AccessibilityManager::AccessibilityManager()
content::ServiceManagerConnection::GetForProcess()
->GetConnector()
->BindInterface(ash::mojom::kServiceName, &accessibility_controller_);
// Connect to ash's AccessibilityFocusRingController interface.
content::ServiceManagerConnection::GetForProcess()
->GetConnector()
->BindInterface(ash::mojom::kServiceName,
&accessibility_focus_ring_controller_);
}
AccessibilityManager::~AccessibilityManager() {
......@@ -1079,7 +1085,7 @@ AccessibilityManager::RegisterCallback(const AccessibilityStatusCallback& cb) {
}
void AccessibilityManager::NotifyAccessibilityStatusChanged(
AccessibilityStatusEventDetails& details) {
const AccessibilityStatusEventDetails& details) {
callback_list_.Notify(details);
// TODO(crbug.com/594887): Fix for mash by moving pref into ash.
......@@ -1274,9 +1280,8 @@ void AccessibilityManager::PostUnloadChromeVox() {
PlayEarcon(SOUND_SPOKEN_FEEDBACK_DISABLED, PlaySoundOption::ALWAYS);
// Clear the accessibility focus ring.
ash::AccessibilityFocusRingController::GetInstance()->SetFocusRing(
std::vector<gfx::Rect>(),
ash::AccessibilityFocusRingController::PERSIST_FOCUS_RING);
SetFocusRing(std::vector<gfx::Rect>(),
ash::mojom::FocusRingBehavior::PERSIST_FOCUS_RING);
if (chromevox_panel_) {
chromevox_panel_->Close();
......@@ -1320,8 +1325,8 @@ void AccessibilityManager::PostUnloadSelectToSpeak() {
// unloads.
// Clear the accessibility focus ring and highlight.
ash::AccessibilityFocusRingController::GetInstance()->HideFocusRing();
ash::AccessibilityFocusRingController::GetInstance()->HideHighlights();
HideFocusRing();
HideHighlights();
// Stop speech.
TtsController::GetInstance()->Stop();
......@@ -1353,6 +1358,39 @@ void AccessibilityManager::ToggleDictation() {
dictation_->OnToggleDictation();
}
void AccessibilityManager::SetFocusRingColor(SkColor color) {
accessibility_focus_ring_controller_->SetFocusRingColor(color);
}
void AccessibilityManager::ResetFocusRingColor() {
accessibility_focus_ring_controller_->ResetFocusRingColor();
}
void AccessibilityManager::SetFocusRing(
const std::vector<gfx::Rect>& rects_in_screen,
ash::mojom::FocusRingBehavior focus_ring_behavior) {
accessibility_focus_ring_controller_->SetFocusRing(rects_in_screen,
focus_ring_behavior);
if (focus_ring_observer_for_test_)
focus_ring_observer_for_test_.Run();
}
void AccessibilityManager::HideFocusRing() {
accessibility_focus_ring_controller_->HideFocusRing();
if (focus_ring_observer_for_test_)
focus_ring_observer_for_test_.Run();
}
void AccessibilityManager::SetHighlights(
const std::vector<gfx::Rect>& rects_in_screen,
SkColor color) {
accessibility_focus_ring_controller_->SetHighlights(rects_in_screen, color);
}
void AccessibilityManager::HideHighlights() {
accessibility_focus_ring_controller_->HideHighlights();
}
void AccessibilityManager::SetProfileForTest(Profile* profile) {
SetProfile(profile);
}
......@@ -1367,4 +1405,9 @@ void AccessibilityManager::FlushForTesting() {
accessibility_controller_.FlushForTesting();
}
void AccessibilityManager::SetFocusRingObserverForTest(
base::RepeatingCallback<void()> observer) {
focus_ring_observer_for_test_ = observer;
}
} // namespace chromeos
......@@ -5,11 +5,14 @@
#ifndef CHROME_BROWSER_CHROMEOS_ACCESSIBILITY_ACCESSIBILITY_MANAGER_H_
#define CHROME_BROWSER_CHROMEOS_ACCESSIBILITY_ACCESSIBILITY_MANAGER_H_
#include <memory>
#include <set>
#include <string>
#include <vector>
#include "ash/public/cpp/accessibility_types.h"
#include "ash/public/interfaces/accessibility_controller.mojom.h"
#include "ash/public/interfaces/accessibility_focus_ring_controller.mojom.h"
#include "base/callback_forward.h"
#include "base/callback_list.h"
#include "base/macros.h"
......@@ -230,7 +233,7 @@ class AccessibilityManager
// Notify registered callbacks of a status change in an accessibility setting.
void NotifyAccessibilityStatusChanged(
AccessibilityStatusEventDetails& details);
const AccessibilityStatusEventDetails& details);
// Notify accessibility when locale changes occur.
void OnLocaleChanged();
......@@ -292,11 +295,37 @@ class AccessibilityManager
// Starts or stops dictation (type what you speak).
void ToggleDictation();
// Sets the focus ring color.
void SetFocusRingColor(SkColor color);
// Resets the focus ring color back to the default.
void ResetFocusRingColor();
// Draws a focus ring around the given set of rects in screen coordinates. Use
// |focus_ring_behavior| to specify whether the focus ring should persist or
// fade out.
void SetFocusRing(const std::vector<gfx::Rect>& rects_in_screen,
ash::mojom::FocusRingBehavior focus_ring_behavior);
// Hides focus ring on screen.
void HideFocusRing();
// Draws a highlight at the given rects in screen coordinates. Rects may be
// overlapping and will be merged into one layer. This looks similar to
// selecting a region with the cursor, except it is drawn in the foreground
// rather than behind a text layer.
void SetHighlights(const std::vector<gfx::Rect>& rects_in_screen,
SkColor color);
// Hides highlight on screen.
void HideHighlights();
// Test helpers:
void SetProfileForTest(Profile* profile);
static void SetBrailleControllerForTest(
extensions::api::braille_display_private::BrailleController* controller);
void FlushForTesting();
void SetFocusRingObserverForTest(base::RepeatingCallback<void()> observer);
protected:
AccessibilityManager();
......@@ -423,10 +452,17 @@ class AccessibilityManager
// Ash's mojom::AccessibilityController used to request Ash's a11y feature.
ash::mojom::AccessibilityControllerPtr accessibility_controller_;
// Ash's mojom::AccessibilityFocusRingController used to request Ash's a11y
// focus ring feature.
ash::mojom::AccessibilityFocusRingControllerPtr
accessibility_focus_ring_controller_;
bool app_terminating_ = false;
std::unique_ptr<DictationChromeos> dictation_;
base::RepeatingCallback<void()> focus_ring_observer_for_test_;
base::WeakPtrFactory<AccessibilityManager> weak_ptr_factory_;
DISALLOW_COPY_AND_ASSIGN(AccessibilityManager);
......
......@@ -190,13 +190,13 @@ IN_PROC_BROWSER_TEST_F(SelectToSpeakTest, BreaksAtParagraphBounds) {
}
IN_PROC_BROWSER_TEST_F(SelectToSpeakTest, FocusRingMovesWithMouse) {
ash::AccessibilityFocusRingController* controller =
ash::AccessibilityFocusRingController::GetInstance();
// Create a callback for the focus ring observer.
base::RepeatingCallback<void()> callback =
base::BindRepeating(&SelectToSpeakTest::OnFocusRingChanged, GetWeakPtr());
controller->set_focus_ring_observer_for_testing(callback);
chromeos::AccessibilityManager::Get()->SetFocusRingObserverForTest(callback);
ash::AccessibilityFocusRingController* controller =
ash::AccessibilityFocusRingController::GetInstance();
std::vector<std::unique_ptr<ash::AccessibilityFocusRingLayer>> const&
focus_rings = controller->focus_ring_layers_for_testing();
......
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