| Index: content/browser/renderer_host/render_view_host_impl.h
|
| diff --git a/content/browser/renderer_host/render_view_host_impl.h b/content/browser/renderer_host/render_view_host_impl.h
|
| index fa76384eb3993681a7897cf92840babf43aa3512..6d69007015da6c6fe0248968ff397d837a250c51 100644
|
| --- a/content/browser/renderer_host/render_view_host_impl.h
|
| +++ b/content/browser/renderer_host/render_view_host_impl.h
|
| @@ -260,6 +260,30 @@
|
| // RenderFrameHostImpl.
|
| void NavigateToURL(const GURL& url);
|
|
|
| + // Returns whether navigation messages are currently suspended for this
|
| + // RenderViewHost. Only true during a cross-site navigation, while waiting
|
| + // for the onbeforeunload handler.
|
| + bool are_navigations_suspended() const { return navigations_suspended_; }
|
| +
|
| + // Suspends (or unsuspends) any navigation messages from being sent from this
|
| + // RenderViewHost. This is called when a pending RenderViewHost is created
|
| + // for a cross-site navigation, because we must suspend any navigations until
|
| + // we hear back from the old renderer's onbeforeunload handler. Note that it
|
| + // is important that only one navigation event happen after calling this
|
| + // method with |suspend| equal to true. If |suspend| is false and there is
|
| + // a suspended_nav_message_, this will send the message. This function
|
| + // should only be called to toggle the state; callers should check
|
| + // are_navigations_suspended() first. If |suspend| is false, the time that the
|
| + // user decided the navigation should proceed should be passed as
|
| + // |proceed_time|.
|
| + void SetNavigationsSuspended(bool suspend,
|
| + const base::TimeTicks& proceed_time);
|
| +
|
| + // Clears any suspended navigation state after a cross-site navigation is
|
| + // canceled or suspended. This is important if we later return to this
|
| + // RenderViewHost.
|
| + void CancelSuspendedNavigations();
|
| +
|
| // Whether this RenderViewHost has been swapped out to be displayed by a
|
| // different process.
|
| bool IsSwappedOut() const { return rvh_state_ == STATE_SWAPPED_OUT; }
|
| @@ -291,6 +315,17 @@
|
| // This is called after the beforeunload and unload events have fired
|
| // and the user has agreed to continue with closing the page.
|
| void ClosePageIgnoringUnloadEvents();
|
| +
|
| + // Returns whether this RenderViewHost has an outstanding cross-site request.
|
| + // Cleared when we hear the response and start to swap out the old
|
| + // RenderViewHost, or if we hear a commit here without a network request.
|
| + bool HasPendingCrossSiteRequest();
|
| +
|
| + // Sets whether this RenderViewHost has an outstanding cross-site request,
|
| + // for which another renderer will need to run an onunload event handler.
|
| + // This is called before the first navigation event for this RenderViewHost,
|
| + // and cleared when we hear the response or commit.
|
| + void SetHasPendingCrossSiteRequest(bool has_pending_request);
|
|
|
| // Tells the renderer view to focus the first (last if reverse is true) node.
|
| void SetInitialFocus(bool reverse);
|
| @@ -499,6 +534,19 @@
|
| // See BindingsPolicy for details.
|
| int enabled_bindings_;
|
|
|
| + // Whether we should buffer outgoing Navigate messages rather than sending
|
| + // them. This will be true when a RenderViewHost is created for a cross-site
|
| + // request, until we hear back from the onbeforeunload handler of the old
|
| + // RenderViewHost.
|
| + // TODO(nasko): Move to RenderFrameHost, as this is per-frame state.
|
| + bool navigations_suspended_;
|
| +
|
| + // We only buffer the params for a suspended navigation while we have a
|
| + // pending RVH for a WebContentsImpl. There will only ever be one suspended
|
| + // navigation, because WebContentsImpl will destroy the pending RVH and create
|
| + // a new one if a second navigation occurs.
|
| + // TODO(nasko): Move to RenderFrameHost, as this is per-frame state.
|
| + scoped_ptr<FrameMsg_Navigate_Params> suspended_nav_params_;
|
|
|
| // The current state of this RVH.
|
| // TODO(nasko): Move to RenderFrameHost, as this is per-frame state.
|
|
|