Index: content/browser/frame_host/render_frame_host_impl.cc |
diff --git a/content/browser/frame_host/render_frame_host_impl.cc b/content/browser/frame_host/render_frame_host_impl.cc |
index 360aeb354eb03cbb657e73af9a27dc9a21335866..caec72c0f2200f1de14dc3bb283332214234a359 100644 |
--- a/content/browser/frame_host/render_frame_host_impl.cc |
+++ b/content/browser/frame_host/render_frame_host_impl.cc |
@@ -314,6 +314,15 @@ void NotifyForEachFrameFromUI( |
base::Passed(std::move(routing_ids)))); |
} |
+void LookupRenderFrameHostOrProxy(int process_id, |
+ int routing_id, |
+ RenderFrameHostImpl** rfh, |
+ RenderFrameProxyHost** rfph) { |
+ *rfh = RenderFrameHostImpl::FromID(process_id, routing_id); |
+ if (*rfh == nullptr) |
+ *rfph = RenderFrameProxyHost::FromID(process_id, routing_id); |
+} |
+ |
} // namespace |
// static |
@@ -3633,32 +3642,39 @@ bool RenderFrameHostImpl::CanExecuteJavaScript() { |
(delegate_->GetAsWebContents() == nullptr); |
} |
+// static |
+int RenderFrameHost::GetFrameTreeNodeIdForRoutingId(int process_id, |
+ int routing_id) { |
+ RenderFrameHostImpl* rfh = nullptr; |
+ RenderFrameProxyHost* rfph = nullptr; |
+ LookupRenderFrameHostOrProxy(process_id, routing_id, &rfh, &rfph); |
+ if (rfh) { |
+ return rfh->GetFrameTreeNodeId(); |
+ } else if (rfph) { |
+ return rfph->frame_tree_node()->frame_tree_node_id(); |
+ } |
+ return kNoFrameTreeNodeId; |
+} |
+ |
ui::AXTreeIDRegistry::AXTreeID RenderFrameHostImpl::RoutingIDToAXTreeID( |
int routing_id) { |
RenderFrameHostImpl* rfh = nullptr; |
- RenderFrameProxyHost* rfph = RenderFrameProxyHost::FromID( |
- GetProcess()->GetID(), routing_id); |
+ RenderFrameProxyHost* rfph = nullptr; |
+ LookupRenderFrameHostOrProxy(GetProcess()->GetID(), routing_id, &rfh, &rfph); |
if (rfph) { |
- FrameTree* frame_tree = rfph->frame_tree_node()->frame_tree(); |
- FrameTreeNode* frame_tree_node = frame_tree->FindByRoutingID( |
- GetProcess()->GetID(), routing_id); |
- rfh = frame_tree_node->render_manager()->current_frame_host(); |
- } else { |
- rfh = RenderFrameHostImpl::FromID(GetProcess()->GetID(), routing_id); |
- |
- // As a sanity check, make sure we're within the same frame tree and |
- // crash the renderer if not. |
- if (rfh && |
- rfh->frame_tree_node()->frame_tree() != |
- frame_tree_node()->frame_tree()) { |
- AccessibilityFatalError(); |
- return ui::AXTreeIDRegistry::kNoAXTreeID; |
- } |
+ rfh = rfph->frame_tree_node()->current_frame_host(); |
} |
if (!rfh) |
return ui::AXTreeIDRegistry::kNoAXTreeID; |
+ // As a sanity check, make sure we're within the same frame tree and |
+ // crash the renderer if not. |
+ if (rfh->frame_tree_node()->frame_tree() != frame_tree_node()->frame_tree()) { |
+ AccessibilityFatalError(); |
+ return ui::AXTreeIDRegistry::kNoAXTreeID; |
+ } |
+ |
return rfh->GetAXTreeID(); |
} |