OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "content/browser/frame_host/render_frame_host_impl.h" | 5 #include "content/browser/frame_host/render_frame_host_impl.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <utility> | 8 #include <utility> |
9 | 9 |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
(...skipping 1960 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1971 // reset but this message includes a reset token. | 1971 // reset but this message includes a reset token. |
1972 if (accessibility_reset_token_ != reset_token) { | 1972 if (accessibility_reset_token_ != reset_token) { |
1973 Send(new AccessibilityMsg_Events_ACK(routing_id_, ack_token)); | 1973 Send(new AccessibilityMsg_Events_ACK(routing_id_, ack_token)); |
1974 return; | 1974 return; |
1975 } | 1975 } |
1976 accessibility_reset_token_ = 0; | 1976 accessibility_reset_token_ = 0; |
1977 | 1977 |
1978 RenderWidgetHostViewBase* view = GetViewForAccessibility(); | 1978 RenderWidgetHostViewBase* view = GetViewForAccessibility(); |
1979 | 1979 |
1980 AccessibilityMode accessibility_mode = delegate_->GetAccessibilityMode(); | 1980 AccessibilityMode accessibility_mode = delegate_->GetAccessibilityMode(); |
1981 if ((accessibility_mode != AccessibilityModeOff) && view && is_active()) { | 1981 if (!accessibility_mode.is_mode_off() && view && is_active()) { |
1982 if (accessibility_mode & ACCESSIBILITY_MODE_FLAG_NATIVE_APIS) | 1982 if (accessibility_mode.has_mode(AccessibilityMode::kNativeAPIs)) |
1983 GetOrCreateBrowserAccessibilityManager(); | 1983 GetOrCreateBrowserAccessibilityManager(); |
1984 | 1984 |
1985 std::vector<AXEventNotificationDetails> details; | 1985 std::vector<AXEventNotificationDetails> details; |
1986 details.reserve(params.size()); | 1986 details.reserve(params.size()); |
1987 for (size_t i = 0; i < params.size(); ++i) { | 1987 for (size_t i = 0; i < params.size(); ++i) { |
1988 const AccessibilityHostMsg_EventParams& param = params[i]; | 1988 const AccessibilityHostMsg_EventParams& param = params[i]; |
1989 AXEventNotificationDetails detail; | 1989 AXEventNotificationDetails detail; |
1990 detail.event_type = param.event_type; | 1990 detail.event_type = param.event_type; |
1991 detail.id = param.id; | 1991 detail.id = param.id; |
1992 detail.ax_tree_id = GetAXTreeID(); | 1992 detail.ax_tree_id = GetAXTreeID(); |
1993 detail.event_from = param.event_from; | 1993 detail.event_from = param.event_from; |
1994 if (param.update.has_tree_data) { | 1994 if (param.update.has_tree_data) { |
1995 detail.update.has_tree_data = true; | 1995 detail.update.has_tree_data = true; |
1996 ax_content_tree_data_ = param.update.tree_data; | 1996 ax_content_tree_data_ = param.update.tree_data; |
1997 AXContentTreeDataToAXTreeData(&detail.update.tree_data); | 1997 AXContentTreeDataToAXTreeData(&detail.update.tree_data); |
1998 } | 1998 } |
1999 detail.update.root_id = param.update.root_id; | 1999 detail.update.root_id = param.update.root_id; |
2000 detail.update.node_id_to_clear = param.update.node_id_to_clear; | 2000 detail.update.node_id_to_clear = param.update.node_id_to_clear; |
2001 detail.update.nodes.resize(param.update.nodes.size()); | 2001 detail.update.nodes.resize(param.update.nodes.size()); |
2002 for (size_t i = 0; i < param.update.nodes.size(); ++i) { | 2002 for (size_t i = 0; i < param.update.nodes.size(); ++i) { |
2003 AXContentNodeDataToAXNodeData(param.update.nodes[i], | 2003 AXContentNodeDataToAXNodeData(param.update.nodes[i], |
2004 &detail.update.nodes[i]); | 2004 &detail.update.nodes[i]); |
2005 } | 2005 } |
2006 details.push_back(detail); | 2006 details.push_back(detail); |
2007 } | 2007 } |
2008 | 2008 |
2009 if (accessibility_mode & ACCESSIBILITY_MODE_FLAG_NATIVE_APIS) { | 2009 if (accessibility_mode.has_mode(AccessibilityMode::kNativeAPIs)) { |
2010 if (browser_accessibility_manager_) | 2010 if (browser_accessibility_manager_) |
2011 browser_accessibility_manager_->OnAccessibilityEvents(details); | 2011 browser_accessibility_manager_->OnAccessibilityEvents(details); |
2012 } | 2012 } |
2013 | 2013 |
2014 delegate_->AccessibilityEventReceived(details); | 2014 delegate_->AccessibilityEventReceived(details); |
2015 | 2015 |
2016 // For testing only. | 2016 // For testing only. |
2017 if (!accessibility_testing_callback_.is_null()) { | 2017 if (!accessibility_testing_callback_.is_null()) { |
2018 for (size_t i = 0; i < details.size(); i++) { | 2018 for (size_t i = 0; i < details.size(); i++) { |
2019 const AXEventNotificationDetails& detail = details[i]; | 2019 const AXEventNotificationDetails& detail = details[i]; |
(...skipping 24 matching lines...) Expand all Loading... |
2044 | 2044 |
2045 void RenderFrameHostImpl::OnAccessibilityLocationChanges( | 2045 void RenderFrameHostImpl::OnAccessibilityLocationChanges( |
2046 const std::vector<AccessibilityHostMsg_LocationChangeParams>& params) { | 2046 const std::vector<AccessibilityHostMsg_LocationChangeParams>& params) { |
2047 if (accessibility_reset_token_) | 2047 if (accessibility_reset_token_) |
2048 return; | 2048 return; |
2049 | 2049 |
2050 RenderWidgetHostViewBase* view = static_cast<RenderWidgetHostViewBase*>( | 2050 RenderWidgetHostViewBase* view = static_cast<RenderWidgetHostViewBase*>( |
2051 render_view_host_->GetWidget()->GetView()); | 2051 render_view_host_->GetWidget()->GetView()); |
2052 if (view && is_active()) { | 2052 if (view && is_active()) { |
2053 AccessibilityMode accessibility_mode = delegate_->GetAccessibilityMode(); | 2053 AccessibilityMode accessibility_mode = delegate_->GetAccessibilityMode(); |
2054 if (accessibility_mode & ACCESSIBILITY_MODE_FLAG_NATIVE_APIS) { | 2054 if (accessibility_mode.has_mode(AccessibilityMode::kNativeAPIs)) { |
2055 BrowserAccessibilityManager* manager = | 2055 BrowserAccessibilityManager* manager = |
2056 GetOrCreateBrowserAccessibilityManager(); | 2056 GetOrCreateBrowserAccessibilityManager(); |
2057 if (manager) | 2057 if (manager) |
2058 manager->OnLocationChanges(params); | 2058 manager->OnLocationChanges(params); |
2059 } | 2059 } |
2060 | 2060 |
2061 // Send the updates to the automation extension API. | 2061 // Send the updates to the automation extension API. |
2062 std::vector<AXLocationChangeNotificationDetails> details; | 2062 std::vector<AXLocationChangeNotificationDetails> details; |
2063 details.reserve(params.size()); | 2063 details.reserve(params.size()); |
2064 for (size_t i = 0; i < params.size(); ++i) { | 2064 for (size_t i = 0; i < params.size(); ++i) { |
2065 const AccessibilityHostMsg_LocationChangeParams& param = params[i]; | 2065 const AccessibilityHostMsg_LocationChangeParams& param = params[i]; |
2066 AXLocationChangeNotificationDetails detail; | 2066 AXLocationChangeNotificationDetails detail; |
2067 detail.id = param.id; | 2067 detail.id = param.id; |
2068 detail.ax_tree_id = GetAXTreeID(); | 2068 detail.ax_tree_id = GetAXTreeID(); |
2069 detail.new_location = param.new_location; | 2069 detail.new_location = param.new_location; |
2070 details.push_back(detail); | 2070 details.push_back(detail); |
2071 } | 2071 } |
2072 delegate_->AccessibilityLocationChangesReceived(details); | 2072 delegate_->AccessibilityLocationChangesReceived(details); |
2073 } | 2073 } |
2074 } | 2074 } |
2075 | 2075 |
2076 void RenderFrameHostImpl::OnAccessibilityFindInPageResult( | 2076 void RenderFrameHostImpl::OnAccessibilityFindInPageResult( |
2077 const AccessibilityHostMsg_FindInPageResultParams& params) { | 2077 const AccessibilityHostMsg_FindInPageResultParams& params) { |
2078 AccessibilityMode accessibility_mode = delegate_->GetAccessibilityMode(); | 2078 AccessibilityMode accessibility_mode = delegate_->GetAccessibilityMode(); |
2079 if (accessibility_mode & ACCESSIBILITY_MODE_FLAG_NATIVE_APIS) { | 2079 if (accessibility_mode.has_mode(AccessibilityMode::kNativeAPIs)) { |
2080 BrowserAccessibilityManager* manager = | 2080 BrowserAccessibilityManager* manager = |
2081 GetOrCreateBrowserAccessibilityManager(); | 2081 GetOrCreateBrowserAccessibilityManager(); |
2082 if (manager) { | 2082 if (manager) { |
2083 manager->OnFindInPageResult( | 2083 manager->OnFindInPageResult( |
2084 params.request_id, params.match_index, params.start_id, | 2084 params.request_id, params.match_index, params.start_id, |
2085 params.start_offset, params.end_id, params.end_offset); | 2085 params.start_offset, params.end_id, params.end_offset); |
2086 } | 2086 } |
2087 } | 2087 } |
2088 } | 2088 } |
2089 | 2089 |
(...skipping 849 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2939 | 2939 |
2940 bool RenderFrameHostImpl::IsSameSiteInstance( | 2940 bool RenderFrameHostImpl::IsSameSiteInstance( |
2941 RenderFrameHostImpl* other_render_frame_host) { | 2941 RenderFrameHostImpl* other_render_frame_host) { |
2942 // As a sanity check, make sure the frame belongs to the same BrowserContext. | 2942 // As a sanity check, make sure the frame belongs to the same BrowserContext. |
2943 CHECK_EQ(GetSiteInstance()->GetBrowserContext(), | 2943 CHECK_EQ(GetSiteInstance()->GetBrowserContext(), |
2944 other_render_frame_host->GetSiteInstance()->GetBrowserContext()); | 2944 other_render_frame_host->GetSiteInstance()->GetBrowserContext()); |
2945 return GetSiteInstance() == other_render_frame_host->GetSiteInstance(); | 2945 return GetSiteInstance() == other_render_frame_host->GetSiteInstance(); |
2946 } | 2946 } |
2947 | 2947 |
2948 void RenderFrameHostImpl::UpdateAccessibilityMode() { | 2948 void RenderFrameHostImpl::UpdateAccessibilityMode() { |
2949 AccessibilityMode accessibility_mode = delegate_->GetAccessibilityMode(); | 2949 int accessibility_mode_raw = delegate_->GetAccessibilityMode().mode(); |
2950 Send(new FrameMsg_SetAccessibilityMode(routing_id_, accessibility_mode)); | 2950 Send(new FrameMsg_SetAccessibilityMode(routing_id_, accessibility_mode_raw)); |
2951 } | 2951 } |
2952 | 2952 |
2953 void RenderFrameHostImpl::RequestAXTreeSnapshot( | 2953 void RenderFrameHostImpl::RequestAXTreeSnapshot( |
2954 AXTreeSnapshotCallback callback) { | 2954 AXTreeSnapshotCallback callback) { |
2955 static int next_id = 1; | 2955 static int next_id = 1; |
2956 int callback_id = next_id++; | 2956 int callback_id = next_id++; |
2957 Send(new AccessibilityMsg_SnapshotTree(routing_id_, callback_id)); | 2957 Send(new AccessibilityMsg_SnapshotTree(routing_id_, callback_id)); |
2958 ax_tree_snapshot_callbacks_.insert(std::make_pair(callback_id, callback)); | 2958 ax_tree_snapshot_callbacks_.insert(std::make_pair(callback_id, callback)); |
2959 } | 2959 } |
2960 | 2960 |
2961 void RenderFrameHostImpl::SetAccessibilityCallbackForTesting( | 2961 void RenderFrameHostImpl::SetAccessibilityCallbackForTesting( |
2962 const base::Callback<void(RenderFrameHostImpl*, ui::AXEvent, int)>& | 2962 const base::Callback<void(RenderFrameHostImpl*, ui::AXEvent, int)>& |
2963 callback) { | 2963 callback) { |
2964 accessibility_testing_callback_ = callback; | 2964 accessibility_testing_callback_ = callback; |
2965 } | 2965 } |
2966 | 2966 |
2967 void RenderFrameHostImpl::UpdateAXTreeData() { | 2967 void RenderFrameHostImpl::UpdateAXTreeData() { |
2968 AccessibilityMode accessibility_mode = delegate_->GetAccessibilityMode(); | 2968 AccessibilityMode accessibility_mode = delegate_->GetAccessibilityMode(); |
2969 if (accessibility_mode == AccessibilityModeOff || !is_active()) { | 2969 if (accessibility_mode.is_mode_off() || !is_active()) { |
2970 return; | 2970 return; |
2971 } | 2971 } |
2972 | 2972 |
2973 std::vector<AXEventNotificationDetails> details; | 2973 std::vector<AXEventNotificationDetails> details; |
2974 details.reserve(1U); | 2974 details.reserve(1U); |
2975 AXEventNotificationDetails detail; | 2975 AXEventNotificationDetails detail; |
2976 detail.ax_tree_id = GetAXTreeID(); | 2976 detail.ax_tree_id = GetAXTreeID(); |
2977 detail.update.has_tree_data = true; | 2977 detail.update.has_tree_data = true; |
2978 AXContentTreeDataToAXTreeData(&detail.update.tree_data); | 2978 AXContentTreeDataToAXTreeData(&detail.update.tree_data); |
2979 details.push_back(detail); | 2979 details.push_back(detail); |
(...skipping 23 matching lines...) Expand all Loading... |
3003 bool is_root_frame = !frame_tree_node()->parent(); | 3003 bool is_root_frame = !frame_tree_node()->parent(); |
3004 browser_accessibility_manager_.reset( | 3004 browser_accessibility_manager_.reset( |
3005 view->CreateBrowserAccessibilityManager(this, is_root_frame)); | 3005 view->CreateBrowserAccessibilityManager(this, is_root_frame)); |
3006 } | 3006 } |
3007 return browser_accessibility_manager_.get(); | 3007 return browser_accessibility_manager_.get(); |
3008 } | 3008 } |
3009 | 3009 |
3010 void RenderFrameHostImpl::ActivateFindInPageResultForAccessibility( | 3010 void RenderFrameHostImpl::ActivateFindInPageResultForAccessibility( |
3011 int request_id) { | 3011 int request_id) { |
3012 AccessibilityMode accessibility_mode = delegate_->GetAccessibilityMode(); | 3012 AccessibilityMode accessibility_mode = delegate_->GetAccessibilityMode(); |
3013 if (accessibility_mode & ACCESSIBILITY_MODE_FLAG_NATIVE_APIS) { | 3013 if (accessibility_mode.has_mode(AccessibilityMode::kNativeAPIs)) { |
3014 BrowserAccessibilityManager* manager = | 3014 BrowserAccessibilityManager* manager = |
3015 GetOrCreateBrowserAccessibilityManager(); | 3015 GetOrCreateBrowserAccessibilityManager(); |
3016 if (manager) | 3016 if (manager) |
3017 manager->ActivateFindInPageResult(request_id); | 3017 manager->ActivateFindInPageResult(request_id); |
3018 } | 3018 } |
3019 } | 3019 } |
3020 | 3020 |
3021 void RenderFrameHostImpl::InsertVisualStateCallback( | 3021 void RenderFrameHostImpl::InsertVisualStateCallback( |
3022 const VisualStateCallback& callback) { | 3022 const VisualStateCallback& callback) { |
3023 static uint64_t next_id = 1; | 3023 static uint64_t next_id = 1; |
(...skipping 464 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3488 GetUserData(kRenderFrameHostAndroidKey)); | 3488 GetUserData(kRenderFrameHostAndroidKey)); |
3489 if (!render_frame_host_android) { | 3489 if (!render_frame_host_android) { |
3490 render_frame_host_android = new RenderFrameHostAndroid(this); | 3490 render_frame_host_android = new RenderFrameHostAndroid(this); |
3491 SetUserData(kRenderFrameHostAndroidKey, render_frame_host_android); | 3491 SetUserData(kRenderFrameHostAndroidKey, render_frame_host_android); |
3492 } | 3492 } |
3493 return render_frame_host_android->GetJavaObject(); | 3493 return render_frame_host_android->GetJavaObject(); |
3494 } | 3494 } |
3495 #endif | 3495 #endif |
3496 | 3496 |
3497 } // namespace content | 3497 } // namespace content |
OLD | NEW |