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(
FrameID id_to_skip) {
for (std::set<FrameID>::iterator frame = frame_ids_.begin();
frame != frame_ids_.end();) {
if (frame->render_view_host != render_view_host ||
*frame == id_to_skip) {
if (frame->render_view_host != render_view_host || *frame == id_to_skip) {
++frame;
continue;
}
......
......@@ -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)) {
......
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