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 1950 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1961 // reset but this message includes a reset token. | 1961 // reset but this message includes a reset token. |
1962 if (accessibility_reset_token_ != reset_token) { | 1962 if (accessibility_reset_token_ != reset_token) { |
1963 Send(new AccessibilityMsg_Events_ACK(routing_id_, ack_token)); | 1963 Send(new AccessibilityMsg_Events_ACK(routing_id_, ack_token)); |
1964 return; | 1964 return; |
1965 } | 1965 } |
1966 accessibility_reset_token_ = 0; | 1966 accessibility_reset_token_ = 0; |
1967 | 1967 |
1968 RenderWidgetHostViewBase* view = GetViewForAccessibility(); | 1968 RenderWidgetHostViewBase* view = GetViewForAccessibility(); |
1969 | 1969 |
1970 AccessibilityMode accessibility_mode = delegate_->GetAccessibilityMode(); | 1970 AccessibilityMode accessibility_mode = delegate_->GetAccessibilityMode(); |
1971 if ((accessibility_mode != AccessibilityModeOff) && view && is_active()) { | 1971 if (!accessibility_mode.is_mode_off() && view && is_active()) { |
1972 if (accessibility_mode & ACCESSIBILITY_MODE_FLAG_NATIVE_APIS) | 1972 if (accessibility_mode.has_mode(AccessibilityMode::kNativeAPIs)) |
1973 GetOrCreateBrowserAccessibilityManager(); | 1973 GetOrCreateBrowserAccessibilityManager(); |
1974 | 1974 |
1975 std::vector<AXEventNotificationDetails> details; | 1975 std::vector<AXEventNotificationDetails> details; |
1976 details.reserve(params.size()); | 1976 details.reserve(params.size()); |
1977 for (size_t i = 0; i < params.size(); ++i) { | 1977 for (size_t i = 0; i < params.size(); ++i) { |
1978 const AccessibilityHostMsg_EventParams& param = params[i]; | 1978 const AccessibilityHostMsg_EventParams& param = params[i]; |
1979 AXEventNotificationDetails detail; | 1979 AXEventNotificationDetails detail; |
1980 detail.event_type = param.event_type; | 1980 detail.event_type = param.event_type; |
1981 detail.id = param.id; | 1981 detail.id = param.id; |
1982 detail.ax_tree_id = GetAXTreeID(); | 1982 detail.ax_tree_id = GetAXTreeID(); |
1983 detail.event_from = param.event_from; | 1983 detail.event_from = param.event_from; |
1984 if (param.update.has_tree_data) { | 1984 if (param.update.has_tree_data) { |
1985 detail.update.has_tree_data = true; | 1985 detail.update.has_tree_data = true; |
1986 ax_content_tree_data_ = param.update.tree_data; | 1986 ax_content_tree_data_ = param.update.tree_data; |
1987 AXContentTreeDataToAXTreeData(&detail.update.tree_data); | 1987 AXContentTreeDataToAXTreeData(&detail.update.tree_data); |
1988 } | 1988 } |
1989 detail.update.root_id = param.update.root_id; | 1989 detail.update.root_id = param.update.root_id; |
1990 detail.update.node_id_to_clear = param.update.node_id_to_clear; | 1990 detail.update.node_id_to_clear = param.update.node_id_to_clear; |
1991 detail.update.nodes.resize(param.update.nodes.size()); | 1991 detail.update.nodes.resize(param.update.nodes.size()); |
1992 for (size_t i = 0; i < param.update.nodes.size(); ++i) { | 1992 for (size_t i = 0; i < param.update.nodes.size(); ++i) { |
1993 AXContentNodeDataToAXNodeData(param.update.nodes[i], | 1993 AXContentNodeDataToAXNodeData(param.update.nodes[i], |
1994 &detail.update.nodes[i]); | 1994 &detail.update.nodes[i]); |
1995 } | 1995 } |
1996 details.push_back(detail); | 1996 details.push_back(detail); |
1997 } | 1997 } |
1998 | 1998 |
1999 if (accessibility_mode & ACCESSIBILITY_MODE_FLAG_NATIVE_APIS) { | 1999 if (accessibility_mode.has_mode(AccessibilityMode::kNativeAPIs)) { |
2000 if (browser_accessibility_manager_) | 2000 if (browser_accessibility_manager_) |
2001 browser_accessibility_manager_->OnAccessibilityEvents(details); | 2001 browser_accessibility_manager_->OnAccessibilityEvents(details); |
2002 } | 2002 } |
2003 | 2003 |
2004 delegate_->AccessibilityEventReceived(details); | 2004 delegate_->AccessibilityEventReceived(details); |
2005 | 2005 |
2006 // For testing only. | 2006 // For testing only. |
2007 if (!accessibility_testing_callback_.is_null()) { | 2007 if (!accessibility_testing_callback_.is_null()) { |
2008 for (size_t i = 0; i < details.size(); i++) { | 2008 for (size_t i = 0; i < details.size(); i++) { |
2009 const AXEventNotificationDetails& detail = details[i]; | 2009 const AXEventNotificationDetails& detail = details[i]; |
(...skipping 24 matching lines...) Expand all Loading... |
2034 | 2034 |
2035 void RenderFrameHostImpl::OnAccessibilityLocationChanges( | 2035 void RenderFrameHostImpl::OnAccessibilityLocationChanges( |
2036 const std::vector<AccessibilityHostMsg_LocationChangeParams>& params) { | 2036 const std::vector<AccessibilityHostMsg_LocationChangeParams>& params) { |
2037 if (accessibility_reset_token_) | 2037 if (accessibility_reset_token_) |
2038 return; | 2038 return; |
2039 | 2039 |
2040 RenderWidgetHostViewBase* view = static_cast<RenderWidgetHostViewBase*>( | 2040 RenderWidgetHostViewBase* view = static_cast<RenderWidgetHostViewBase*>( |
2041 render_view_host_->GetWidget()->GetView()); | 2041 render_view_host_->GetWidget()->GetView()); |
2042 if (view && is_active()) { | 2042 if (view && is_active()) { |
2043 AccessibilityMode accessibility_mode = delegate_->GetAccessibilityMode(); | 2043 AccessibilityMode accessibility_mode = delegate_->GetAccessibilityMode(); |
2044 if (accessibility_mode & ACCESSIBILITY_MODE_FLAG_NATIVE_APIS) { | 2044 if (accessibility_mode.has_mode(AccessibilityMode::kNativeAPIs)) { |
2045 BrowserAccessibilityManager* manager = | 2045 BrowserAccessibilityManager* manager = |
2046 GetOrCreateBrowserAccessibilityManager(); | 2046 GetOrCreateBrowserAccessibilityManager(); |
2047 if (manager) | 2047 if (manager) |
2048 manager->OnLocationChanges(params); | 2048 manager->OnLocationChanges(params); |
2049 } | 2049 } |
2050 | 2050 |
2051 // Send the updates to the automation extension API. | 2051 // Send the updates to the automation extension API. |
2052 std::vector<AXLocationChangeNotificationDetails> details; | 2052 std::vector<AXLocationChangeNotificationDetails> details; |
2053 details.reserve(params.size()); | 2053 details.reserve(params.size()); |
2054 for (size_t i = 0; i < params.size(); ++i) { | 2054 for (size_t i = 0; i < params.size(); ++i) { |
2055 const AccessibilityHostMsg_LocationChangeParams& param = params[i]; | 2055 const AccessibilityHostMsg_LocationChangeParams& param = params[i]; |
2056 AXLocationChangeNotificationDetails detail; | 2056 AXLocationChangeNotificationDetails detail; |
2057 detail.id = param.id; | 2057 detail.id = param.id; |
2058 detail.ax_tree_id = GetAXTreeID(); | 2058 detail.ax_tree_id = GetAXTreeID(); |
2059 detail.new_location = param.new_location; | 2059 detail.new_location = param.new_location; |
2060 details.push_back(detail); | 2060 details.push_back(detail); |
2061 } | 2061 } |
2062 delegate_->AccessibilityLocationChangesReceived(details); | 2062 delegate_->AccessibilityLocationChangesReceived(details); |
2063 } | 2063 } |
2064 } | 2064 } |
2065 | 2065 |
2066 void RenderFrameHostImpl::OnAccessibilityFindInPageResult( | 2066 void RenderFrameHostImpl::OnAccessibilityFindInPageResult( |
2067 const AccessibilityHostMsg_FindInPageResultParams& params) { | 2067 const AccessibilityHostMsg_FindInPageResultParams& params) { |
2068 AccessibilityMode accessibility_mode = delegate_->GetAccessibilityMode(); | 2068 AccessibilityMode accessibility_mode = delegate_->GetAccessibilityMode(); |
2069 if (accessibility_mode & ACCESSIBILITY_MODE_FLAG_NATIVE_APIS) { | 2069 if (accessibility_mode.has_mode(AccessibilityMode::kNativeAPIs)) { |
2070 BrowserAccessibilityManager* manager = | 2070 BrowserAccessibilityManager* manager = |
2071 GetOrCreateBrowserAccessibilityManager(); | 2071 GetOrCreateBrowserAccessibilityManager(); |
2072 if (manager) { | 2072 if (manager) { |
2073 manager->OnFindInPageResult( | 2073 manager->OnFindInPageResult( |
2074 params.request_id, params.match_index, params.start_id, | 2074 params.request_id, params.match_index, params.start_id, |
2075 params.start_offset, params.end_id, params.end_offset); | 2075 params.start_offset, params.end_id, params.end_offset); |
2076 } | 2076 } |
2077 } | 2077 } |
2078 } | 2078 } |
2079 | 2079 |
(...skipping 845 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2925 | 2925 |
2926 bool RenderFrameHostImpl::IsSameSiteInstance( | 2926 bool RenderFrameHostImpl::IsSameSiteInstance( |
2927 RenderFrameHostImpl* other_render_frame_host) { | 2927 RenderFrameHostImpl* other_render_frame_host) { |
2928 // As a sanity check, make sure the frame belongs to the same BrowserContext. | 2928 // As a sanity check, make sure the frame belongs to the same BrowserContext. |
2929 CHECK_EQ(GetSiteInstance()->GetBrowserContext(), | 2929 CHECK_EQ(GetSiteInstance()->GetBrowserContext(), |
2930 other_render_frame_host->GetSiteInstance()->GetBrowserContext()); | 2930 other_render_frame_host->GetSiteInstance()->GetBrowserContext()); |
2931 return GetSiteInstance() == other_render_frame_host->GetSiteInstance(); | 2931 return GetSiteInstance() == other_render_frame_host->GetSiteInstance(); |
2932 } | 2932 } |
2933 | 2933 |
2934 void RenderFrameHostImpl::UpdateAccessibilityMode() { | 2934 void RenderFrameHostImpl::UpdateAccessibilityMode() { |
2935 AccessibilityMode accessibility_mode = delegate_->GetAccessibilityMode(); | 2935 int accessibility_mode_raw = delegate_->GetAccessibilityMode().mode(); |
2936 Send(new FrameMsg_SetAccessibilityMode(routing_id_, accessibility_mode)); | 2936 Send(new FrameMsg_SetAccessibilityMode(routing_id_, accessibility_mode_raw)); |
2937 } | 2937 } |
2938 | 2938 |
2939 void RenderFrameHostImpl::RequestAXTreeSnapshot( | 2939 void RenderFrameHostImpl::RequestAXTreeSnapshot( |
2940 AXTreeSnapshotCallback callback) { | 2940 AXTreeSnapshotCallback callback) { |
2941 static int next_id = 1; | 2941 static int next_id = 1; |
2942 int callback_id = next_id++; | 2942 int callback_id = next_id++; |
2943 Send(new AccessibilityMsg_SnapshotTree(routing_id_, callback_id)); | 2943 Send(new AccessibilityMsg_SnapshotTree(routing_id_, callback_id)); |
2944 ax_tree_snapshot_callbacks_.insert(std::make_pair(callback_id, callback)); | 2944 ax_tree_snapshot_callbacks_.insert(std::make_pair(callback_id, callback)); |
2945 } | 2945 } |
2946 | 2946 |
2947 void RenderFrameHostImpl::SetAccessibilityCallbackForTesting( | 2947 void RenderFrameHostImpl::SetAccessibilityCallbackForTesting( |
2948 const base::Callback<void(RenderFrameHostImpl*, ui::AXEvent, int)>& | 2948 const base::Callback<void(RenderFrameHostImpl*, ui::AXEvent, int)>& |
2949 callback) { | 2949 callback) { |
2950 accessibility_testing_callback_ = callback; | 2950 accessibility_testing_callback_ = callback; |
2951 } | 2951 } |
2952 | 2952 |
2953 void RenderFrameHostImpl::UpdateAXTreeData() { | 2953 void RenderFrameHostImpl::UpdateAXTreeData() { |
2954 AccessibilityMode accessibility_mode = delegate_->GetAccessibilityMode(); | 2954 AccessibilityMode accessibility_mode = delegate_->GetAccessibilityMode(); |
2955 if (accessibility_mode == AccessibilityModeOff || !is_active()) { | 2955 if (accessibility_mode.is_mode_off() || !is_active()) { |
2956 return; | 2956 return; |
2957 } | 2957 } |
2958 | 2958 |
2959 std::vector<AXEventNotificationDetails> details; | 2959 std::vector<AXEventNotificationDetails> details; |
2960 details.reserve(1U); | 2960 details.reserve(1U); |
2961 AXEventNotificationDetails detail; | 2961 AXEventNotificationDetails detail; |
2962 detail.ax_tree_id = GetAXTreeID(); | 2962 detail.ax_tree_id = GetAXTreeID(); |
2963 detail.update.has_tree_data = true; | 2963 detail.update.has_tree_data = true; |
2964 AXContentTreeDataToAXTreeData(&detail.update.tree_data); | 2964 AXContentTreeDataToAXTreeData(&detail.update.tree_data); |
2965 details.push_back(detail); | 2965 details.push_back(detail); |
(...skipping 23 matching lines...) Expand all Loading... |
2989 bool is_root_frame = !frame_tree_node()->parent(); | 2989 bool is_root_frame = !frame_tree_node()->parent(); |
2990 browser_accessibility_manager_.reset( | 2990 browser_accessibility_manager_.reset( |
2991 view->CreateBrowserAccessibilityManager(this, is_root_frame)); | 2991 view->CreateBrowserAccessibilityManager(this, is_root_frame)); |
2992 } | 2992 } |
2993 return browser_accessibility_manager_.get(); | 2993 return browser_accessibility_manager_.get(); |
2994 } | 2994 } |
2995 | 2995 |
2996 void RenderFrameHostImpl::ActivateFindInPageResultForAccessibility( | 2996 void RenderFrameHostImpl::ActivateFindInPageResultForAccessibility( |
2997 int request_id) { | 2997 int request_id) { |
2998 AccessibilityMode accessibility_mode = delegate_->GetAccessibilityMode(); | 2998 AccessibilityMode accessibility_mode = delegate_->GetAccessibilityMode(); |
2999 if (accessibility_mode & ACCESSIBILITY_MODE_FLAG_NATIVE_APIS) { | 2999 if (accessibility_mode.has_mode(AccessibilityMode::kNativeAPIs)) { |
3000 BrowserAccessibilityManager* manager = | 3000 BrowserAccessibilityManager* manager = |
3001 GetOrCreateBrowserAccessibilityManager(); | 3001 GetOrCreateBrowserAccessibilityManager(); |
3002 if (manager) | 3002 if (manager) |
3003 manager->ActivateFindInPageResult(request_id); | 3003 manager->ActivateFindInPageResult(request_id); |
3004 } | 3004 } |
3005 } | 3005 } |
3006 | 3006 |
3007 void RenderFrameHostImpl::InsertVisualStateCallback( | 3007 void RenderFrameHostImpl::InsertVisualStateCallback( |
3008 const VisualStateCallback& callback) { | 3008 const VisualStateCallback& callback) { |
3009 static uint64_t next_id = 1; | 3009 static uint64_t next_id = 1; |
(...skipping 448 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3458 // There is no pending NavigationEntry in these cases, so pass 0 as the | 3458 // There is no pending NavigationEntry in these cases, so pass 0 as the |
3459 // pending_nav_entry_id. If the previous handle was a prematurely aborted | 3459 // pending_nav_entry_id. If the previous handle was a prematurely aborted |
3460 // navigation loaded via LoadDataWithBaseURL, propagate the entry id. | 3460 // navigation loaded via LoadDataWithBaseURL, propagate the entry id. |
3461 return NavigationHandleImpl::Create( | 3461 return NavigationHandleImpl::Create( |
3462 params.url, params.redirects, frame_tree_node_, is_renderer_initiated, | 3462 params.url, params.redirects, frame_tree_node_, is_renderer_initiated, |
3463 params.was_within_same_page, base::TimeTicks::Now(), | 3463 params.was_within_same_page, base::TimeTicks::Now(), |
3464 entry_id_for_data_nav, false); // started_from_context_menu | 3464 entry_id_for_data_nav, false); // started_from_context_menu |
3465 } | 3465 } |
3466 | 3466 |
3467 } // namespace content | 3467 } // namespace content |
OLD | NEW |