| 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 |