Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(8)

Side by Side Diff: content/browser/frame_host/render_frame_host_manager.cc

Issue 281653003: DRAFT CL: Add FrameNavigationEntry and track subframe session histories. Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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/logging.h" 10 #include "base/logging.h"
11 #include "base/stl_util.h" 11 #include "base/stl_util.h"
12 #include "base/trace_event/trace_event.h" 12 #include "base/trace_event/trace_event.h"
13 #include "content/browser/child_process_security_policy_impl.h" 13 #include "content/browser/child_process_security_policy_impl.h"
14 #include "content/browser/devtools/render_frame_devtools_agent_host.h" 14 #include "content/browser/devtools/render_frame_devtools_agent_host.h"
15 #include "content/browser/frame_host/cross_site_transferring_request.h" 15 #include "content/browser/frame_host/cross_site_transferring_request.h"
16 #include "content/browser/frame_host/debug_urls.h" 16 #include "content/browser/frame_host/debug_urls.h"
17 #include "content/browser/frame_host/frame_navigation_entry.h"
17 #include "content/browser/frame_host/interstitial_page_impl.h" 18 #include "content/browser/frame_host/interstitial_page_impl.h"
18 #include "content/browser/frame_host/navigation_controller_impl.h" 19 #include "content/browser/frame_host/navigation_controller_impl.h"
19 #include "content/browser/frame_host/navigation_entry_impl.h" 20 #include "content/browser/frame_host/navigation_entry_impl.h"
20 #include "content/browser/frame_host/navigation_request.h" 21 #include "content/browser/frame_host/navigation_request.h"
21 #include "content/browser/frame_host/navigator.h" 22 #include "content/browser/frame_host/navigator.h"
22 #include "content/browser/frame_host/render_frame_host_factory.h" 23 #include "content/browser/frame_host/render_frame_host_factory.h"
23 #include "content/browser/frame_host/render_frame_host_impl.h" 24 #include "content/browser/frame_host/render_frame_host_impl.h"
24 #include "content/browser/frame_host/render_frame_proxy_host.h" 25 #include "content/browser/frame_host/render_frame_proxy_host.h"
25 #include "content/browser/renderer_host/render_process_host_impl.h" 26 #include "content/browser/renderer_host/render_process_host_impl.h"
26 #include "content/browser/renderer_host/render_view_host_factory.h" 27 #include "content/browser/renderer_host/render_view_host_factory.h"
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after
176 // potential privilege escalation. 177 // potential privilege escalation.
177 if (new_web_ui && bindings != NavigationEntryImpl::kInvalidBindings && 178 if (new_web_ui && bindings != NavigationEntryImpl::kInvalidBindings &&
178 new_web_ui->GetBindings() != bindings) { 179 new_web_ui->GetBindings() != bindings) {
179 RecordAction(base::UserMetricsAction("ProcessSwapBindingsMismatch_RVHM")); 180 RecordAction(base::UserMetricsAction("ProcessSwapBindingsMismatch_RVHM"));
180 return nullptr; 181 return nullptr;
181 } 182 }
182 return new_web_ui.Pass(); 183 return new_web_ui.Pass();
183 } 184 }
184 185
185 RenderFrameHostImpl* RenderFrameHostManager::Navigate( 186 RenderFrameHostImpl* RenderFrameHostManager::Navigate(
187 const FrameNavigationEntry& frame_entry,
186 const NavigationEntryImpl& entry) { 188 const NavigationEntryImpl& entry) {
187 TRACE_EVENT1("navigation", "RenderFrameHostManager:Navigate", 189 TRACE_EVENT1("navigation", "RenderFrameHostManager:Navigate",
188 "FrameTreeNode id", frame_tree_node_->frame_tree_node_id()); 190 "FrameTreeNode id", frame_tree_node_->frame_tree_node_id());
189 // Create a pending RenderFrameHost to use for the navigation. 191 // Create a pending RenderFrameHost to use for the navigation.
190 RenderFrameHostImpl* dest_render_frame_host = UpdateStateForNavigate( 192 RenderFrameHostImpl* dest_render_frame_host = UpdateStateForNavigate(
191 entry.GetURL(), entry.source_site_instance(), entry.site_instance(), 193 frame_entry.url(),
194 // TODO(creis): Move source_site_instance to FNE.
195 entry.source_site_instance(),
196 frame_entry.site_instance(),
192 entry.GetTransitionType(), 197 entry.GetTransitionType(),
193 entry.restore_type() != NavigationEntryImpl::RESTORE_NONE, 198 entry.restore_type() != NavigationEntryImpl::RESTORE_NONE,
194 entry.IsViewSourceMode(), entry.transferred_global_request_id(), 199 entry.IsViewSourceMode(), entry.transferred_global_request_id(),
195 entry.bindings()); 200 entry.bindings());
196 if (!dest_render_frame_host) 201 if (!dest_render_frame_host)
197 return NULL; // We weren't able to create a pending render frame host. 202 return NULL; // We weren't able to create a pending render frame host.
198 203
199 // If the current render_frame_host_ isn't live, we should create it so 204 // If the current render_frame_host_ isn't live, we should create it so
200 // that we don't show a sad tab while the dest_render_frame_host fetches 205 // that we don't show a sad tab while the dest_render_frame_host fetches
201 // its first page. (Bug 1145340) 206 // its first page. (Bug 1145340)
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
252 // the request. 257 // the request.
253 if (cross_site_transferring_request_.get() && 258 if (cross_site_transferring_request_.get() &&
254 cross_site_transferring_request_->request_id() == 259 cross_site_transferring_request_->request_id() ==
255 entry.transferred_global_request_id()) { 260 entry.transferred_global_request_id()) {
256 cross_site_transferring_request_->ReleaseRequest(); 261 cross_site_transferring_request_->ReleaseRequest();
257 } 262 }
258 263
259 return dest_render_frame_host; 264 return dest_render_frame_host;
260 } 265 }
261 266
267 RenderFrameHostImpl* RenderFrameHostManager::NavigateMainFrame(
268 const NavigationEntryImpl& entry) {
269 return Navigate(*entry.root_node()->frame_entry, entry);
270 }
271
262 void RenderFrameHostManager::Stop() { 272 void RenderFrameHostManager::Stop() {
263 render_frame_host_->Stop(); 273 render_frame_host_->Stop();
264 274
265 // If we are cross-navigating, we should stop the pending renderers. This 275 // If we are cross-navigating, we should stop the pending renderers. This
266 // will lead to a DidFailProvisionalLoad, which will properly destroy them. 276 // will lead to a DidFailProvisionalLoad, which will properly destroy them.
267 if (cross_navigation_pending_) { 277 if (cross_navigation_pending_) {
268 pending_render_frame_host_->Send(new FrameMsg_Stop( 278 pending_render_frame_host_->Send(new FrameMsg_Stop(
269 pending_render_frame_host_->GetRoutingID())); 279 pending_render_frame_host_->GetRoutingID()));
270 } 280 }
271 } 281 }
(...skipping 1747 matching lines...) Expand 10 before | Expand all | Expand 10 after
2019 void RenderFrameHostManager::DeleteRenderFrameProxyHost( 2029 void RenderFrameHostManager::DeleteRenderFrameProxyHost(
2020 SiteInstance* instance) { 2030 SiteInstance* instance) {
2021 RenderFrameProxyHostMap::iterator iter = proxy_hosts_.find(instance->GetId()); 2031 RenderFrameProxyHostMap::iterator iter = proxy_hosts_.find(instance->GetId());
2022 if (iter != proxy_hosts_.end()) { 2032 if (iter != proxy_hosts_.end()) {
2023 delete iter->second; 2033 delete iter->second;
2024 proxy_hosts_.erase(iter); 2034 proxy_hosts_.erase(iter);
2025 } 2035 }
2026 } 2036 }
2027 2037
2028 } // namespace content 2038 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698