| Index: content/browser/frame_host/render_frame_host_manager.cc
|
| ===================================================================
|
| --- content/browser/frame_host/render_frame_host_manager.cc (revision 250813)
|
| +++ content/browser/frame_host/render_frame_host_manager.cc (working copy)
|
| @@ -18,6 +18,7 @@
|
| #include "content/browser/frame_host/navigation_entry_impl.h"
|
| #include "content/browser/frame_host/render_frame_host_factory.h"
|
| #include "content/browser/frame_host/render_frame_host_impl.h"
|
| +#include "content/browser/renderer_host/cross_site_transferring_request.h"
|
| #include "content/browser/renderer_host/render_process_host_impl.h"
|
| #include "content/browser/renderer_host/render_view_host_factory.h"
|
| #include "content/browser/renderer_host/render_view_host_impl.h"
|
| @@ -37,20 +38,16 @@
|
|
|
| namespace content {
|
|
|
| -RenderFrameHostManager::PendingNavigationParams::PendingNavigationParams()
|
| - : is_transfer(false), frame_id(-1), should_replace_current_entry(false) {
|
| -}
|
| -
|
| RenderFrameHostManager::PendingNavigationParams::PendingNavigationParams(
|
| const GlobalRequestID& global_request_id,
|
| - bool is_transfer,
|
| + scoped_ptr<CrossSiteTransferringRequest> cross_site_transferring_request,
|
| const std::vector<GURL>& transfer_url_chain,
|
| Referrer referrer,
|
| PageTransition page_transition,
|
| int64 frame_id,
|
| bool should_replace_current_entry)
|
| : global_request_id(global_request_id),
|
| - is_transfer(is_transfer),
|
| + cross_site_transferring_request(cross_site_transferring_request.Pass()),
|
| transfer_url_chain(transfer_url_chain),
|
| referrer(referrer),
|
| page_transition(page_transition),
|
| @@ -207,6 +204,15 @@
|
| }
|
| }
|
|
|
| + // If entry includes the request ID of a request that is being transferred,
|
| + // the destination render frame will take ownership, so release ownership of
|
| + // the request.
|
| + if (pending_nav_params_ &&
|
| + pending_nav_params_->global_request_id ==
|
| + entry.transferred_global_request_id()) {
|
| + pending_nav_params_->cross_site_transferring_request->ReleaseRequest();
|
| + }
|
| +
|
| return dest_render_frame_host;
|
| }
|
|
|
| @@ -279,7 +285,7 @@
|
| // TODO(creis): The blank swapped out page is visible during this time, but
|
| // we can shorten this by delivering the response directly, rather than
|
| // forcing an identical request to be made.
|
| - if (pending_nav_params_->is_transfer) {
|
| + if (pending_nav_params_->cross_site_transferring_request) {
|
| // Treat the last URL in the chain as the destination and the remainder as
|
| // the redirect chain.
|
| CHECK(pending_nav_params_->transfer_url_chain.size());
|
| @@ -328,7 +334,7 @@
|
| // TODO(creis): The blank swapped out page is visible during this time, but
|
| // we can shorten this by delivering the response directly, rather than
|
| // forcing an identical request to be made.
|
| - if (pending_nav_params_->is_transfer) {
|
| + if (pending_nav_params_->cross_site_transferring_request) {
|
| // Treat the last URL in the chain as the destination and the remainder as
|
| // the redirect chain.
|
| CHECK(pending_nav_params_->transfer_url_chain.size());
|
| @@ -480,7 +486,7 @@
|
| void RenderFrameHostManager::OnCrossSiteResponse(
|
| RenderViewHost* pending_render_view_host,
|
| const GlobalRequestID& global_request_id,
|
| - bool is_transfer,
|
| + scoped_ptr<CrossSiteTransferringRequest> cross_site_transferring_request,
|
| const std::vector<GURL>& transfer_url_chain,
|
| const Referrer& referrer,
|
| PageTransition page_transition,
|
| @@ -496,10 +502,12 @@
|
| // here, but currently we pass information for a transfer if
|
| // ShouldSwapProcessesForRedirect returned true in the network stack.
|
| // In that case, we should set up a transfer after the unload handler runs.
|
| - // If is_transfer is false, we will just run the unload handler and resume.
|
| + // If |cross_site_transferring_request| is NULL, we will just run the unload
|
| + // handler and resume.
|
| pending_nav_params_.reset(new PendingNavigationParams(
|
| - global_request_id, is_transfer, transfer_url_chain, referrer,
|
| - page_transition, frame_id, should_replace_current_entry));
|
| + global_request_id, cross_site_transferring_request.Pass(),
|
| + transfer_url_chain, referrer, page_transition, frame_id,
|
| + should_replace_current_entry));
|
|
|
| // Run the unload handler of the current page.
|
| SwapOutOldPage();
|
|
|