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 295 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
306 if (frame_host) | 306 if (frame_host) |
307 routing_ids->insert(frame_host->GetGlobalFrameRoutingId()); | 307 routing_ids->insert(frame_host->GetGlobalFrameRoutingId()); |
308 if (pending_frame_host) | 308 if (pending_frame_host) |
309 routing_ids->insert(pending_frame_host->GetGlobalFrameRoutingId()); | 309 routing_ids->insert(pending_frame_host->GetGlobalFrameRoutingId()); |
310 } | 310 } |
311 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, | 311 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, |
312 base::Bind(&NotifyRouteChangesOnIO, frame_callback, | 312 base::Bind(&NotifyRouteChangesOnIO, frame_callback, |
313 base::Passed(std::move(routing_ids)))); | 313 base::Passed(std::move(routing_ids)))); |
314 } | 314 } |
315 | 315 |
| 316 void LookupRenderFrameHostOrProxy(int process_id, |
| 317 int routing_id, |
| 318 RenderFrameHostImpl** rfh, |
| 319 RenderFrameProxyHost** rfph) { |
| 320 *rfh = RenderFrameHostImpl::FromID(process_id, routing_id); |
| 321 if (*rfh == nullptr) |
| 322 *rfph = RenderFrameProxyHost::FromID(process_id, routing_id); |
| 323 } |
| 324 |
316 } // namespace | 325 } // namespace |
317 | 326 |
318 // static | 327 // static |
319 RenderFrameHost* RenderFrameHost::FromID(int render_process_id, | 328 RenderFrameHost* RenderFrameHost::FromID(int render_process_id, |
320 int render_frame_id) { | 329 int render_frame_id) { |
321 return RenderFrameHostImpl::FromID(render_process_id, render_frame_id); | 330 return RenderFrameHostImpl::FromID(render_process_id, render_frame_id); |
322 } | 331 } |
323 | 332 |
324 #if defined(OS_ANDROID) | 333 #if defined(OS_ANDROID) |
325 // static | 334 // static |
(...skipping 3253 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3579 frame_tree_node_->current_url().SchemeIs(kChromeDevToolsScheme) || | 3588 frame_tree_node_->current_url().SchemeIs(kChromeDevToolsScheme) || |
3580 ChildProcessSecurityPolicyImpl::GetInstance()->HasWebUIBindings( | 3589 ChildProcessSecurityPolicyImpl::GetInstance()->HasWebUIBindings( |
3581 GetProcess()->GetID()) || | 3590 GetProcess()->GetID()) || |
3582 // It's possible to load about:blank in a Web UI renderer. | 3591 // It's possible to load about:blank in a Web UI renderer. |
3583 // See http://crbug.com/42547 | 3592 // See http://crbug.com/42547 |
3584 (frame_tree_node_->current_url().spec() == url::kAboutBlankURL) || | 3593 (frame_tree_node_->current_url().spec() == url::kAboutBlankURL) || |
3585 // InterstitialPageImpl should be the only case matching this. | 3594 // InterstitialPageImpl should be the only case matching this. |
3586 (delegate_->GetAsWebContents() == nullptr); | 3595 (delegate_->GetAsWebContents() == nullptr); |
3587 } | 3596 } |
3588 | 3597 |
| 3598 // static |
| 3599 int RenderFrameHost::GetFrameTreeNodeIdForRoutingId(int process_id, |
| 3600 int routing_id) { |
| 3601 RenderFrameHostImpl* rfh = nullptr; |
| 3602 RenderFrameProxyHost* rfph = nullptr; |
| 3603 LookupRenderFrameHostOrProxy(process_id, routing_id, &rfh, &rfph); |
| 3604 if (rfh) { |
| 3605 return rfh->GetFrameTreeNodeId(); |
| 3606 } else if (rfph) { |
| 3607 return rfph->frame_tree_node()->frame_tree_node_id(); |
| 3608 } |
| 3609 return kNoFrameTreeNodeId; |
| 3610 } |
| 3611 |
3589 ui::AXTreeIDRegistry::AXTreeID RenderFrameHostImpl::RoutingIDToAXTreeID( | 3612 ui::AXTreeIDRegistry::AXTreeID RenderFrameHostImpl::RoutingIDToAXTreeID( |
3590 int routing_id) { | 3613 int routing_id) { |
3591 RenderFrameHostImpl* rfh = nullptr; | 3614 RenderFrameHostImpl* rfh = nullptr; |
3592 RenderFrameProxyHost* rfph = RenderFrameProxyHost::FromID( | 3615 RenderFrameProxyHost* rfph = nullptr; |
3593 GetProcess()->GetID(), routing_id); | 3616 LookupRenderFrameHostOrProxy(GetProcess()->GetID(), routing_id, &rfh, &rfph); |
3594 if (rfph) { | 3617 if (rfph) { |
3595 FrameTree* frame_tree = rfph->frame_tree_node()->frame_tree(); | 3618 rfh = rfph->frame_tree_node()->current_frame_host(); |
3596 FrameTreeNode* frame_tree_node = frame_tree->FindByRoutingID( | |
3597 GetProcess()->GetID(), routing_id); | |
3598 rfh = frame_tree_node->render_manager()->current_frame_host(); | |
3599 } else { | |
3600 rfh = RenderFrameHostImpl::FromID(GetProcess()->GetID(), routing_id); | |
3601 | |
3602 // As a sanity check, make sure we're within the same frame tree and | |
3603 // crash the renderer if not. | |
3604 if (rfh && | |
3605 rfh->frame_tree_node()->frame_tree() != | |
3606 frame_tree_node()->frame_tree()) { | |
3607 AccessibilityFatalError(); | |
3608 return ui::AXTreeIDRegistry::kNoAXTreeID; | |
3609 } | |
3610 } | 3619 } |
3611 | 3620 |
3612 if (!rfh) | 3621 if (!rfh) |
3613 return ui::AXTreeIDRegistry::kNoAXTreeID; | 3622 return ui::AXTreeIDRegistry::kNoAXTreeID; |
3614 | 3623 |
| 3624 // As a sanity check, make sure we're within the same frame tree and |
| 3625 // crash the renderer if not. |
| 3626 if (rfh->frame_tree_node()->frame_tree() != frame_tree_node()->frame_tree()) { |
| 3627 AccessibilityFatalError(); |
| 3628 return ui::AXTreeIDRegistry::kNoAXTreeID; |
| 3629 } |
| 3630 |
3615 return rfh->GetAXTreeID(); | 3631 return rfh->GetAXTreeID(); |
3616 } | 3632 } |
3617 | 3633 |
3618 ui::AXTreeIDRegistry::AXTreeID | 3634 ui::AXTreeIDRegistry::AXTreeID |
3619 RenderFrameHostImpl::BrowserPluginInstanceIDToAXTreeID(int instance_id) { | 3635 RenderFrameHostImpl::BrowserPluginInstanceIDToAXTreeID(int instance_id) { |
3620 RenderFrameHostImpl* guest = static_cast<RenderFrameHostImpl*>( | 3636 RenderFrameHostImpl* guest = static_cast<RenderFrameHostImpl*>( |
3621 delegate()->GetGuestByInstanceID(this, instance_id)); | 3637 delegate()->GetGuestByInstanceID(this, instance_id)); |
3622 if (!guest) | 3638 if (!guest) |
3623 return ui::AXTreeIDRegistry::kNoAXTreeID; | 3639 return ui::AXTreeIDRegistry::kNoAXTreeID; |
3624 | 3640 |
(...skipping 309 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3934 } | 3950 } |
3935 | 3951 |
3936 void RenderFrameHostImpl::ForwardGetInterfaceToRenderFrame( | 3952 void RenderFrameHostImpl::ForwardGetInterfaceToRenderFrame( |
3937 const std::string& interface_name, | 3953 const std::string& interface_name, |
3938 mojo::ScopedMessagePipeHandle pipe) { | 3954 mojo::ScopedMessagePipeHandle pipe) { |
3939 GetRemoteInterfaces()->GetInterface(interface_name, std::move(pipe)); | 3955 GetRemoteInterfaces()->GetInterface(interface_name, std::move(pipe)); |
3940 } | 3956 } |
3941 #endif | 3957 #endif |
3942 | 3958 |
3943 } // namespace content | 3959 } // namespace content |
OLD | NEW |