| 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 0471f0bc36e3c7fa8c619e0a01e04e2915c96243..5c9cd720bd74ca281485fdac701c09db6cf00c95 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 @@
|
| 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());
|
| @@ -226,6 +239,11 @@
|
| ->render_manager()
|
| ->GetRenderWidgetHostView();
|
| set->insert(rwhv);
|
| +}
|
| +
|
| +void SetAccessibilityModeOnFrame(AccessibilityMode mode,
|
| + RenderFrameHost* frame_host) {
|
| + static_cast<RenderFrameHostImpl*>(frame_host)->SetAccessibilityMode(mode);
|
| }
|
|
|
| } // namespace
|
| @@ -356,7 +374,9 @@
|
| 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(
|
| @@ -453,6 +473,30 @@
|
| }
|
| new_contents->Init(params);
|
| 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() {
|
| @@ -680,6 +724,29 @@
|
| 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 @@
|
| 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 @@
|
| 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 @@
|
| return &frame_tree_;
|
| }
|
|
|
| +AccessibilityMode WebContentsImpl::GetAccessibilityMode() const {
|
| + return accessibility_mode_;
|
| +}
|
| +
|
| void WebContentsImpl::AccessibilityEventReceived(
|
| const std::vector<AXEventNotificationDetails>& details) {
|
| FOR_EACH_OBSERVER(
|
| @@ -1730,6 +1808,18 @@
|
| touch_emulation_enabled_ = enabled;
|
| if (view_)
|
| 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) {
|
| @@ -3205,6 +3295,7 @@
|
| 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 @@
|
| 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 @@
|
| 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) {
|
|
|