blob: b3e5aa6aaa8e6f4de1f92a244f70112caf16fa57 [file]
// Copyright (c) 2020 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.
#include "content/renderer/accessibility/render_accessibility_manager.h"
#include <utility>
#include "base/bind.h"
#include "content/renderer/accessibility/render_accessibility_impl.h"
#include "content/renderer/render_frame_impl.h"
namespace content {
RenderAccessibilityManager::RenderAccessibilityManager(
RenderFrameImpl* render_frame)
: render_frame_(render_frame) {}
RenderAccessibilityManager::~RenderAccessibilityManager() = default;
void RenderAccessibilityManager::BindReceiver(
mojo::PendingAssociatedReceiver<mojom::RenderAccessibility> receiver) {
DCHECK(!receiver_.is_bound());
receiver_.Bind(std::move(receiver));
}
RenderAccessibilityImpl*
RenderAccessibilityManager::GetRenderAccessibilityImpl() {
return render_accessibility_.get();
}
ui::AXMode RenderAccessibilityManager::GetAccessibilityMode() const {
if (!render_accessibility_)
return ui::AXMode();
return render_accessibility_->GetAccessibilityMode();
}
void RenderAccessibilityManager::SetMode(uint32_t ax_mode) {
ui::AXMode old_mode = GetAccessibilityMode();
ui::AXMode new_mode(ax_mode);
if (old_mode == new_mode)
return;
if (new_mode.has_mode(ui::AXMode::kWebContents) &&
!old_mode.has_mode(ui::AXMode::kWebContents)) {
render_accessibility_ =
std::make_unique<RenderAccessibilityImpl>(render_frame_, new_mode);
} else if (!new_mode.has_mode(ui::AXMode::kWebContents) &&
old_mode.has_mode(ui::AXMode::kWebContents)) {
render_accessibility_.reset();
}
// Notify the RenderFrame when the accessibility mode is changes to ensure it
// notifies the relevant observers (subclasses of RenderFrameObserver). This
// includes the RenderAccessibilityImpl instance owned by |this|, which will
// make update Blink and emit the relevant events back to the browser process
// according to change in the accessibility mode being made.
render_frame_->NotifyAccessibilityModeChange(new_mode);
}
} // namespace content