Make BrowserAccessibilityManager inherit from WebContentsObserver
Before this CL, BrowserAccessibilityManager did not inherit
WebContentsObserver, and gets manually notified by WebContentsImpl when
navigation-related events take place. BrowserAccessibilityManager should
implement WebContentsObserver, so it can be automatically notified of
these things.
After this CL, BrowserAccessibilityManager inherits from WebContentsObserver,
however does not implement any navigation-related methods. This CL makes it
easier to land future changes (tracked by https://crbug.com/981271) that
transition BrowserAccessibilityManager to not being manually notified from
WebContentsImpl anymore.
Bug: 981271
Change-Id: Iaa7ae9d3f20b990dd4b370f41a0fff108cc6653c
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1672135
Commit-Queue: Dominic Farolino <[email protected]>
Reviewed-by: Matt Falkenhagen <[email protected]>
Reviewed-by: Nektarios Paisios <[email protected]>
Cr-Commit-Position: refs/heads/master@{#674770}
diff --git a/content/browser/accessibility/browser_accessibility_manager.cc b/content/browser/accessibility/browser_accessibility_manager.cc
index 77d4c854..9975d7b 100644
--- a/content/browser/accessibility/browser_accessibility_manager.cc
+++ b/content/browser/accessibility/browser_accessibility_manager.cc
@@ -152,7 +152,9 @@
BrowserAccessibilityManager::BrowserAccessibilityManager(
BrowserAccessibilityDelegate* delegate,
BrowserAccessibilityFactory* factory)
- : delegate_(delegate),
+ : WebContentsObserver(delegate ? delegate->AccessibilityWebContents()
+ : nullptr),
+ delegate_(delegate),
factory_(factory),
tree_(new ui::AXSerializableTree()),
user_is_navigating_away_(false),
@@ -168,7 +170,9 @@
const ui::AXTreeUpdate& initial_tree,
BrowserAccessibilityDelegate* delegate,
BrowserAccessibilityFactory* factory)
- : delegate_(delegate),
+ : WebContentsObserver(delegate ? delegate->AccessibilityWebContents()
+ : nullptr),
+ delegate_(delegate),
factory_(factory),
tree_(new ui::AXSerializableTree()),
user_is_navigating_away_(false),
diff --git a/content/browser/accessibility/browser_accessibility_manager.h b/content/browser/accessibility/browser_accessibility_manager.h
index b5ff624..8ca497e8 100644
--- a/content/browser/accessibility/browser_accessibility_manager.h
+++ b/content/browser/accessibility/browser_accessibility_manager.h
@@ -19,6 +19,7 @@
#include "content/browser/accessibility/browser_accessibility_position.h"
#include "content/common/content_export.h"
#include "content/public/browser/ax_event_notification_details.h"
+#include "content/public/browser/web_contents_observer.h"
#include "third_party/blink/public/web/web_ax_enums.h"
#include "ui/accessibility/ax_action_data.h"
#include "ui/accessibility/ax_event_generator.h"
@@ -88,6 +89,7 @@
virtual gfx::NativeViewAccessible AccessibilityGetNativeViewAccessible() = 0;
virtual gfx::NativeViewAccessible
AccessibilityGetNativeViewAccessibleForWindow() = 0;
+ virtual WebContents* AccessibilityWebContents() = 0;
// Returns true if this delegate represents the main (topmost) frame in a
// tree of frames.
@@ -125,7 +127,8 @@
// Manages a tree of BrowserAccessibility objects.
class CONTENT_EXPORT BrowserAccessibilityManager : public ui::AXTreeObserver,
- public ui::AXTreeManager {
+ public ui::AXTreeManager,
+ public WebContentsObserver {
protected:
using BrowserAccessibilityPositionInstance =
BrowserAccessibilityPosition::AXPositionInstance;
@@ -188,11 +191,14 @@
virtual void OnWindowBlurred();
// Notify the accessibility manager about page navigation.
+ // TODO(domfarolino, dmazzoni): Implement WebContentsObserver methods that
+ // correspond to the ones we provide today, so we can stop being manually
+ // notified of navigation events when they happen.
void UserIsNavigatingAway();
virtual void UserIsReloading();
void NavigationSucceeded();
void NavigationFailed();
- void DidStopLoading();
+ void DidStopLoading() override;
// Keep track of if this page is hidden by an interstitial, in which case
// we need to suppress all events.
diff --git a/content/browser/accessibility/test_browser_accessibility_delegate.cc b/content/browser/accessibility/test_browser_accessibility_delegate.cc
index eabb8180..4679bc6 100644
--- a/content/browser/accessibility/test_browser_accessibility_delegate.cc
+++ b/content/browser/accessibility/test_browser_accessibility_delegate.cc
@@ -46,6 +46,10 @@
return nullptr;
}
+WebContents* TestBrowserAccessibilityDelegate::AccessibilityWebContents() {
+ return nullptr;
+}
+
bool TestBrowserAccessibilityDelegate::AccessibilityIsMainFrame() const {
return is_root_frame_;
}
diff --git a/content/browser/accessibility/test_browser_accessibility_delegate.h b/content/browser/accessibility/test_browser_accessibility_delegate.h
index 10dca8b..d42f436 100644
--- a/content/browser/accessibility/test_browser_accessibility_delegate.h
+++ b/content/browser/accessibility/test_browser_accessibility_delegate.h
@@ -22,6 +22,7 @@
gfx::NativeViewAccessible AccessibilityGetNativeViewAccessible() override;
gfx::NativeViewAccessible AccessibilityGetNativeViewAccessibleForWindow()
override;
+ WebContents* AccessibilityWebContents() override;
bool AccessibilityIsMainFrame() const override;
bool got_fatal_error() const;
diff --git a/content/browser/frame_host/frame_tree_node.cc b/content/browser/frame_host/frame_tree_node.cc
index d38d9d0..f367008b 100644
--- a/content/browser/frame_host/frame_tree_node.cc
+++ b/content/browser/frame_host/frame_tree_node.cc
@@ -516,6 +516,8 @@
// Notify accessibility that the user is no longer trying to load or
// reload a page.
+ // TODO(domfarolino): Remove this in favor of notifying via the delegate's
+ // DidStopLoading() above.
BrowserAccessibilityManager* manager =
current_frame_host()->browser_accessibility_manager();
if (manager)
diff --git a/content/browser/frame_host/render_frame_host_impl.cc b/content/browser/frame_host/render_frame_host_impl.cc
index 8da26c2..7437f47 100644
--- a/content/browser/frame_host/render_frame_host_impl.cc
+++ b/content/browser/frame_host/render_frame_host_impl.cc
@@ -1636,6 +1636,10 @@
return nullptr;
}
+WebContents* RenderFrameHostImpl::AccessibilityWebContents() {
+ return delegate()->GetAsWebContents();
+}
+
bool RenderFrameHostImpl::AccessibilityIsMainFrame() const {
return frame_tree_node()->IsMainFrame();
}
diff --git a/content/browser/frame_host/render_frame_host_impl.h b/content/browser/frame_host/render_frame_host_impl.h
index 18ab36f8..72aea75c 100644
--- a/content/browser/frame_host/render_frame_host_impl.h
+++ b/content/browser/frame_host/render_frame_host_impl.h
@@ -309,6 +309,7 @@
gfx::NativeViewAccessible AccessibilityGetNativeViewAccessible() override;
gfx::NativeViewAccessible AccessibilityGetNativeViewAccessibleForWindow()
override;
+ WebContents* AccessibilityWebContents() override;
bool AccessibilityIsMainFrame() const override;
// RenderProcessHostObserver implementation.
diff --git a/content/browser/renderer_host/render_widget_host_view_android.cc b/content/browser/renderer_host/render_widget_host_view_android.cc
index 6053638..a798653 100644
--- a/content/browser/renderer_host/render_widget_host_view_android.cc
+++ b/content/browser/renderer_host/render_widget_host_view_android.cc
@@ -1851,8 +1851,9 @@
}
BrowserAccessibilityManager*
- RenderWidgetHostViewAndroid::CreateBrowserAccessibilityManager(
- BrowserAccessibilityDelegate* delegate, bool for_root_frame) {
+RenderWidgetHostViewAndroid::CreateBrowserAccessibilityManager(
+ BrowserAccessibilityDelegate* delegate,
+ bool for_root_frame) {
return new BrowserAccessibilityManagerAndroid(
BrowserAccessibilityManagerAndroid::GetEmptyDocument(),
for_root_frame && host() ? GetWebContentsAccessibilityAndroid() : nullptr,
diff --git a/content/browser/renderer_host/render_widget_host_view_android.h b/content/browser/renderer_host/render_widget_host_view_android.h
index 7089548..6c689f62 100644
--- a/content/browser/renderer_host/render_widget_host_view_android.h
+++ b/content/browser/renderer_host/render_widget_host_view_android.h
@@ -149,7 +149,8 @@
bool down) override;
void FallbackCursorModeSetCursorVisibility(bool visible) override;
BrowserAccessibilityManager* CreateBrowserAccessibilityManager(
- BrowserAccessibilityDelegate* delegate, bool for_root_frame) override;
+ BrowserAccessibilityDelegate* delegate,
+ bool for_root_frame) override;
bool LockMouse() override;
void UnlockMouse() override;
void DidCreateNewRendererCompositorFrameSink(
diff --git a/content/browser/renderer_host/render_widget_host_view_aura.cc b/content/browser/renderer_host/render_widget_host_view_aura.cc
index 1befcdd..aec7d21 100644
--- a/content/browser/renderer_host/render_widget_host_view_aura.cc
+++ b/content/browser/renderer_host/render_widget_host_view_aura.cc
@@ -1122,7 +1122,8 @@
BrowserAccessibilityManager*
RenderWidgetHostViewAura::CreateBrowserAccessibilityManager(
- BrowserAccessibilityDelegate* delegate, bool for_root_frame) {
+ BrowserAccessibilityDelegate* delegate,
+ bool for_root_frame) {
BrowserAccessibilityManager* manager = nullptr;
#if defined(OS_WIN)
manager = new BrowserAccessibilityManagerWin(
diff --git a/content/browser/renderer_host/render_widget_host_view_aura.h b/content/browser/renderer_host/render_widget_host_view_aura.h
index 50b2161..86a98b25 100644
--- a/content/browser/renderer_host/render_widget_host_view_aura.h
+++ b/content/browser/renderer_host/render_widget_host_view_aura.h
@@ -155,7 +155,8 @@
InputEventAckState FilterChildGestureEvent(
const blink::WebGestureEvent& gesture_event) override;
BrowserAccessibilityManager* CreateBrowserAccessibilityManager(
- BrowserAccessibilityDelegate* delegate, bool for_root_frame) override;
+ BrowserAccessibilityDelegate* delegate,
+ bool for_root_frame) override;
gfx::AcceleratedWidget AccessibilityGetAcceleratedWidget() override;
gfx::NativeViewAccessible AccessibilityGetNativeViewAccessible() override;
void SetMainFrameAXTreeID(ui::AXTreeID id) override;
diff --git a/content/browser/renderer_host/render_widget_host_view_base.cc b/content/browser/renderer_host/render_widget_host_view_base.cc
index 5a3b90ec..f960f6c 100644
--- a/content/browser/renderer_host/render_widget_host_view_base.cc
+++ b/content/browser/renderer_host/render_widget_host_view_base.cc
@@ -459,7 +459,8 @@
BrowserAccessibilityManager*
RenderWidgetHostViewBase::CreateBrowserAccessibilityManager(
- BrowserAccessibilityDelegate* delegate, bool for_root_frame) {
+ BrowserAccessibilityDelegate* delegate,
+ bool for_root_frame) {
NOTREACHED();
return nullptr;
}
diff --git a/content/browser/renderer_host/render_widget_host_view_base.h b/content/browser/renderer_host/render_widget_host_view_base.h
index a5f11d9..11cd489 100644
--- a/content/browser/renderer_host/render_widget_host_view_base.h
+++ b/content/browser/renderer_host/render_widget_host_view_base.h
@@ -270,7 +270,8 @@
// suitable for the root frame, which may be linked to its native
// window container.
virtual BrowserAccessibilityManager* CreateBrowserAccessibilityManager(
- BrowserAccessibilityDelegate* delegate, bool for_root_frame);
+ BrowserAccessibilityDelegate* delegate,
+ bool for_root_frame);
virtual void AccessibilityShowMenu(const gfx::Point& point);
virtual gfx::AcceleratedWidget AccessibilityGetAcceleratedWidget();
diff --git a/content/browser/renderer_host/render_widget_host_view_mac.h b/content/browser/renderer_host/render_widget_host_view_mac.h
index 21a19bd..0eeacea 100644
--- a/content/browser/renderer_host/render_widget_host_view_mac.h
+++ b/content/browser/renderer_host/render_widget_host_view_mac.h
@@ -159,7 +159,8 @@
void ResetFallbackToFirstNavigationSurface() override;
bool RequestRepaintForTesting() override;
BrowserAccessibilityManager* CreateBrowserAccessibilityManager(
- BrowserAccessibilityDelegate* delegate, bool for_root_frame) override;
+ BrowserAccessibilityDelegate* delegate,
+ bool for_root_frame) override;
gfx::NativeViewAccessible AccessibilityGetNativeViewAccessible() override;
gfx::NativeViewAccessible AccessibilityGetNativeViewAccessibleForWindow()
override;
diff --git a/content/browser/renderer_host/render_widget_host_view_mac.mm b/content/browser/renderer_host/render_widget_host_view_mac.mm
index 6845707..ac6ce63 100644
--- a/content/browser/renderer_host/render_widget_host_view_mac.mm
+++ b/content/browser/renderer_host/render_widget_host_view_mac.mm
@@ -1382,8 +1382,9 @@
}
BrowserAccessibilityManager*
- RenderWidgetHostViewMac::CreateBrowserAccessibilityManager(
- BrowserAccessibilityDelegate* delegate, bool for_root_frame) {
+RenderWidgetHostViewMac::CreateBrowserAccessibilityManager(
+ BrowserAccessibilityDelegate* delegate,
+ bool for_root_frame) {
return new BrowserAccessibilityManagerMac(
BrowserAccessibilityManagerMac::GetEmptyDocument(), delegate);
}
diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc
index 0a3d626..37e9397c 100644
--- a/content/browser/web_contents/web_contents_impl.cc
+++ b/content/browser/web_contents/web_contents_impl.cc
@@ -4327,6 +4327,8 @@
display_cutout_host_impl_->DidFinishNavigation(navigation_handle);
if (navigation_handle->HasCommitted()) {
+ // TODO(domfarolino, dmazzoni): Do this using WebContentsObserver. See
+ // https://crbug.com/981271.
BrowserAccessibilityManager* manager =
static_cast<RenderFrameHostImpl*>(
navigation_handle->GetRenderFrameHost())
@@ -5819,8 +5821,8 @@
// Notify accessibility that the user is navigating away from the
// current document.
- //
- // TODO(dmazzoni): do this using a WebContentsObserver.
+ // TODO(domfarolino, dmazzoni): Do this using WebContentsObserver. See
+ // https://crbug.com/981271.
BrowserAccessibilityManager* manager =
frame_tree_node->current_frame_host()->browser_accessibility_manager();
if (manager)