Chromium Code Reviews| Index: content/browser/frame_host/navigation_handle_impl.h |
| diff --git a/content/browser/frame_host/navigation_handle_impl.h b/content/browser/frame_host/navigation_handle_impl.h |
| index 048554c4e9c7c38fb2f59e88d854b2d762a7937e..5627df5228485195f5f852c9e2cc16ef9b27eb87 100644 |
| --- a/content/browser/frame_host/navigation_handle_impl.h |
| +++ b/content/browser/frame_host/navigation_handle_impl.h |
| @@ -17,6 +17,7 @@ |
| #include "content/browser/frame_host/frame_tree_node.h" |
| #include "content/browser/frame_host/render_frame_host_impl.h" |
| #include "content/common/content_export.h" |
| +#include "content/public/browser/global_request_id.h" |
| #include "content/public/browser/navigation_data.h" |
| #include "content/public/browser/navigation_throttle.h" |
| #include "content/public/browser/ssl_status.h" |
| @@ -29,6 +30,7 @@ namespace content { |
| class NavigatorDelegate; |
| class ResourceRequestBodyImpl; |
| +class SiteInstance; |
| // This class keeps track of a single navigation. It is created upon receipt of |
| // a DidStartProvisionalLoad IPC in a RenderFrameHost. The RenderFrameHost owns |
| @@ -201,11 +203,18 @@ class CONTENT_EXPORT NavigationHandleImpl : public NavigationHandle { |
| // NavigationHandle will not call |callback| with a result of DEFER. |
| // If the result is PROCEED, then 'ReadyToCommitNavigation' will be called |
| // with |render_frame_host| and |response_headers| just before calling |
| - // |callback|. |
| + // |callback|. Should a transfer navigation happen, |transfer_callback| will |
| + // be run on the IO thread. |
| + // PlzNavigate: transfer navigations are not possible. |
| void WillProcessResponse( |
| RenderFrameHostImpl* render_frame_host, |
| scoped_refptr<net::HttpResponseHeaders> response_headers, |
| const SSLStatus& ssl_status, |
| + const GlobalRequestID& request_id, |
| + bool should_replace_current_entry, |
| + bool is_download, |
| + bool is_stream, |
| + const base::Closure& transfer_callback, |
| const ThrottleChecksFinishedCallback& callback); |
| // Returns the FrameTreeNode this navigation is happening in. |
| @@ -232,6 +241,18 @@ class CONTENT_EXPORT NavigationHandleImpl : public NavigationHandle { |
| SSLStatus ssl_status() { return ssl_status_; } |
| + // This is valid after the network response has started. |
| + // TODO(clamy): See if this can be initialized earlier if needed by |
| + // non-transfer code. There may some issue in PlzNavigate, where |
|
nasko
2016/09/22 22:44:55
nit: "There may some issue in PlzNavigate" doesn't
clamy
2016/09/26 12:20:32
Done.
|
| + // WillStartRequest will be called before starting a request on the IO thread. |
| + const GlobalRequestID& request_id() const { |
| + DCHECK_GE(state_, WILL_PROCESS_RESPONSE); |
| + return request_id_; |
| + } |
| + |
| + // Called when the navigation is transferred to a different renderer. |
| + void Transfer(); |
| + |
| private: |
| friend class NavigationHandleImplTest; |
| @@ -262,6 +283,19 @@ class CONTENT_EXPORT NavigationHandleImpl : public NavigationHandle { |
| NavigationThrottle::ThrottleCheckResult CheckWillRedirectRequest(); |
| NavigationThrottle::ThrottleCheckResult CheckWillProcessResponse(); |
| + // Called when WillProcessResponse checks are done, to find the final |
| + // RenderFrameHost for the navigation. Checks whether the navigation should be |
| + // transferred. Returns false if the transfer attempt results in the |
| + // destruction of this NavigationHandle and the navigation should no longer |
| + // proceed. This can happen when the RenderFrameHostManager determines a |
| + // transfer is needed, but WebContentsDelegate::ShouldTransferNavigation |
| + // returns false. |
| + bool MaybeTransferAndProceed(); |
| + |
| + // Helper method for MaybeTransferAndProceed. Returns false if the transfer |
| + // attempt results in the destruction of this NavigationHandle. |
| + bool MaybeTransferAndProceedInternal(); |
| + |
| // Helper function to run and reset the |complete_callback_|. This marks the |
| // end of a round of NavigationThrottleChecks. |
| void RunCompleteCallback(NavigationThrottle::ThrottleCheckResult result); |
| @@ -287,6 +321,10 @@ class CONTENT_EXPORT NavigationHandleImpl : public NavigationHandle { |
| bool was_redirected_; |
| scoped_refptr<net::HttpResponseHeaders> response_headers_; |
| + // The original url of the navigation. This may differ from |url_| if the |
| + // navigation encounters redirects. |
| + const GURL original_url_; |
| + |
| // The HTTP method used for the navigation. |
| std::string method_; |
| @@ -328,6 +366,24 @@ class CONTENT_EXPORT NavigationHandleImpl : public NavigationHandle { |
| SSLStatus ssl_status_; |
| + // The id of the URLRequest tied to this navigation. |
| + GlobalRequestID request_id_; |
| + |
| + // Whether the current NavigationEntry should be replaced upon commit. |
| + bool should_replace_current_entry_; |
| + |
| + // The chain of redirects. |
| + std::vector<GURL> redirect_chain_; |
| + |
| + // A callback to run on the IO thread if the navigation transfers. |
| + base::Closure transfer_callback_; |
| + |
| + // Whether the navigation ended up being a download or a stream. |
| + bool is_download_; |
| + bool is_stream_; |
| + |
| + base::WeakPtrFactory<NavigationHandleImpl> weak_factory_; |
| + |
| DISALLOW_COPY_AND_ASSIGN(NavigationHandleImpl); |
| }; |