Chromium Code Reviews| 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 b02984b877e81175d44226033125e7bff05f4c42..89f3dc62348df4274346bc06c22cfc00743a81ef 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" |
| @@ -70,6 +72,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" |
| @@ -229,6 +232,11 @@ void RunRenderFrameDeleted( |
| RenderFrameDeleted(render_frame_host)); |
| } |
| +void SetAccessibilityModeOnFrame(AccessibilityMode mode, |
| + RenderFrameHost* frame_host) { |
| + static_cast<RenderFrameHostImpl*>(frame_host)->SetAccessibilityMode(mode); |
| +} |
| + |
| } // namespace |
| WebContents* WebContents::Create(const WebContents::CreateParams& params) { |
| @@ -352,7 +360,9 @@ WebContentsImpl::WebContentsImpl( |
| render_view_message_source_(NULL), |
| fullscreen_widget_routing_id_(MSG_ROUTING_NONE), |
| is_subframe_(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( |
| @@ -447,6 +457,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(); |
| } |
| @@ -685,6 +719,24 @@ WebContentsView* WebContentsImpl::GetView() const { |
| return view_.get(); |
| } |
| +void WebContentsImpl::SetAccessibilityMode(AccessibilityMode mode) { |
| + if (mode == accessibility_mode_) |
| + return; |
| + |
| + accessibility_mode_ = mode; |
| + ForEachFrame(base::Bind(&SetAccessibilityModeOnFrame, mode)); |
|
ncarter (slow)
2014/05/14 23:56:23
ForEachFrame does not run on all RenderFrameHosts
dmazzoni
2014/05/19 07:25:01
I added a public ForEachFrameAndPendingFrame and u
|
| +} |
| + |
| +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()-> |
| @@ -733,12 +785,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 |
| @@ -1263,12 +1328,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(); |
| @@ -1666,6 +1725,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( |
| @@ -3181,6 +3244,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_; |
| } |