Index: chrome/browser/extensions/api/web_navigation/web_navigation_api.cc |
diff --git a/chrome/browser/extensions/api/web_navigation/web_navigation_api.cc b/chrome/browser/extensions/api/web_navigation/web_navigation_api.cc |
index 93fd5add6911b157cfff3c2673cdb36e0ef22022..65645877b8a259e5d8d4b78580221cf23ec3d49b 100644 |
--- a/chrome/browser/extensions/api/web_navigation/web_navigation_api.cc |
+++ b/chrome/browser/extensions/api/web_navigation/web_navigation_api.cc |
@@ -323,12 +323,19 @@ void WebNavigationTabObserver::Observe( |
case content::NOTIFICATION_RENDER_VIEW_HOST_DELETED: { |
content::RenderViewHost* render_view_host = |
content::Source<content::RenderViewHost>(source).ptr(); |
- if (render_view_host == render_view_host_) |
+ if (render_view_host == render_view_host_) { |
render_view_host_ = NULL; |
- else if (render_view_host == pending_render_view_host_) |
+ if (pending_render_view_host_) { |
+ SendErrorEvents(web_contents(), |
+ pending_render_view_host_, |
+ FrameNavigationState::FrameID()); |
+ pending_render_view_host_ = NULL; |
+ } |
+ } else if (render_view_host == pending_render_view_host_) { |
pending_render_view_host_ = NULL; |
- else |
+ } else { |
return; |
+ } |
SendErrorEvents( |
web_contents(), render_view_host, FrameNavigationState::FrameID()); |
break; |
@@ -506,6 +513,10 @@ void WebNavigationTabObserver::DidFinishLoad( |
if (render_view_host != render_view_host_) |
return; |
FrameNavigationState::FrameID frame_id(frame_num, render_view_host); |
+ // When showing replacement content, we might get load signals for frames |
+ // that weren't reguarly loaded. |
+ if (!navigation_state_.IsValidFrame(frame_id)) |
+ return; |
navigation_state_.SetNavigationCompleted(frame_id); |
if (!navigation_state_.CanSendEvents(frame_id)) |
return; |
@@ -527,7 +538,8 @@ void WebNavigationTabObserver::DidFailLoad( |
if (render_view_host != render_view_host_) |
return; |
FrameNavigationState::FrameID frame_id(frame_num, render_view_host); |
- // A navigation might fail before we even started a provisional load. |
+ // When showing replacement content, we might get load signals for frames |
+ // that weren't reguarly loaded. |
if (!navigation_state_.IsValidFrame(frame_id)) |
return; |
if (navigation_state_.CanSendEvents(frame_id)) { |