| 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 a21a6eac849e0fca58a5659ded1c3150d1c6fb45..982f7863c6310c1b31512983ea2550eafeac3a82 100644
|
| --- a/chrome/browser/extensions/api/web_navigation/web_navigation_api.cc
|
| +++ b/chrome/browser/extensions/api/web_navigation/web_navigation_api.cc
|
| @@ -179,7 +179,10 @@ void WebNavigationEventRouter::Retargeting(const RetargetingDetails* details) {
|
| const FrameNavigationState& frame_navigation_state =
|
| tab_observer->frame_navigation_state();
|
|
|
| - if (!frame_navigation_state.CanSendEvents(details->source_frame_id))
|
| + FrameNavigationState::FrameID frame_id(
|
| + details->source_frame_id,
|
| + details->source_web_contents->GetRenderViewHost()->GetProcess()->GetID());
|
| + if (!frame_navigation_state.CanSendEvents(frame_id))
|
| return;
|
|
|
| // If the WebContents was created as a response to an IPC from a renderer
|
| @@ -192,7 +195,7 @@ void WebNavigationEventRouter::Retargeting(const RetargetingDetails* details) {
|
| PendingWebContents(
|
| details->source_web_contents,
|
| details->source_frame_id,
|
| - frame_navigation_state.IsMainFrame(details->source_frame_id),
|
| + frame_navigation_state.IsMainFrame(frame_id),
|
| details->target_web_contents,
|
| details->target_url);
|
| } else {
|
| @@ -200,7 +203,7 @@ void WebNavigationEventRouter::Retargeting(const RetargetingDetails* details) {
|
| details->source_web_contents,
|
| details->target_web_contents->GetBrowserContext(),
|
| details->source_frame_id,
|
| - frame_navigation_state.IsMainFrame(details->source_frame_id),
|
| + frame_navigation_state.IsMainFrame(frame_id),
|
| details->target_web_contents,
|
| details->target_url);
|
| }
|
| @@ -267,7 +270,9 @@ void WebNavigationTabObserver::Observe(
|
| resource_redirect_details->resource_type;
|
| if (resource_type == ResourceType::MAIN_FRAME ||
|
| resource_type == ResourceType::SUB_FRAME) {
|
| - int64 frame_id = resource_redirect_details->frame_id;
|
| + FrameNavigationState::FrameID frame_id(
|
| + resource_redirect_details->frame_id,
|
| + resource_redirect_details->origin_child_id);
|
| if (!navigation_state_.CanSendEvents(frame_id))
|
| return;
|
| navigation_state_.SetIsServerRedirected(frame_id);
|
| @@ -292,7 +297,7 @@ void WebNavigationTabObserver::AboutToNavigateRenderView(
|
| }
|
|
|
| void WebNavigationTabObserver::DidStartProvisionalLoadForFrame(
|
| - int64 frame_id,
|
| + int64 frame_num,
|
| bool is_main_frame,
|
| const GURL& validated_url,
|
| bool is_error_page,
|
| @@ -303,6 +308,9 @@ void WebNavigationTabObserver::DidStartProvisionalLoadForFrame(
|
| render_view_host != pending_render_view_host_)
|
| return;
|
|
|
| + FrameNavigationState::FrameID frame_id(
|
| + frame_num, render_view_host->GetProcess()->GetID());
|
| +
|
| navigation_state_.TrackFrame(frame_id,
|
| validated_url,
|
| is_main_frame,
|
| @@ -311,12 +319,12 @@ void WebNavigationTabObserver::DidStartProvisionalLoadForFrame(
|
| return;
|
|
|
| helpers::DispatchOnBeforeNavigate(
|
| - web_contents(), render_view_host->GetProcess()->GetID(), frame_id,
|
| + web_contents(), render_view_host->GetProcess()->GetID(), frame_num,
|
| is_main_frame, validated_url);
|
| }
|
|
|
| void WebNavigationTabObserver::DidCommitProvisionalLoadForFrame(
|
| - int64 frame_id,
|
| + int64 frame_num,
|
| bool is_main_frame,
|
| const GURL& url,
|
| content::PageTransition transition_type,
|
| @@ -329,6 +337,8 @@ void WebNavigationTabObserver::DidCommitProvisionalLoadForFrame(
|
| render_view_host_ = render_view_host;
|
| pending_render_view_host_ = NULL;
|
|
|
| + FrameNavigationState::FrameID frame_id(
|
| + frame_num, render_view_host->GetProcess()->GetID());
|
| if (!navigation_state_.CanSendEvents(frame_id))
|
| return;
|
|
|
| @@ -345,7 +355,7 @@ void WebNavigationTabObserver::DidCommitProvisionalLoadForFrame(
|
| helpers::DispatchOnCommitted(
|
| keys::kOnReferenceFragmentUpdated,
|
| web_contents(),
|
| - frame_id,
|
| + frame_num,
|
| is_main_frame,
|
| url,
|
| transition_type);
|
| @@ -357,7 +367,7 @@ void WebNavigationTabObserver::DidCommitProvisionalLoadForFrame(
|
| helpers::DispatchOnCommitted(
|
| keys::kOnHistoryStateUpdated,
|
| web_contents(),
|
| - frame_id,
|
| + frame_num,
|
| is_main_frame,
|
| url,
|
| transition_type);
|
| @@ -370,7 +380,7 @@ void WebNavigationTabObserver::DidCommitProvisionalLoadForFrame(
|
| helpers::DispatchOnCommitted(
|
| keys::kOnCommitted,
|
| web_contents(),
|
| - frame_id,
|
| + frame_num,
|
| is_main_frame,
|
| url,
|
| transition_type);
|
| @@ -378,7 +388,7 @@ void WebNavigationTabObserver::DidCommitProvisionalLoadForFrame(
|
| }
|
|
|
| void WebNavigationTabObserver::DidFailProvisionalLoad(
|
| - int64 frame_id,
|
| + int64 frame_num,
|
| bool is_main_frame,
|
| const GURL& validated_url,
|
| int error_code,
|
| @@ -390,35 +400,41 @@ void WebNavigationTabObserver::DidFailProvisionalLoad(
|
| if (render_view_host == pending_render_view_host_)
|
| pending_render_view_host_ = NULL;
|
|
|
| + FrameNavigationState::FrameID frame_id(
|
| + frame_num, render_view_host->GetProcess()->GetID());
|
| if (!navigation_state_.CanSendEvents(frame_id))
|
| return;
|
|
|
| navigation_state_.SetErrorOccurredInFrame(frame_id);
|
| helpers::DispatchOnErrorOccurred(
|
| web_contents(), render_view_host->GetProcess()->GetID(), validated_url,
|
| - frame_id, is_main_frame, error_code);
|
| + frame_num, is_main_frame, error_code);
|
| }
|
|
|
| void WebNavigationTabObserver::DocumentLoadedInFrame(
|
| - int64 frame_id,
|
| + int64 frame_num,
|
| content::RenderViewHost* render_view_host) {
|
| if (render_view_host != render_view_host_)
|
| return;
|
| + FrameNavigationState::FrameID frame_id(
|
| + frame_num, render_view_host->GetProcess()->GetID());
|
| if (!navigation_state_.CanSendEvents(frame_id))
|
| return;
|
| helpers::DispatchOnDOMContentLoaded(web_contents(),
|
| navigation_state_.GetUrl(frame_id),
|
| navigation_state_.IsMainFrame(frame_id),
|
| - frame_id);
|
| + frame_num);
|
| }
|
|
|
| void WebNavigationTabObserver::DidFinishLoad(
|
| - int64 frame_id,
|
| + int64 frame_num,
|
| const GURL& validated_url,
|
| bool is_main_frame,
|
| content::RenderViewHost* render_view_host) {
|
| if (render_view_host != render_view_host_)
|
| return;
|
| + FrameNavigationState::FrameID frame_id(
|
| + frame_num, render_view_host->GetProcess()->GetID());
|
| if (!navigation_state_.CanSendEvents(frame_id))
|
| return;
|
| navigation_state_.SetNavigationCompleted(frame_id);
|
| @@ -427,11 +443,11 @@ void WebNavigationTabObserver::DidFinishLoad(
|
| helpers::DispatchOnCompleted(web_contents(),
|
| validated_url,
|
| is_main_frame,
|
| - frame_id);
|
| + frame_num);
|
| }
|
|
|
| void WebNavigationTabObserver::DidFailLoad(
|
| - int64 frame_id,
|
| + int64 frame_num,
|
| const GURL& validated_url,
|
| bool is_main_frame,
|
| int error_code,
|
| @@ -439,12 +455,14 @@ void WebNavigationTabObserver::DidFailLoad(
|
| content::RenderViewHost* render_view_host) {
|
| if (render_view_host != render_view_host_)
|
| return;
|
| + FrameNavigationState::FrameID frame_id(
|
| + frame_num, render_view_host->GetProcess()->GetID());
|
| if (!navigation_state_.CanSendEvents(frame_id))
|
| return;
|
| navigation_state_.SetErrorOccurredInFrame(frame_id);
|
| helpers::DispatchOnErrorOccurred(
|
| web_contents(), render_view_host->GetProcess()->GetID(), validated_url,
|
| - frame_id, is_main_frame, error_code);
|
| + frame_num, is_main_frame, error_code);
|
| }
|
|
|
| void WebNavigationTabObserver::DidOpenRequestedURL(
|
| @@ -453,8 +471,10 @@ void WebNavigationTabObserver::DidOpenRequestedURL(
|
| const content::Referrer& referrer,
|
| WindowOpenDisposition disposition,
|
| content::PageTransition transition,
|
| - int64 source_frame_id) {
|
| - if (!navigation_state_.CanSendEvents(source_frame_id))
|
| + int64 source_frame_num) {
|
| + FrameNavigationState::FrameID frame_id(
|
| + source_frame_num, render_view_host_->GetProcess()->GetID());
|
| + if (!navigation_state_.CanSendEvents(frame_id))
|
| return;
|
|
|
| // We only send the onCreatedNavigationTarget if we end up creating a new
|
| @@ -470,8 +490,8 @@ void WebNavigationTabObserver::DidOpenRequestedURL(
|
| helpers::DispatchOnCreatedNavigationTarget(
|
| web_contents(),
|
| new_contents->GetBrowserContext(),
|
| - source_frame_id,
|
| - navigation_state_.IsMainFrame(source_frame_id),
|
| + source_frame_num,
|
| + navigation_state_.IsMainFrame(frame_id),
|
| new_contents,
|
| url);
|
| }
|
| @@ -484,9 +504,9 @@ void WebNavigationTabObserver::WebContentsDestroyed(content::WebContents* tab) {
|
| navigation_state_.CanSendEvents(*frame)) {
|
| helpers::DispatchOnErrorOccurred(
|
| tab,
|
| - tab->GetRenderViewHost()->GetProcess()->GetID(),
|
| + frame->render_process_id,
|
| navigation_state_.GetUrl(*frame),
|
| - *frame,
|
| + frame->frame_num,
|
| navigation_state_.IsMainFrame(*frame),
|
| net::ERR_ABORTED);
|
| }
|
| @@ -495,7 +515,7 @@ void WebNavigationTabObserver::WebContentsDestroyed(content::WebContents* tab) {
|
|
|
| // See also NavigationController::IsURLInPageNavigation.
|
| bool WebNavigationTabObserver::IsReferenceFragmentNavigation(
|
| - int64 frame_id,
|
| + FrameNavigationState::FrameID frame_id,
|
| const GURL& url) {
|
| GURL existing_url = navigation_state_.GetUrl(frame_id);
|
| if (existing_url == url)
|
| @@ -512,6 +532,7 @@ bool GetFrameFunction::RunImpl() {
|
| EXTENSION_FUNCTION_VALIDATE(params.get());
|
| int tab_id = params->details.tab_id;
|
| int frame_id = params->details.frame_id;
|
| + int process_id = params->details.process_id;
|
|
|
| SetResult(Value::CreateNullValue());
|
|
|
| @@ -535,18 +556,20 @@ bool GetFrameFunction::RunImpl() {
|
| observer->frame_navigation_state();
|
|
|
| if (frame_id == 0)
|
| - frame_id = frame_navigation_state.GetMainFrameID();
|
| - if (!frame_navigation_state.IsValidFrame(frame_id))
|
| + frame_id = frame_navigation_state.GetMainFrameID().frame_num;
|
| +
|
| + FrameNavigationState::FrameID internal_frame_id(frame_id, process_id);
|
| + if (!frame_navigation_state.IsValidFrame(internal_frame_id))
|
| return true;
|
|
|
| - GURL frame_url = frame_navigation_state.GetUrl(frame_id);
|
| + GURL frame_url = frame_navigation_state.GetUrl(internal_frame_id);
|
| if (!frame_navigation_state.IsValidUrl(frame_url))
|
| return true;
|
|
|
| GetFrame::Results::Details frame_details;
|
| frame_details.url = frame_url.spec();
|
| frame_details.error_occurred =
|
| - frame_navigation_state.GetErrorOccurredInFrame(frame_id);
|
| + frame_navigation_state.GetErrorOccurredInFrame(internal_frame_id);
|
| results_ = GetFrame::Results::Create(frame_details);
|
| return true;
|
| }
|
| @@ -580,7 +603,7 @@ bool GetAllFramesFunction::RunImpl() {
|
| std::vector<linked_ptr<GetAllFrames::Results::DetailsElement> > result_list;
|
| for (FrameNavigationState::const_iterator it = navigation_state.begin();
|
| it != navigation_state.end(); ++it) {
|
| - int64 frame_id = *it;
|
| + FrameNavigationState::FrameID frame_id = *it;
|
| GURL frame_url = navigation_state.GetUrl(frame_id);
|
| if (!navigation_state.IsValidUrl(frame_url))
|
| continue;
|
| @@ -588,7 +611,8 @@ bool GetAllFramesFunction::RunImpl() {
|
| new GetAllFrames::Results::DetailsElement());
|
| frame->url = frame_url.spec();
|
| frame->frame_id = helpers::GetFrameId(
|
| - navigation_state.IsMainFrame(frame_id), frame_id);
|
| + navigation_state.IsMainFrame(frame_id), frame_id.frame_num);
|
| + frame->process_id = frame_id.render_process_id;
|
| frame->error_occurred = navigation_state.GetErrorOccurredInFrame(frame_id);
|
| result_list.push_back(frame);
|
| }
|
|
|