| Index: content/browser/frame_host/frame_tree_node.cc
|
| diff --git a/content/browser/frame_host/frame_tree_node.cc b/content/browser/frame_host/frame_tree_node.cc
|
| index cccb3ff18209b54ce0bec80d21889382628a0d8e..b8415a7e4a3caa409d67953de399c65bf72d43e8 100644
|
| --- a/content/browser/frame_host/frame_tree_node.cc
|
| +++ b/content/browser/frame_host/frame_tree_node.cc
|
| @@ -287,24 +287,26 @@ void FrameTreeNode::CreatedNavigationRequest(
|
| scoped_ptr<NavigationRequest> navigation_request) {
|
| CHECK(IsBrowserSideNavigationEnabled());
|
|
|
| + bool was_previously_loading = frame_tree()->IsLoading();
|
| +
|
| // There's no need to reset the state: there's still an ongoing load, and the
|
| // RenderFrameHostManager will take care of updates to the speculative
|
| // RenderFrameHost in DidCreateNavigationRequest below.
|
| - ResetNavigationRequest(true);
|
| + if (was_previously_loading)
|
| + ResetNavigationRequest(true);
|
| +
|
| + navigation_request_ = std::move(navigation_request);
|
| + render_manager()->DidCreateNavigationRequest(*navigation_request_);
|
|
|
| // Force the throbber to start to keep it in sync with what is happening in
|
| // the UI. Blink doesn't send throb notifications for JavaScript URLs, so it
|
| // is not done here either.
|
| - if (!navigation_request->common_params().url.SchemeIs(
|
| + if (!navigation_request_->common_params().url.SchemeIs(
|
| url::kJavaScriptScheme)) {
|
| // TODO(fdegans): Check if this is a same-document navigation and set the
|
| // proper argument.
|
| - DidStartLoading(true);
|
| + DidStartLoading(true, was_previously_loading);
|
| }
|
| -
|
| - navigation_request_ = std::move(navigation_request);
|
| -
|
| - render_manager()->DidCreateNavigationRequest(*navigation_request_);
|
| }
|
|
|
| void FrameTreeNode::ResetNavigationRequest(bool keep_state) {
|
| @@ -330,7 +332,8 @@ void FrameTreeNode::reset_loading_progress() {
|
| loading_progress_ = kLoadingProgressNotStarted;
|
| }
|
|
|
| -void FrameTreeNode::DidStartLoading(bool to_different_document) {
|
| +void FrameTreeNode::DidStartLoading(bool to_different_document,
|
| + bool was_previously_loading) {
|
| // Any main frame load to a new document should reset the load progress since
|
| // it will replace the current page and any frames. The WebContents will
|
| // be notified when DidChangeLoadProgress is called.
|
| @@ -338,7 +341,7 @@ void FrameTreeNode::DidStartLoading(bool to_different_document) {
|
| frame_tree_->ResetLoadProgress();
|
|
|
| // Notify the WebContents.
|
| - if (!frame_tree_->IsLoading())
|
| + if (!was_previously_loading)
|
| navigator()->GetDelegate()->DidStartLoading(this, to_different_document);
|
|
|
| // Set initial load progress and update overall progress. This will notify
|
| @@ -405,4 +408,26 @@ void FrameTreeNode::DidFocus() {
|
| FOR_EACH_OBSERVER(Observer, observers_, OnFrameTreeNodeFocused(this));
|
| }
|
|
|
| +void FrameTreeNode::BeforeUnloadCanceled() {
|
| + if (!IsMainFrame())
|
| + return;
|
| +
|
| + RenderFrameHostImpl* current_frame_host =
|
| + render_manager_.current_frame_host();
|
| + DCHECK(current_frame_host);
|
| + current_frame_host->ResetLoadingState();
|
| +
|
| + if (IsBrowserSideNavigationEnabled()) {
|
| + RenderFrameHostImpl* speculative_frame_host =
|
| + render_manager_.speculative_frame_host();
|
| + if (speculative_frame_host)
|
| + speculative_frame_host->ResetLoadingState();
|
| + } else {
|
| + RenderFrameHostImpl* pending_frame_host =
|
| + render_manager_.pending_frame_host();
|
| + if (pending_frame_host)
|
| + pending_frame_host->ResetLoadingState();
|
| + }
|
| +}
|
| +
|
| } // namespace content
|
|
|