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_manager.h" | 5 #include "content/browser/frame_host/render_frame_host_manager.h" |
6 | 6 |
7 #include <utility> | 7 #include <utility> |
8 | 8 |
9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
10 #include "base/debug/trace_event.h" | 10 #include "base/debug/trace_event.h" |
(...skipping 600 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
611 current_instance, new_instance, frame_tree_node_->IsMainFrame()); | 611 current_instance, new_instance, frame_tree_node_->IsMainFrame()); |
612 DCHECK(pending_render_frame_host_.get()); | 612 DCHECK(pending_render_frame_host_.get()); |
613 // TODO(clamy): Wait until the navigation has committed before swapping | 613 // TODO(clamy): Wait until the navigation has committed before swapping |
614 // renderers. | 614 // renderers. |
615 scoped_ptr<RenderFrameHostImpl> old_render_frame_host = | 615 scoped_ptr<RenderFrameHostImpl> old_render_frame_host = |
616 SetRenderFrameHost(pending_render_frame_host_.Pass()); | 616 SetRenderFrameHost(pending_render_frame_host_.Pass()); |
617 if (frame_tree_node_->IsMainFrame()) | 617 if (frame_tree_node_->IsMainFrame()) |
618 render_frame_host_->render_view_host()->AttachToFrameTree(); | 618 render_frame_host_->render_view_host()->AttachToFrameTree(); |
619 } | 619 } |
620 | 620 |
| 621 // If the renderer that needs to navigate is not live (it was just created or |
| 622 // it crashed), initialize it. |
| 623 if (!render_frame_host_->render_view_host()->IsRenderViewLive()) { |
| 624 // Recreate the opener chain. |
| 625 int opener_route_id = delegate_->CreateOpenerRenderViewsForRenderManager( |
| 626 render_frame_host_->GetSiteInstance()); |
| 627 if (!InitRenderView(render_frame_host_->render_view_host(), |
| 628 opener_route_id, |
| 629 MSG_ROUTING_NONE, |
| 630 frame_tree_node_->IsMainFrame())) { |
| 631 return; |
| 632 } |
| 633 } |
| 634 |
621 frame_tree_node_->navigator()->CommitNavigation( | 635 frame_tree_node_->navigator()->CommitNavigation( |
622 render_frame_host_.get(), info); | 636 render_frame_host_.get(), info); |
623 } | 637 } |
624 | 638 |
625 void RenderFrameHostManager::Observe( | 639 void RenderFrameHostManager::Observe( |
626 int type, | 640 int type, |
627 const NotificationSource& source, | 641 const NotificationSource& source, |
628 const NotificationDetails& details) { | 642 const NotificationDetails& details) { |
629 switch (type) { | 643 switch (type) { |
630 case NOTIFICATION_RENDERER_PROCESS_CLOSED: | 644 case NOTIFICATION_RENDERER_PROCESS_CLOSED: |
(...skipping 1042 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1673 void RenderFrameHostManager::DeleteRenderFrameProxyHost( | 1687 void RenderFrameHostManager::DeleteRenderFrameProxyHost( |
1674 SiteInstance* instance) { | 1688 SiteInstance* instance) { |
1675 RenderFrameProxyHostMap::iterator iter = proxy_hosts_.find(instance->GetId()); | 1689 RenderFrameProxyHostMap::iterator iter = proxy_hosts_.find(instance->GetId()); |
1676 if (iter != proxy_hosts_.end()) { | 1690 if (iter != proxy_hosts_.end()) { |
1677 delete iter->second; | 1691 delete iter->second; |
1678 proxy_hosts_.erase(iter); | 1692 proxy_hosts_.erase(iter); |
1679 } | 1693 } |
1680 } | 1694 } |
1681 | 1695 |
1682 } // namespace content | 1696 } // namespace content |
OLD | NEW |