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 1983 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1994 // reset but this message includes a reset token. | 1994 // reset but this message includes a reset token. |
1995 if (accessibility_reset_token_ != reset_token) { | 1995 if (accessibility_reset_token_ != reset_token) { |
1996 Send(new AccessibilityMsg_Events_ACK(routing_id_, ack_token)); | 1996 Send(new AccessibilityMsg_Events_ACK(routing_id_, ack_token)); |
1997 return; | 1997 return; |
1998 } | 1998 } |
1999 accessibility_reset_token_ = 0; | 1999 accessibility_reset_token_ = 0; |
2000 | 2000 |
2001 RenderWidgetHostViewBase* view = GetViewForAccessibility(); | 2001 RenderWidgetHostViewBase* view = GetViewForAccessibility(); |
2002 | 2002 |
2003 AccessibilityMode accessibility_mode = delegate_->GetAccessibilityMode(); | 2003 AccessibilityMode accessibility_mode = delegate_->GetAccessibilityMode(); |
2004 if ((accessibility_mode != AccessibilityModeOff) && view && is_active()) { | 2004 if (accessibility_mode != AccessibilityMode::OFF && view && is_active()) { |
2005 if (accessibility_mode & ACCESSIBILITY_MODE_FLAG_NATIVE_APIS) | 2005 if (accessibility_mode.has(AccessibilityMode::NATIVE_APIS)) |
2006 GetOrCreateBrowserAccessibilityManager(); | 2006 GetOrCreateBrowserAccessibilityManager(); |
2007 | 2007 |
2008 std::vector<AXEventNotificationDetails> details; | 2008 std::vector<AXEventNotificationDetails> details; |
2009 details.reserve(params.size()); | 2009 details.reserve(params.size()); |
2010 for (size_t i = 0; i < params.size(); ++i) { | 2010 for (size_t i = 0; i < params.size(); ++i) { |
2011 const AccessibilityHostMsg_EventParams& param = params[i]; | 2011 const AccessibilityHostMsg_EventParams& param = params[i]; |
2012 AXEventNotificationDetails detail; | 2012 AXEventNotificationDetails detail; |
2013 detail.event_type = param.event_type; | 2013 detail.event_type = param.event_type; |
2014 detail.id = param.id; | 2014 detail.id = param.id; |
2015 detail.ax_tree_id = GetAXTreeID(); | 2015 detail.ax_tree_id = GetAXTreeID(); |
2016 detail.event_from = param.event_from; | 2016 detail.event_from = param.event_from; |
2017 if (param.update.has_tree_data) { | 2017 if (param.update.has_tree_data) { |
2018 detail.update.has_tree_data = true; | 2018 detail.update.has_tree_data = true; |
2019 ax_content_tree_data_ = param.update.tree_data; | 2019 ax_content_tree_data_ = param.update.tree_data; |
2020 AXContentTreeDataToAXTreeData(&detail.update.tree_data); | 2020 AXContentTreeDataToAXTreeData(&detail.update.tree_data); |
2021 } | 2021 } |
2022 detail.update.root_id = param.update.root_id; | 2022 detail.update.root_id = param.update.root_id; |
2023 detail.update.node_id_to_clear = param.update.node_id_to_clear; | 2023 detail.update.node_id_to_clear = param.update.node_id_to_clear; |
2024 detail.update.nodes.resize(param.update.nodes.size()); | 2024 detail.update.nodes.resize(param.update.nodes.size()); |
2025 for (size_t i = 0; i < param.update.nodes.size(); ++i) { | 2025 for (size_t i = 0; i < param.update.nodes.size(); ++i) { |
2026 AXContentNodeDataToAXNodeData(param.update.nodes[i], | 2026 AXContentNodeDataToAXNodeData(param.update.nodes[i], |
2027 &detail.update.nodes[i]); | 2027 &detail.update.nodes[i]); |
2028 } | 2028 } |
2029 details.push_back(detail); | 2029 details.push_back(detail); |
2030 } | 2030 } |
2031 | 2031 |
2032 if (accessibility_mode & ACCESSIBILITY_MODE_FLAG_NATIVE_APIS) { | 2032 if (accessibility_mode.has(AccessibilityMode::NATIVE_APIS)) { |
2033 if (browser_accessibility_manager_) | 2033 if (browser_accessibility_manager_) |
2034 browser_accessibility_manager_->OnAccessibilityEvents(details); | 2034 browser_accessibility_manager_->OnAccessibilityEvents(details); |
2035 } | 2035 } |
2036 | 2036 |
2037 delegate_->AccessibilityEventReceived(details); | 2037 delegate_->AccessibilityEventReceived(details); |
2038 | 2038 |
2039 // For testing only. | 2039 // For testing only. |
2040 if (!accessibility_testing_callback_.is_null()) { | 2040 if (!accessibility_testing_callback_.is_null()) { |
2041 for (size_t i = 0; i < details.size(); i++) { | 2041 for (size_t i = 0; i < details.size(); i++) { |
2042 const AXEventNotificationDetails& detail = details[i]; | 2042 const AXEventNotificationDetails& detail = details[i]; |
(...skipping 24 matching lines...) Expand all Loading... |
2067 | 2067 |
2068 void RenderFrameHostImpl::OnAccessibilityLocationChanges( | 2068 void RenderFrameHostImpl::OnAccessibilityLocationChanges( |
2069 const std::vector<AccessibilityHostMsg_LocationChangeParams>& params) { | 2069 const std::vector<AccessibilityHostMsg_LocationChangeParams>& params) { |
2070 if (accessibility_reset_token_) | 2070 if (accessibility_reset_token_) |
2071 return; | 2071 return; |
2072 | 2072 |
2073 RenderWidgetHostViewBase* view = static_cast<RenderWidgetHostViewBase*>( | 2073 RenderWidgetHostViewBase* view = static_cast<RenderWidgetHostViewBase*>( |
2074 render_view_host_->GetWidget()->GetView()); | 2074 render_view_host_->GetWidget()->GetView()); |
2075 if (view && is_active()) { | 2075 if (view && is_active()) { |
2076 AccessibilityMode accessibility_mode = delegate_->GetAccessibilityMode(); | 2076 AccessibilityMode accessibility_mode = delegate_->GetAccessibilityMode(); |
2077 if (accessibility_mode & ACCESSIBILITY_MODE_FLAG_NATIVE_APIS) { | 2077 if (accessibility_mode.has(AccessibilityMode::NATIVE_APIS)) { |
2078 BrowserAccessibilityManager* manager = | 2078 BrowserAccessibilityManager* manager = |
2079 GetOrCreateBrowserAccessibilityManager(); | 2079 GetOrCreateBrowserAccessibilityManager(); |
2080 if (manager) | 2080 if (manager) |
2081 manager->OnLocationChanges(params); | 2081 manager->OnLocationChanges(params); |
2082 } | 2082 } |
2083 | 2083 |
2084 // Send the updates to the automation extension API. | 2084 // Send the updates to the automation extension API. |
2085 std::vector<AXLocationChangeNotificationDetails> details; | 2085 std::vector<AXLocationChangeNotificationDetails> details; |
2086 details.reserve(params.size()); | 2086 details.reserve(params.size()); |
2087 for (size_t i = 0; i < params.size(); ++i) { | 2087 for (size_t i = 0; i < params.size(); ++i) { |
2088 const AccessibilityHostMsg_LocationChangeParams& param = params[i]; | 2088 const AccessibilityHostMsg_LocationChangeParams& param = params[i]; |
2089 AXLocationChangeNotificationDetails detail; | 2089 AXLocationChangeNotificationDetails detail; |
2090 detail.id = param.id; | 2090 detail.id = param.id; |
2091 detail.ax_tree_id = GetAXTreeID(); | 2091 detail.ax_tree_id = GetAXTreeID(); |
2092 detail.new_location = param.new_location; | 2092 detail.new_location = param.new_location; |
2093 details.push_back(detail); | 2093 details.push_back(detail); |
2094 } | 2094 } |
2095 delegate_->AccessibilityLocationChangesReceived(details); | 2095 delegate_->AccessibilityLocationChangesReceived(details); |
2096 } | 2096 } |
2097 } | 2097 } |
2098 | 2098 |
2099 void RenderFrameHostImpl::OnAccessibilityFindInPageResult( | 2099 void RenderFrameHostImpl::OnAccessibilityFindInPageResult( |
2100 const AccessibilityHostMsg_FindInPageResultParams& params) { | 2100 const AccessibilityHostMsg_FindInPageResultParams& params) { |
2101 AccessibilityMode accessibility_mode = delegate_->GetAccessibilityMode(); | 2101 AccessibilityMode accessibility_mode = delegate_->GetAccessibilityMode(); |
2102 if (accessibility_mode & ACCESSIBILITY_MODE_FLAG_NATIVE_APIS) { | 2102 if (accessibility_mode.has(AccessibilityMode::NATIVE_APIS)) { |
2103 BrowserAccessibilityManager* manager = | 2103 BrowserAccessibilityManager* manager = |
2104 GetOrCreateBrowserAccessibilityManager(); | 2104 GetOrCreateBrowserAccessibilityManager(); |
2105 if (manager) { | 2105 if (manager) { |
2106 manager->OnFindInPageResult( | 2106 manager->OnFindInPageResult( |
2107 params.request_id, params.match_index, params.start_id, | 2107 params.request_id, params.match_index, params.start_id, |
2108 params.start_offset, params.end_id, params.end_offset); | 2108 params.start_offset, params.end_id, params.end_offset); |
2109 } | 2109 } |
2110 } | 2110 } |
2111 } | 2111 } |
2112 | 2112 |
(...skipping 830 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2943 | 2943 |
2944 bool RenderFrameHostImpl::IsSameSiteInstance( | 2944 bool RenderFrameHostImpl::IsSameSiteInstance( |
2945 RenderFrameHostImpl* other_render_frame_host) { | 2945 RenderFrameHostImpl* other_render_frame_host) { |
2946 // As a sanity check, make sure the frame belongs to the same BrowserContext. | 2946 // As a sanity check, make sure the frame belongs to the same BrowserContext. |
2947 CHECK_EQ(GetSiteInstance()->GetBrowserContext(), | 2947 CHECK_EQ(GetSiteInstance()->GetBrowserContext(), |
2948 other_render_frame_host->GetSiteInstance()->GetBrowserContext()); | 2948 other_render_frame_host->GetSiteInstance()->GetBrowserContext()); |
2949 return GetSiteInstance() == other_render_frame_host->GetSiteInstance(); | 2949 return GetSiteInstance() == other_render_frame_host->GetSiteInstance(); |
2950 } | 2950 } |
2951 | 2951 |
2952 void RenderFrameHostImpl::UpdateAccessibilityMode() { | 2952 void RenderFrameHostImpl::UpdateAccessibilityMode() { |
2953 AccessibilityMode accessibility_mode = delegate_->GetAccessibilityMode(); | 2953 int accessibility_mode_raw = delegate_->GetAccessibilityMode().get(); |
2954 Send(new FrameMsg_SetAccessibilityMode(routing_id_, accessibility_mode)); | 2954 Send(new FrameMsg_SetAccessibilityMode(routing_id_, accessibility_mode_raw)); |
2955 } | 2955 } |
2956 | 2956 |
2957 void RenderFrameHostImpl::RequestAXTreeSnapshot( | 2957 void RenderFrameHostImpl::RequestAXTreeSnapshot( |
2958 AXTreeSnapshotCallback callback) { | 2958 AXTreeSnapshotCallback callback) { |
2959 static int next_id = 1; | 2959 static int next_id = 1; |
2960 int callback_id = next_id++; | 2960 int callback_id = next_id++; |
2961 Send(new AccessibilityMsg_SnapshotTree(routing_id_, callback_id)); | 2961 Send(new AccessibilityMsg_SnapshotTree(routing_id_, callback_id)); |
2962 ax_tree_snapshot_callbacks_.insert(std::make_pair(callback_id, callback)); | 2962 ax_tree_snapshot_callbacks_.insert(std::make_pair(callback_id, callback)); |
2963 } | 2963 } |
2964 | 2964 |
2965 void RenderFrameHostImpl::SetAccessibilityCallbackForTesting( | 2965 void RenderFrameHostImpl::SetAccessibilityCallbackForTesting( |
2966 const base::Callback<void(RenderFrameHostImpl*, ui::AXEvent, int)>& | 2966 const base::Callback<void(RenderFrameHostImpl*, ui::AXEvent, int)>& |
2967 callback) { | 2967 callback) { |
2968 accessibility_testing_callback_ = callback; | 2968 accessibility_testing_callback_ = callback; |
2969 } | 2969 } |
2970 | 2970 |
2971 void RenderFrameHostImpl::UpdateAXTreeData() { | 2971 void RenderFrameHostImpl::UpdateAXTreeData() { |
2972 AccessibilityMode accessibility_mode = delegate_->GetAccessibilityMode(); | 2972 AccessibilityMode accessibility_mode = delegate_->GetAccessibilityMode(); |
2973 if (accessibility_mode == AccessibilityModeOff || !is_active()) { | 2973 if (accessibility_mode == AccessibilityMode::OFF || !is_active()) { |
2974 return; | 2974 return; |
2975 } | 2975 } |
2976 | 2976 |
2977 std::vector<AXEventNotificationDetails> details; | 2977 std::vector<AXEventNotificationDetails> details; |
2978 details.reserve(1U); | 2978 details.reserve(1U); |
2979 AXEventNotificationDetails detail; | 2979 AXEventNotificationDetails detail; |
2980 detail.ax_tree_id = GetAXTreeID(); | 2980 detail.ax_tree_id = GetAXTreeID(); |
2981 detail.update.has_tree_data = true; | 2981 detail.update.has_tree_data = true; |
2982 AXContentTreeDataToAXTreeData(&detail.update.tree_data); | 2982 AXContentTreeDataToAXTreeData(&detail.update.tree_data); |
2983 details.push_back(detail); | 2983 details.push_back(detail); |
(...skipping 23 matching lines...) Expand all Loading... |
3007 bool is_root_frame = !frame_tree_node()->parent(); | 3007 bool is_root_frame = !frame_tree_node()->parent(); |
3008 browser_accessibility_manager_.reset( | 3008 browser_accessibility_manager_.reset( |
3009 view->CreateBrowserAccessibilityManager(this, is_root_frame)); | 3009 view->CreateBrowserAccessibilityManager(this, is_root_frame)); |
3010 } | 3010 } |
3011 return browser_accessibility_manager_.get(); | 3011 return browser_accessibility_manager_.get(); |
3012 } | 3012 } |
3013 | 3013 |
3014 void RenderFrameHostImpl::ActivateFindInPageResultForAccessibility( | 3014 void RenderFrameHostImpl::ActivateFindInPageResultForAccessibility( |
3015 int request_id) { | 3015 int request_id) { |
3016 AccessibilityMode accessibility_mode = delegate_->GetAccessibilityMode(); | 3016 AccessibilityMode accessibility_mode = delegate_->GetAccessibilityMode(); |
3017 if (accessibility_mode & ACCESSIBILITY_MODE_FLAG_NATIVE_APIS) { | 3017 if (accessibility_mode.has(AccessibilityMode::NATIVE_APIS)) { |
3018 BrowserAccessibilityManager* manager = | 3018 BrowserAccessibilityManager* manager = |
3019 GetOrCreateBrowserAccessibilityManager(); | 3019 GetOrCreateBrowserAccessibilityManager(); |
3020 if (manager) | 3020 if (manager) |
3021 manager->ActivateFindInPageResult(request_id); | 3021 manager->ActivateFindInPageResult(request_id); |
3022 } | 3022 } |
3023 } | 3023 } |
3024 | 3024 |
3025 void RenderFrameHostImpl::InsertVisualStateCallback( | 3025 void RenderFrameHostImpl::InsertVisualStateCallback( |
3026 const VisualStateCallback& callback) { | 3026 const VisualStateCallback& callback) { |
3027 static uint64_t next_id = 1; | 3027 static uint64_t next_id = 1; |
(...skipping 449 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3477 // There is no pending NavigationEntry in these cases, so pass 0 as the | 3477 // There is no pending NavigationEntry in these cases, so pass 0 as the |
3478 // pending_nav_entry_id. If the previous handle was a prematurely aborted | 3478 // pending_nav_entry_id. If the previous handle was a prematurely aborted |
3479 // navigation loaded via LoadDataWithBaseURL, propagate the entry id. | 3479 // navigation loaded via LoadDataWithBaseURL, propagate the entry id. |
3480 return NavigationHandleImpl::Create( | 3480 return NavigationHandleImpl::Create( |
3481 params.url, params.redirects, frame_tree_node_, is_renderer_initiated, | 3481 params.url, params.redirects, frame_tree_node_, is_renderer_initiated, |
3482 params.was_within_same_page, base::TimeTicks::Now(), | 3482 params.was_within_same_page, base::TimeTicks::Now(), |
3483 entry_id_for_data_nav, false); // started_from_context_menu | 3483 entry_id_for_data_nav, false); // started_from_context_menu |
3484 } | 3484 } |
3485 | 3485 |
3486 } // namespace content | 3486 } // namespace content |
OLD | NEW |