Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(249)

Unified Diff: content/browser/web_contents/web_contents_impl.cc

Issue 273423004: Migrate accessibility from RenderView to RenderFrame. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/browser/web_contents/web_contents_impl.h ('k') | content/common/accessibility_mode_enums.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/browser/web_contents/web_contents_impl.cc
diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc
index 85749836e370145c26ae24632890c2f22bd3dd14..5e8942bc8e6cef11b7a49b614865f634d28f8c19 100644
--- a/content/browser/web_contents/web_contents_impl.cc
+++ b/content/browser/web_contents/web_contents_impl.cc
@@ -18,6 +18,8 @@
#include "base/strings/string_util.h"
#include "base/strings/utf_string_conversions.h"
#include "base/time/time.h"
+#include "content/browser/accessibility/accessibility_mode_helper.h"
+#include "content/browser/accessibility/browser_accessibility_state_impl.h"
#include "content/browser/browser_plugin/browser_plugin_embedder.h"
#include "content/browser/browser_plugin/browser_plugin_guest.h"
#include "content/browser/child_process_security_policy_impl.h"
@@ -72,6 +74,7 @@
#include "content/public/browser/navigation_details.h"
#include "content/public/browser/notification_details.h"
#include "content/public/browser/notification_service.h"
+#include "content/public/browser/render_widget_host_iterator.h"
#include "content/public/browser/resource_request_details.h"
#include "content/public/browser/storage_partition.h"
#include "content/public/browser/user_metrics.h"
@@ -213,6 +216,16 @@ bool ForEachFrameInternal(
return true;
}
+bool ForEachPendingFrameInternal(
+ const base::Callback<void(RenderFrameHost*)>& on_frame,
+ FrameTreeNode* node) {
+ RenderFrameHost* pending_frame_host =
+ node->render_manager()->pending_frame_host();
+ if (pending_frame_host)
+ on_frame.Run(pending_frame_host);
+ return true;
+}
+
void SendToAllFramesInternal(IPC::Message* message, RenderFrameHost* rfh) {
IPC::Message* message_copy = new IPC::Message(*message);
message_copy->set_routing_id(rfh->GetRoutingID());
@@ -228,6 +241,11 @@ void AddRenderWidgetHostViewToSet(std::set<RenderWidgetHostView*>* set,
set->insert(rwhv);
}
+void SetAccessibilityModeOnFrame(AccessibilityMode mode,
+ RenderFrameHost* frame_host) {
+ static_cast<RenderFrameHostImpl*>(frame_host)->SetAccessibilityMode(mode);
+}
+
} // namespace
WebContents* WebContents::Create(const WebContents::CreateParams& params) {
@@ -356,7 +374,9 @@ WebContentsImpl::WebContentsImpl(
fullscreen_widget_had_focus_at_shutdown_(false),
is_subframe_(false),
touch_emulation_enabled_(false),
- last_dialog_suppressed_(false) {
+ last_dialog_suppressed_(false),
+ accessibility_mode_(
+ BrowserAccessibilityStateImpl::GetInstance()->accessibility_mode()) {
for (size_t i = 0; i < g_created_callbacks.Get().size(); i++)
g_created_callbacks.Get().at(i).Run(this);
frame_tree_.SetFrameRemoveListener(
@@ -455,6 +475,30 @@ WebContentsImpl* WebContentsImpl::CreateWithOpener(
return new_contents;
}
+// static
+std::vector<WebContentsImpl*> WebContentsImpl::GetAllWebContents() {
+ std::vector<WebContentsImpl*> result;
+ scoped_ptr<RenderWidgetHostIterator> widgets(
+ RenderWidgetHostImpl::GetRenderWidgetHosts());
+ std::set<WebContentsImpl*> web_contents_set;
+ while (RenderWidgetHost* rwh = widgets->GetNextHost()) {
+ if (!rwh->IsRenderView())
+ continue;
+ RenderViewHost* rvh = RenderViewHost::From(rwh);
+ if (!rvh)
+ continue;
+ WebContents* web_contents = WebContents::FromRenderViewHost(rvh);
+ if (!web_contents)
+ continue;
+ WebContentsImpl* wci = static_cast<WebContentsImpl*>(web_contents);
+ if (web_contents_set.find(wci) == web_contents_set.end()) {
+ web_contents_set.insert(wci);
+ result.push_back(wci);
+ }
+ }
+ return result;
+}
+
RenderFrameHostManager* WebContentsImpl::GetRenderManagerForTesting() {
return GetRenderManager();
}
@@ -680,6 +724,29 @@ WebContentsView* WebContentsImpl::GetView() const {
return view_.get();
}
+void WebContentsImpl::SetAccessibilityMode(AccessibilityMode mode) {
+ if (mode == accessibility_mode_)
+ return;
+
+ accessibility_mode_ = mode;
+ frame_tree_.ForEach(
+ base::Bind(&ForEachFrameInternal,
+ base::Bind(&SetAccessibilityModeOnFrame, mode)));
+ frame_tree_.ForEach(
+ base::Bind(&ForEachPendingFrameInternal,
+ base::Bind(&SetAccessibilityModeOnFrame, mode)));
+}
+
+void WebContentsImpl::AddAccessibilityMode(AccessibilityMode mode) {
+ SetAccessibilityMode(
+ content::AddAccessibilityModeTo(accessibility_mode_, mode));
+}
+
+void WebContentsImpl::RemoveAccessibilityMode(AccessibilityMode mode) {
+ SetAccessibilityMode(
+ content::RemoveAccessibilityModeFrom(accessibility_mode_, mode));
+}
+
WebUI* WebContentsImpl::CreateWebUI(const GURL& url) {
WebUIImpl* web_ui = new WebUIImpl(this);
WebUIController* controller = WebUIControllerFactoryRegistry::GetInstance()->
@@ -728,12 +795,25 @@ const std::string& WebContentsImpl::GetUserAgentOverride() const {
return renderer_preferences_.user_agent_override;
}
+void WebContentsImpl::EnableTreeOnlyAccessibilityMode() {
+ AddAccessibilityMode(AccessibilityModeTreeOnly);
+}
+
+bool WebContentsImpl::IsTreeOnlyAccessibilityModeForTesting() const {
+ return accessibility_mode_ == AccessibilityModeTreeOnly;
+}
+
+bool WebContentsImpl::IsFullAccessibilityModeForTesting() const {
+ return accessibility_mode_ == AccessibilityModeComplete;
+}
+
#if defined(OS_WIN)
void WebContentsImpl::SetParentNativeViewAccessible(
gfx::NativeViewAccessible accessible_parent) {
accessible_parent_ = accessible_parent;
- if (GetRenderViewHost())
- GetRenderViewHostImpl()->SetParentNativeViewAccessible(accessible_parent);
+ RenderFrameHostImpl* rfh = static_cast<RenderFrameHostImpl*>(GetMainFrame());
+ if (rfh)
+ rfh->SetParentNativeViewAccessible(accessible_parent);
}
#endif
@@ -1294,12 +1374,6 @@ bool WebContentsImpl::HandleGestureEvent(
return false;
}
-#if defined(OS_WIN)
-gfx::NativeViewAccessible WebContentsImpl::GetParentNativeViewAccessible() {
- return accessible_parent_;
-}
-#endif
-
void WebContentsImpl::HandleMouseDown() {
if (delegate_)
delegate_->HandleMouseDown();
@@ -1695,6 +1769,10 @@ FrameTree* WebContentsImpl::GetFrameTree() {
return &frame_tree_;
}
+AccessibilityMode WebContentsImpl::GetAccessibilityMode() const {
+ return accessibility_mode_;
+}
+
void WebContentsImpl::AccessibilityEventReceived(
const std::vector<AXEventNotificationDetails>& details) {
FOR_EACH_OBSERVER(
@@ -1732,6 +1810,18 @@ void WebContentsImpl::OnTouchEmulationEnabled(bool enabled) {
view_->SetOverscrollControllerEnabled(CanOverscrollContent());
}
+BrowserAccessibilityManager*
+ WebContentsImpl::GetRootBrowserAccessibilityManager() {
+ RenderFrameHostImpl* rfh = static_cast<RenderFrameHostImpl*>(GetMainFrame());
+ return rfh ? rfh->browser_accessibility_manager() : NULL;
+}
+
+BrowserAccessibilityManager*
+ WebContentsImpl::GetOrCreateRootBrowserAccessibilityManager() {
+ RenderFrameHostImpl* rfh = static_cast<RenderFrameHostImpl*>(GetMainFrame());
+ return rfh ? rfh->GetOrCreateBrowserAccessibilityManager() : NULL;
+}
+
void WebContentsImpl::UpdatePreferredSize(const gfx::Size& pref_size) {
const gfx::Size old_size = GetPreferredSize();
preferred_size_ = pref_size;
@@ -3205,6 +3295,7 @@ void WebContentsImpl::RenderFrameCreated(RenderFrameHost* render_frame_host) {
FOR_EACH_OBSERVER(WebContentsObserver,
observers_,
RenderFrameCreated(render_frame_host));
+ SetAccessibilityModeOnFrame(accessibility_mode_, render_frame_host);
}
void WebContentsImpl::RenderFrameDeleted(RenderFrameHost* render_frame_host) {
@@ -3327,6 +3418,12 @@ bool WebContentsImpl::IsNeverVisible() {
return delegate_->IsNeverVisible(this);
}
+#if defined(OS_WIN)
+gfx::NativeViewAccessible WebContentsImpl::GetParentNativeViewAccessible() {
+ return accessible_parent_;
+}
+#endif
+
RenderViewHostDelegateView* WebContentsImpl::GetDelegateView() {
return render_view_host_delegate_view_;
}
@@ -3385,6 +3482,7 @@ void WebContentsImpl::RenderViewCreated(RenderViewHost* render_view_host) {
RenderFrameHost* main_frame = render_view_host->GetMainFrame();
FOR_EACH_OBSERVER(
WebContentsObserver, observers_, RenderFrameCreated(main_frame));
+ SetAccessibilityModeOnFrame(accessibility_mode_, main_frame);
}
void WebContentsImpl::RenderViewReady(RenderViewHost* rvh) {
« no previous file with comments | « content/browser/web_contents/web_contents_impl.h ('k') | content/common/accessibility_mode_enums.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698