| 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 998d971833ae4398cb8090aae1ba9f2c8ee57e03..2e0b3c628a37ee585eb2561fe61c5c4d76396df6 100644
|
| --- a/chrome/browser/extensions/api/web_navigation/web_navigation_api.cc
|
| +++ b/chrome/browser/extensions/api/web_navigation/web_navigation_api.cc
|
| @@ -317,7 +317,8 @@ void WebNavigationTabObserver::Observe(
|
| pending_render_view_host_ = NULL;
|
| else
|
| return;
|
| - SendErrorEvents(web_contents(), render_view_host);
|
| + SendErrorEvents(
|
| + web_contents(), render_view_host, FrameNavigationState::FrameID());
|
| break;
|
| }
|
|
|
| @@ -331,8 +332,11 @@ void WebNavigationTabObserver::AboutToNavigateRenderView(
|
| if (!render_view_host_) {
|
| render_view_host_ = render_view_host;
|
| } else if (render_view_host != render_view_host_) {
|
| - if (pending_render_view_host_)
|
| - SendErrorEvents(web_contents(), pending_render_view_host_);
|
| + if (pending_render_view_host_) {
|
| + SendErrorEvents(web_contents(),
|
| + pending_render_view_host_,
|
| + FrameNavigationState::FrameID());
|
| + }
|
| pending_render_view_host_ = render_view_host;
|
| }
|
| }
|
| @@ -372,12 +376,15 @@ void WebNavigationTabObserver::DidCommitProvisionalLoadForFrame(
|
| if (render_view_host != render_view_host_ &&
|
| render_view_host != pending_render_view_host_)
|
| return;
|
| - if (render_view_host != render_view_host_)
|
| - SendErrorEvents(web_contents(), render_view_host_);
|
| + FrameNavigationState::FrameID frame_id(frame_num, render_view_host);
|
| + FrameNavigationState::FrameID id_to_skip;
|
| + if (render_view_host == render_view_host_)
|
| + id_to_skip = frame_id;
|
| + if (is_main_frame)
|
| + SendErrorEvents(web_contents(), render_view_host_, id_to_skip);
|
| render_view_host_ = render_view_host;
|
| pending_render_view_host_ = NULL;
|
|
|
| - FrameNavigationState::FrameID frame_id(frame_num, render_view_host);
|
| if (!navigation_state_.CanSendEvents(frame_id))
|
| return;
|
|
|
| @@ -449,8 +456,10 @@ void WebNavigationTabObserver::DidFailProvisionalLoad(
|
| web_contents(), render_view_host->GetProcess()->GetID(), validated_url,
|
| frame_num, is_main_frame, error_code);
|
| }
|
| - if (stop_tracking_frames)
|
| - navigation_state_.StopTrackingFramesInRVH(render_view_host);
|
| + if (stop_tracking_frames) {
|
| + navigation_state_.StopTrackingFramesInRVH(render_view_host,
|
| + FrameNavigationState::FrameID());
|
| + }
|
| }
|
|
|
| void WebNavigationTabObserver::DocumentLoadedInFrame(
|
| @@ -537,28 +546,31 @@ void WebNavigationTabObserver::DidOpenRequestedURL(
|
| void WebNavigationTabObserver::WebContentsDestroyed(content::WebContents* tab) {
|
| g_tab_observer.Get().erase(tab);
|
| registrar_.RemoveAll();
|
| - SendErrorEvents(tab, NULL);
|
| + SendErrorEvents(tab, NULL, FrameNavigationState::FrameID());
|
| }
|
|
|
| void WebNavigationTabObserver::SendErrorEvents(
|
| content::WebContents* web_contents,
|
| - content::RenderViewHost* render_view_host) {
|
| + content::RenderViewHost* render_view_host,
|
| + FrameNavigationState::FrameID id_to_skip) {
|
| for (FrameNavigationState::const_iterator frame = navigation_state_.begin();
|
| frame != navigation_state_.end(); ++frame) {
|
| if (!navigation_state_.GetNavigationCompleted(*frame) &&
|
| navigation_state_.CanSendEvents(*frame) &&
|
| + *frame != id_to_skip &&
|
| (!render_view_host || frame->render_view_host == render_view_host)) {
|
| + navigation_state_.SetErrorOccurredInFrame(*frame);
|
| helpers::DispatchOnErrorOccurred(
|
| - web_contents,
|
| - frame->render_view_host->GetProcess()->GetID(),
|
| - navigation_state_.GetUrl(*frame),
|
| - frame->frame_num,
|
| - navigation_state_.IsMainFrame(*frame),
|
| - net::ERR_ABORTED);
|
| + web_contents,
|
| + frame->render_view_host->GetProcess()->GetID(),
|
| + navigation_state_.GetUrl(*frame),
|
| + frame->frame_num,
|
| + navigation_state_.IsMainFrame(*frame),
|
| + net::ERR_ABORTED);
|
| }
|
| }
|
| if (render_view_host)
|
| - navigation_state_.StopTrackingFramesInRVH(render_view_host);
|
| + navigation_state_.StopTrackingFramesInRVH(render_view_host, id_to_skip);
|
| }
|
|
|
| // See also NavigationController::IsURLInPageNavigation.
|
|
|