Chromium Code Reviews| 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 <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include <algorithm> | 9 #include <algorithm> |
| 10 #include <utility> | 10 #include <utility> |
| (...skipping 640 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 651 void RenderFrameHostManager::DiscardUnusedFrame( | 651 void RenderFrameHostManager::DiscardUnusedFrame( |
| 652 std::unique_ptr<RenderFrameHostImpl> render_frame_host) { | 652 std::unique_ptr<RenderFrameHostImpl> render_frame_host) { |
| 653 // TODO(carlosk): this code is very similar to what can be found in | 653 // TODO(carlosk): this code is very similar to what can be found in |
| 654 // SwapOutOldFrame and we should see that these are unified at some point. | 654 // SwapOutOldFrame and we should see that these are unified at some point. |
| 655 | 655 |
| 656 // If the SiteInstance for the pending RFH is being used by others don't | 656 // If the SiteInstance for the pending RFH is being used by others don't |
| 657 // delete the RFH. Just swap it out and it can be reused at a later point. | 657 // delete the RFH. Just swap it out and it can be reused at a later point. |
| 658 // In --site-per-process, RenderFrameHosts are not kept around and are | 658 // In --site-per-process, RenderFrameHosts are not kept around and are |
| 659 // deleted when not used, replaced by RenderFrameProxyHosts. | 659 // deleted when not used, replaced by RenderFrameProxyHosts. |
| 660 SiteInstanceImpl* site_instance = render_frame_host->GetSiteInstance(); | 660 SiteInstanceImpl* site_instance = render_frame_host->GetSiteInstance(); |
| 661 RenderViewHostImpl* rvh = render_frame_host->render_view_host(); | |
| 662 RenderFrameProxyHost* proxy = nullptr; | |
| 661 if (site_instance->HasSite() && site_instance->active_frame_count() > 1) { | 663 if (site_instance->HasSite() && site_instance->active_frame_count() > 1) { |
| 662 // Any currently suspended navigations are no longer needed. | 664 // Any currently suspended navigations are no longer needed. |
| 663 render_frame_host->CancelSuspendedNavigations(); | 665 render_frame_host->CancelSuspendedNavigations(); |
| 664 | 666 |
| 665 // If a proxy already exists for the |site_instance|, just reuse it instead | 667 // If a proxy already exists for the |site_instance|, just reuse it instead |
| 666 // of creating a new one. There is no need to call SwapOut on the | 668 // of creating a new one. There is no need to call SwapOut on the |
| 667 // |render_frame_host|, as this method is only called to discard a pending | 669 // |render_frame_host|, as this method is only called to discard a pending |
| 668 // or speculative RenderFrameHost, i.e. one that has never hosted an actual | 670 // or speculative RenderFrameHost, i.e. one that has never hosted an actual |
| 669 // document. | 671 // document. |
| 670 RenderFrameProxyHost* proxy = GetRenderFrameProxyHost(site_instance); | 672 proxy = GetRenderFrameProxyHost(site_instance); |
| 671 if (!proxy) { | 673 if (!proxy) |
| 672 proxy = CreateRenderFrameProxyHost(site_instance, | 674 proxy = CreateRenderFrameProxyHost(site_instance, rvh); |
| 673 render_frame_host->render_view_host()); | 675 } |
| 674 } | 676 |
| 677 if (frame_tree_node_->IsMainFrame()) { | |
| 678 rvh->set_main_frame_routing_id(MSG_ROUTING_NONE); | |
| 679 rvh->set_is_active(false); | |
|
alexmos
2016/10/12 20:29:46
Doing this is important in the case where the repl
nasko
2016/10/13 21:26:28
Acknowledged.
Charlie Reis
2016/10/14 16:25:10
Could you add this as a comment in the code?
alexmos
2016/10/14 17:07:38
Done. I also updated the (stale) comment on top o
| |
| 680 rvh->set_is_swapped_out(true); | |
| 675 } | 681 } |
| 676 | 682 |
| 677 render_frame_host.reset(); | 683 render_frame_host.reset(); |
| 684 | |
| 685 // If a new RenderFrameProxyHost was created above, or if the old proxy isn't | |
| 686 // live, create the RenderFrameProxy in the renderer, so that other frames | |
| 687 // can still communicate with this frame. See https://crbug.com/653746. | |
| 688 if (proxy && !proxy->is_render_frame_proxy_live()) | |
| 689 proxy->InitRenderFrameProxy(); | |
|
alexmos
2016/10/12 20:29:46
I think it makes more sense to initialize the prox
nasko
2016/10/13 21:26:28
Acknowledged.
| |
| 678 } | 690 } |
| 679 | 691 |
| 680 bool RenderFrameHostManager::DeleteFromPendingList( | 692 bool RenderFrameHostManager::DeleteFromPendingList( |
| 681 RenderFrameHostImpl* render_frame_host) { | 693 RenderFrameHostImpl* render_frame_host) { |
| 682 for (RFHPendingDeleteList::iterator iter = pending_delete_hosts_.begin(); | 694 for (RFHPendingDeleteList::iterator iter = pending_delete_hosts_.begin(); |
| 683 iter != pending_delete_hosts_.end(); | 695 iter != pending_delete_hosts_.end(); |
| 684 iter++) { | 696 iter++) { |
| 685 if (iter->get() == render_frame_host) { | 697 if (iter->get() == render_frame_host) { |
| 686 pending_delete_hosts_.erase(iter); | 698 pending_delete_hosts_.erase(iter); |
| 687 return true; | 699 return true; |
| (...skipping 2003 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2691 resolved_url)) { | 2703 resolved_url)) { |
| 2692 DCHECK(!dest_instance || | 2704 DCHECK(!dest_instance || |
| 2693 dest_instance == render_frame_host_->GetSiteInstance()); | 2705 dest_instance == render_frame_host_->GetSiteInstance()); |
| 2694 return false; | 2706 return false; |
| 2695 } | 2707 } |
| 2696 | 2708 |
| 2697 return true; | 2709 return true; |
| 2698 } | 2710 } |
| 2699 | 2711 |
| 2700 } // namespace content | 2712 } // namespace content |
| OLD | NEW |