Index: content/browser/frame_host/render_frame_host_impl.cc |
diff --git a/content/browser/frame_host/render_frame_host_impl.cc b/content/browser/frame_host/render_frame_host_impl.cc |
index d4cc6f50c5f352ef7c908d8f5601785b97335ec6..604c3ce8aea5c2f078b1c7595201648abbbbdfff 100644 |
--- a/content/browser/frame_host/render_frame_host_impl.cc |
+++ b/content/browser/frame_host/render_frame_host_impl.cc |
@@ -385,6 +385,10 @@ bool RenderFrameHostImpl::OnMessageReceived(const IPC::Message &msg) { |
// The following message is synthetic and doesn't come from RenderFrame, but |
// from RenderProcessHost. |
IPC_MESSAGE_HANDLER(FrameHostMsg_RenderProcessGone, OnRenderProcessGone) |
+ IPC_MESSAGE_HANDLER(FrameHostMsg_DidStartLoading, OnDidStartLoading) |
+ IPC_MESSAGE_HANDLER(FrameHostMsg_DidStopLoading, OnDidStopLoading) |
+ IPC_MESSAGE_HANDLER(FrameHostMsg_DidChangeLoadProgress, |
+ OnDidChangeLoadProgress) |
#if defined(OS_MACOSX) || defined(OS_ANDROID) |
IPC_MESSAGE_HANDLER(FrameHostMsg_ShowPopup, OnShowPopup) |
IPC_MESSAGE_HANDLER(FrameHostMsg_HidePopup, OnHidePopup) |
@@ -842,11 +846,11 @@ void RenderFrameHostImpl::OnDidCommitProvisionalLoad(const IPC::Message& msg) { |
} |
void RenderFrameHostImpl::OnDidDropNavigation() { |
- // At the end of Navigate(), the delegate's DidStartLoading is called to force |
- // the spinner to start, even if the renderer didn't yet begin the load. If it |
- // turns out that the renderer dropped the navigation, we need to turn off the |
- // spinner. |
- delegate_->DidStopLoading(); |
+ // At the end of Navigate(), the Navigator's DidStartLoading is called to |
+ // force the spinner to start, even if the renderer didn't yet begin the load. |
+ // If it turns out that the renderer dropped the navigation, the spinner needs |
+ // to be turned off. |
+ frame_tree_node_->navigator()->DidStopLoading(); |
Fabrice (no longer in Chrome)
2015/04/14 16:54:11
We have to go through the navigator here because c
nasko
2015/04/14 19:54:41
I don't quite follow. During Navigate() we simulat
Fabrice (no longer in Chrome)
2015/04/15 15:15:03
I think this is going to break some tests, trying
nasko
2015/04/15 15:39:28
Different CL or a new patchset?
Fabrice (no longer in Chrome)
2015/04/15 17:46:05
New patchset, sorry.
|
} |
RenderWidgetHostImpl* RenderFrameHostImpl::GetRenderWidgetHost() { |
@@ -1403,6 +1407,45 @@ void RenderFrameHostImpl::OnToggleFullscreen(bool enter_fullscreen) { |
render_view_host_->WasResized(); |
} |
+void RenderFrameHostImpl::OnDidStartLoading(bool to_different_document) { |
+ // Any main frame load to a new document should reset the load since it will |
+ // replace the current page and any frames. |
+ if (to_different_document && !GetParent()) |
+ is_loading_ = false; |
+ |
+ // This method should never be called when the frame is loading. |
+ // Unfortunately, it can happen if a history navigation happens during a |
+ // BeforeUnload or Unload event. |
+ // TODO(fdegans): Change this to a DCHECK after LoadEventProgress has been |
+ // refactored in Blink. See crbug.com/466089 |
+ if (is_loading_) { |
+ LOG(WARNING) << "OnDidStartLoading was called twice."; |
+ return; |
+ } |
+ |
+ frame_tree_node_->DidStartLoading(to_different_document); |
Fabrice (no longer in Chrome)
2015/04/14 16:54:11
Here and below, it is not clear to me that this wi
nasko
2015/04/14 19:54:41
It is the job of the FTN to ensure that it does th
Fabrice (no longer in Chrome)
2015/04/15 15:15:03
The main issue is you now have to consider 4 diffe
|
+ is_loading_ = true; |
+} |
+ |
+void RenderFrameHostImpl::OnDidStopLoading() { |
+ // This method should never be called when the frame is not loading. |
+ // Unfortunately, it can happen if a history navigation happens during a |
+ // BeforeUnload or Unload event. |
+ // TODO(fdegans): Change this to a DCHECK after LoadEventProgress has been |
+ // refactored in Blink. See crbug.com/466089 |
+ if (!is_loading_) { |
+ LOG(WARNING) << "OnDidStopLoading was called twice."; |
+ return; |
+ } |
+ |
+ is_loading_ = false; |
+ frame_tree_node_->DidStopLoading(); |
Fabrice (no longer in Chrome)
2015/04/14 16:54:11
Same as above, it is not clear we'll end up in Web
nasko
2015/04/14 19:54:41
Why do we care to know here whether we end up in W
Fabrice (no longer in Chrome)
2015/04/15 15:15:03
Acknowledged.
|
+} |
+ |
+void RenderFrameHostImpl::OnDidChangeLoadProgress(double load_progress) { |
+ frame_tree_node_->DidChangeLoadProgress(load_progress); |
+} |
+ |
#if defined(OS_MACOSX) || defined(OS_ANDROID) |
void RenderFrameHostImpl::OnShowPopup( |
const FrameHostMsg_ShowPopup_Params& params) { |
@@ -1573,7 +1616,7 @@ void RenderFrameHostImpl::Navigate( |
// Blink doesn't send throb notifications for JavaScript URLs, so we |
// don't want to either. |
if (!common_params.url.SchemeIs(url::kJavaScriptScheme)) |
- delegate_->DidStartLoading(this, true); |
+ frame_tree_node_->navigator()->DidStartLoading(frame_tree_node_, true); |
Fabrice (no longer in Chrome)
2015/04/14 16:54:11
Same as above, we need to go through the Navigator
nasko
2015/04/14 19:54:41
I don't think we need to. FTN is the object which
Fabrice (no longer in Chrome)
2015/04/15 15:15:03
Same as above, trying it in the next patch set.
|
} |
void RenderFrameHostImpl::NavigateToURL(const GURL& url) { |