Commit 51375b13 authored by jochen@chromium.org's avatar jochen@chromium.org

Really ignore events for replacement content in the webnavigation api and...

Really ignore events for replacement content in the webnavigation api and discard a pending RVH if the primary one crashes

BUG=139117
TEST=no flakiness


Review URL: https://chromiumcodereview.appspot.com/10824241

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@151022 0039d316-1c4b-4281-b951-d872f2087c98
parent c002e757
...@@ -107,8 +107,7 @@ void FrameNavigationState::StopTrackingFramesInRVH( ...@@ -107,8 +107,7 @@ void FrameNavigationState::StopTrackingFramesInRVH(
FrameID id_to_skip) { FrameID id_to_skip) {
for (std::set<FrameID>::iterator frame = frame_ids_.begin(); for (std::set<FrameID>::iterator frame = frame_ids_.begin();
frame != frame_ids_.end();) { frame != frame_ids_.end();) {
if (frame->render_view_host != render_view_host || if (frame->render_view_host != render_view_host || *frame == id_to_skip) {
*frame == id_to_skip) {
++frame; ++frame;
continue; continue;
} }
......
...@@ -323,12 +323,19 @@ void WebNavigationTabObserver::Observe( ...@@ -323,12 +323,19 @@ void WebNavigationTabObserver::Observe(
case content::NOTIFICATION_RENDER_VIEW_HOST_DELETED: { case content::NOTIFICATION_RENDER_VIEW_HOST_DELETED: {
content::RenderViewHost* render_view_host = content::RenderViewHost* render_view_host =
content::Source<content::RenderViewHost>(source).ptr(); content::Source<content::RenderViewHost>(source).ptr();
if (render_view_host == render_view_host_) if (render_view_host == render_view_host_) {
render_view_host_ = NULL; 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; pending_render_view_host_ = NULL;
else }
} else if (render_view_host == pending_render_view_host_) {
pending_render_view_host_ = NULL;
} else {
return; return;
}
SendErrorEvents( SendErrorEvents(
web_contents(), render_view_host, FrameNavigationState::FrameID()); web_contents(), render_view_host, FrameNavigationState::FrameID());
break; break;
...@@ -506,6 +513,10 @@ void WebNavigationTabObserver::DidFinishLoad( ...@@ -506,6 +513,10 @@ void WebNavigationTabObserver::DidFinishLoad(
if (render_view_host != render_view_host_) if (render_view_host != render_view_host_)
return; return;
FrameNavigationState::FrameID frame_id(frame_num, render_view_host); 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); navigation_state_.SetNavigationCompleted(frame_id);
if (!navigation_state_.CanSendEvents(frame_id)) if (!navigation_state_.CanSendEvents(frame_id))
return; return;
...@@ -527,7 +538,8 @@ void WebNavigationTabObserver::DidFailLoad( ...@@ -527,7 +538,8 @@ void WebNavigationTabObserver::DidFailLoad(
if (render_view_host != render_view_host_) if (render_view_host != render_view_host_)
return; return;
FrameNavigationState::FrameID frame_id(frame_num, render_view_host); 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)) if (!navigation_state_.IsValidFrame(frame_id))
return; return;
if (navigation_state_.CanSendEvents(frame_id)) { if (navigation_state_.CanSendEvents(frame_id)) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment