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 794 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
805 scoped_refptr<SiteInstance> dest_site_instance = GetSiteInstanceForNavigation( | 805 scoped_refptr<SiteInstance> dest_site_instance = GetSiteInstanceForNavigation( |
806 request.common_params().url, request.source_site_instance(), | 806 request.common_params().url, request.source_site_instance(), |
807 request.dest_site_instance(), candidate_site_instance, | 807 request.dest_site_instance(), candidate_site_instance, |
808 request.common_params().transition, | 808 request.common_params().transition, |
809 request.restore_type() != NavigationEntryImpl::RESTORE_NONE, | 809 request.restore_type() != NavigationEntryImpl::RESTORE_NONE, |
810 request.is_view_source()); | 810 request.is_view_source()); |
811 | 811 |
812 // The appropriate RenderFrameHost to commit the navigation. | 812 // The appropriate RenderFrameHost to commit the navigation. |
813 RenderFrameHostImpl* navigation_rfh = nullptr; | 813 RenderFrameHostImpl* navigation_rfh = nullptr; |
814 | 814 |
815 // Renderer-initiated main frame navigations that may require a SiteInstance | |
816 // swap are sent to the browser via the OpenURL IPC and are afterwards treated | |
817 // as browser-initiated navigations. NavigationRequests marked as | |
818 // renderer-initiated are created by receiving a BeginNavigation IPC, and will | |
819 // then proceed in the same renderer that sent the IPC due to the condition | |
820 // below. | |
821 // Subframe navigations will use the current renderer, unless | |
822 // --site-per-process is enabled. | |
823 // TODO(carlosk): Have renderer-initated main frame navigations swap processes | |
824 // if needed when it no longer breaks OAuth popups (see | |
825 // https://crbug.com/440266). | |
826 bool is_main_frame = frame_tree_node_->IsMainFrame(); | |
827 bool notify_webui_of_rv_creation = false; | 815 bool notify_webui_of_rv_creation = false; |
828 if (current_site_instance == dest_site_instance.get() || | |
829 (!request.browser_initiated() && is_main_frame) || | |
830 (!is_main_frame && !dest_site_instance->RequiresDedicatedProcess() && | |
831 !current_site_instance->RequiresDedicatedProcess())) { | |
832 // Reuse the current RenderFrameHost if its SiteInstance matches the | |
833 // navigation's or if this is a subframe navigation. We only swap | |
834 // RenderFrameHosts for subframes when --site-per-process is enabled. | |
835 | 816 |
817 // Reuse the current RenderFrameHost if its SiteInstance matches the | |
818 // navigation's. | |
819 bool no_renderer_swap = current_site_instance == dest_site_instance.get(); | |
820 if (SiteIsolationPolicy::AreCrossProcessFramesPossible()) { | |
821 // Check if the current renderer should be changed for the navigation. | |
822 no_renderer_swap |= | |
823 !IsRendererTransferNeededForNavigation(render_frame_host_.get(), | |
824 request.common_params().url) && | |
825 ShouldMakeNetworkRequestForURL(request.common_params().url); | |
nasko
2016/02/25 20:04:44
nit: Let's swap the order of these two calls. Shou
clamy
2016/02/26 13:51:02
Done. I also noted that we were preventing transfe
| |
826 } else { | |
827 // Subframe navigations will use the current renderer. | |
828 no_renderer_swap |= !frame_tree_node_->IsMainFrame(); | |
829 | |
830 // Renderer-initiated main frame navigations that may require a | |
831 // SiteInstance swap are sent to the browser via the OpenURL IPC and are | |
832 // afterwards treated as browser-initiated navigations. NavigationRequests | |
833 // marked as renderer-initiated are created by receiving a BeginNavigation | |
834 // IPC, and will then proceed in the same renderer that sent the IPC due to | |
835 // the condition below. | |
836 // TODO(carlosk): Have renderer-initated main frame navigations swap | |
837 // processes if needed when it no longer breaks OAuth popups (see | |
838 // https://crbug.com/440266). | |
839 no_renderer_swap |= !request.browser_initiated(); | |
840 } | |
841 if (no_renderer_swap) { | |
nasko
2016/02/25 20:04:44
nit: Empty line before the if statement.
clamy
2016/02/26 13:51:02
Done.
| |
836 // GetFrameHostForNavigation will be called more than once during a | 842 // GetFrameHostForNavigation will be called more than once during a |
837 // navigation (currently twice, on request and when it's about to commit in | 843 // navigation (currently twice, on request and when it's about to commit in |
838 // the renderer). In the follow up calls an existing pending WebUI should | 844 // the renderer). In the follow up calls an existing pending WebUI should |
839 // not be recreated if the URL didn't change. So instead of calling | 845 // not be recreated if the URL didn't change. So instead of calling |
840 // CleanUpNavigation just discard the speculative RenderFrameHost if one | 846 // CleanUpNavigation just discard the speculative RenderFrameHost if one |
841 // exists. | 847 // exists. |
842 if (speculative_render_frame_host_) | 848 if (speculative_render_frame_host_) |
843 DiscardUnusedFrame(UnsetSpeculativeRenderFrameHost()); | 849 DiscardUnusedFrame(UnsetSpeculativeRenderFrameHost()); |
844 | 850 |
845 UpdatePendingWebUIOnCurrentFrameHost(request.common_params().url, | 851 UpdatePendingWebUIOnCurrentFrameHost(request.common_params().url, |
(...skipping 1663 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2509 int RenderFrameHostManager::GetOpenerRoutingID(SiteInstance* instance) { | 2515 int RenderFrameHostManager::GetOpenerRoutingID(SiteInstance* instance) { |
2510 if (!frame_tree_node_->opener()) | 2516 if (!frame_tree_node_->opener()) |
2511 return MSG_ROUTING_NONE; | 2517 return MSG_ROUTING_NONE; |
2512 | 2518 |
2513 return frame_tree_node_->opener() | 2519 return frame_tree_node_->opener() |
2514 ->render_manager() | 2520 ->render_manager() |
2515 ->GetRoutingIdForSiteInstance(instance); | 2521 ->GetRoutingIdForSiteInstance(instance); |
2516 } | 2522 } |
2517 | 2523 |
2518 } // namespace content | 2524 } // namespace content |
OLD | NEW |