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 294 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
305 if (frame_host) | 305 if (frame_host) |
306 routing_ids->insert(frame_host->GetGlobalFrameRoutingId()); | 306 routing_ids->insert(frame_host->GetGlobalFrameRoutingId()); |
307 if (pending_frame_host) | 307 if (pending_frame_host) |
308 routing_ids->insert(pending_frame_host->GetGlobalFrameRoutingId()); | 308 routing_ids->insert(pending_frame_host->GetGlobalFrameRoutingId()); |
309 } | 309 } |
310 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, | 310 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, |
311 base::Bind(&NotifyRouteChangesOnIO, frame_callback, | 311 base::Bind(&NotifyRouteChangesOnIO, frame_callback, |
312 base::Passed(std::move(routing_ids)))); | 312 base::Passed(std::move(routing_ids)))); |
313 } | 313 } |
314 | 314 |
| 315 void LookupRenderFrameHostOrProxy(int process_id, |
| 316 int routing_id, |
| 317 RenderFrameHostImpl** rfh, |
| 318 RenderFrameProxyHost** rfph) { |
| 319 *rfh = RenderFrameHostImpl::FromID(process_id, routing_id); |
| 320 if (*rfh == nullptr) |
| 321 *rfph = RenderFrameProxyHost::FromID(process_id, routing_id); |
| 322 } |
| 323 |
315 } // namespace | 324 } // namespace |
316 | 325 |
317 // static | 326 // static |
318 RenderFrameHost* RenderFrameHost::FromID(int render_process_id, | 327 RenderFrameHost* RenderFrameHost::FromID(int render_process_id, |
319 int render_frame_id) { | 328 int render_frame_id) { |
320 return RenderFrameHostImpl::FromID(render_process_id, render_frame_id); | 329 return RenderFrameHostImpl::FromID(render_process_id, render_frame_id); |
321 } | 330 } |
322 | 331 |
323 #if defined(OS_ANDROID) | 332 #if defined(OS_ANDROID) |
324 // static | 333 // static |
(...skipping 3242 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3567 frame_tree_node_->current_url().SchemeIs(kChromeDevToolsScheme) || | 3576 frame_tree_node_->current_url().SchemeIs(kChromeDevToolsScheme) || |
3568 ChildProcessSecurityPolicyImpl::GetInstance()->HasWebUIBindings( | 3577 ChildProcessSecurityPolicyImpl::GetInstance()->HasWebUIBindings( |
3569 GetProcess()->GetID()) || | 3578 GetProcess()->GetID()) || |
3570 // It's possible to load about:blank in a Web UI renderer. | 3579 // It's possible to load about:blank in a Web UI renderer. |
3571 // See http://crbug.com/42547 | 3580 // See http://crbug.com/42547 |
3572 (frame_tree_node_->current_url().spec() == url::kAboutBlankURL) || | 3581 (frame_tree_node_->current_url().spec() == url::kAboutBlankURL) || |
3573 // InterstitialPageImpl should be the only case matching this. | 3582 // InterstitialPageImpl should be the only case matching this. |
3574 (delegate_->GetAsWebContents() == nullptr); | 3583 (delegate_->GetAsWebContents() == nullptr); |
3575 } | 3584 } |
3576 | 3585 |
| 3586 // static |
| 3587 RenderFrameHost* RenderFrameHost::GetRenderFrameHostForRoutingId( |
| 3588 int process_id, |
| 3589 int routing_id) { |
| 3590 RenderFrameHostImpl* rfh = nullptr; |
| 3591 RenderFrameProxyHost* rfph = nullptr; |
| 3592 LookupRenderFrameHostOrProxy(process_id, routing_id, &rfh, &rfph); |
| 3593 if (rfh) { |
| 3594 return rfh; |
| 3595 } else if (rfph) { |
| 3596 return rfph->frame_tree_node()->current_frame_host(); |
| 3597 } |
| 3598 return nullptr; |
| 3599 } |
| 3600 |
3577 ui::AXTreeIDRegistry::AXTreeID RenderFrameHostImpl::RoutingIDToAXTreeID( | 3601 ui::AXTreeIDRegistry::AXTreeID RenderFrameHostImpl::RoutingIDToAXTreeID( |
3578 int routing_id) { | 3602 int routing_id) { |
3579 RenderFrameHostImpl* rfh = nullptr; | 3603 RenderFrameHostImpl* rfh = nullptr; |
3580 RenderFrameProxyHost* rfph = RenderFrameProxyHost::FromID( | 3604 RenderFrameProxyHost* rfph = nullptr; |
3581 GetProcess()->GetID(), routing_id); | 3605 LookupRenderFrameHostOrProxy(GetProcess()->GetID(), routing_id, &rfh, &rfph); |
3582 if (rfph) { | 3606 if (rfph) { |
3583 FrameTree* frame_tree = rfph->frame_tree_node()->frame_tree(); | 3607 rfh = rfph->frame_tree_node()->current_frame_host(); |
3584 FrameTreeNode* frame_tree_node = frame_tree->FindByRoutingID( | |
3585 GetProcess()->GetID(), routing_id); | |
3586 rfh = frame_tree_node->render_manager()->current_frame_host(); | |
3587 } else { | |
3588 rfh = RenderFrameHostImpl::FromID(GetProcess()->GetID(), routing_id); | |
3589 | |
3590 // As a sanity check, make sure we're within the same frame tree and | |
3591 // crash the renderer if not. | |
3592 if (rfh && | |
3593 rfh->frame_tree_node()->frame_tree() != | |
3594 frame_tree_node()->frame_tree()) { | |
3595 AccessibilityFatalError(); | |
3596 return ui::AXTreeIDRegistry::kNoAXTreeID; | |
3597 } | |
3598 } | 3608 } |
3599 | 3609 |
3600 if (!rfh) | 3610 if (!rfh) |
3601 return ui::AXTreeIDRegistry::kNoAXTreeID; | 3611 return ui::AXTreeIDRegistry::kNoAXTreeID; |
3602 | 3612 |
| 3613 // As a sanity check, make sure we're within the same frame tree and |
| 3614 // crash the renderer if not. |
| 3615 if (rfh->frame_tree_node()->frame_tree() != frame_tree_node()->frame_tree()) { |
| 3616 AccessibilityFatalError(); |
| 3617 return ui::AXTreeIDRegistry::kNoAXTreeID; |
| 3618 } |
| 3619 |
3603 return rfh->GetAXTreeID(); | 3620 return rfh->GetAXTreeID(); |
3604 } | 3621 } |
3605 | 3622 |
3606 ui::AXTreeIDRegistry::AXTreeID | 3623 ui::AXTreeIDRegistry::AXTreeID |
3607 RenderFrameHostImpl::BrowserPluginInstanceIDToAXTreeID(int instance_id) { | 3624 RenderFrameHostImpl::BrowserPluginInstanceIDToAXTreeID(int instance_id) { |
3608 RenderFrameHostImpl* guest = static_cast<RenderFrameHostImpl*>( | 3625 RenderFrameHostImpl* guest = static_cast<RenderFrameHostImpl*>( |
3609 delegate()->GetGuestByInstanceID(this, instance_id)); | 3626 delegate()->GetGuestByInstanceID(this, instance_id)); |
3610 if (!guest) | 3627 if (!guest) |
3611 return ui::AXTreeIDRegistry::kNoAXTreeID; | 3628 return ui::AXTreeIDRegistry::kNoAXTreeID; |
3612 | 3629 |
(...skipping 300 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3913 } | 3930 } |
3914 | 3931 |
3915 void RenderFrameHostImpl::ForwardGetInterfaceToRenderFrame( | 3932 void RenderFrameHostImpl::ForwardGetInterfaceToRenderFrame( |
3916 const std::string& interface_name, | 3933 const std::string& interface_name, |
3917 mojo::ScopedMessagePipeHandle pipe) { | 3934 mojo::ScopedMessagePipeHandle pipe) { |
3918 GetRemoteInterfaces()->GetInterface(interface_name, std::move(pipe)); | 3935 GetRemoteInterfaces()->GetInterface(interface_name, std::move(pipe)); |
3919 } | 3936 } |
3920 #endif | 3937 #endif |
3921 | 3938 |
3922 } // namespace content | 3939 } // namespace content |
OLD | NEW |