| 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 42f550f05f2946011ab2808fbf867c8e7c306a08..53bfea10f41f594972d4d63c0f23c0d76cd2e79a 100644
|
| --- a/content/browser/frame_host/render_frame_host_impl.cc
|
| +++ b/content/browser/frame_host/render_frame_host_impl.cc
|
| @@ -312,6 +312,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
|
| @@ -3574,32 +3583,40 @@ bool RenderFrameHostImpl::CanExecuteJavaScript() {
|
| (delegate_->GetAsWebContents() == nullptr);
|
| }
|
|
|
| +// static
|
| +RenderFrameHost* RenderFrameHost::GetRenderFrameHostForRoutingId(
|
| + int process_id,
|
| + int routing_id) {
|
| + RenderFrameHostImpl* rfh = nullptr;
|
| + RenderFrameProxyHost* rfph = nullptr;
|
| + LookupRenderFrameHostOrProxy(process_id, routing_id, &rfh, &rfph);
|
| + if (rfh) {
|
| + return rfh;
|
| + } else if (rfph) {
|
| + return rfph->frame_tree_node()->current_frame_host();
|
| + }
|
| + return nullptr;
|
| +}
|
| +
|
| 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();
|
| }
|
|
|
|
|