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..d811b185f3946bdb1c1515bb8c14f1d51c3a3b8d 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_no, |
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_no, 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_no, |
is_main_frame, validated_url); |
} |
void WebNavigationTabObserver::DidCommitProvisionalLoadForFrame( |
- int64 frame_id, |
+ int64 frame_no, |
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_no, 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_no, |
is_main_frame, |
url, |
transition_type); |
@@ -357,7 +367,7 @@ void WebNavigationTabObserver::DidCommitProvisionalLoadForFrame( |
helpers::DispatchOnCommitted( |
keys::kOnHistoryStateUpdated, |
web_contents(), |
- frame_id, |
+ frame_no, |
is_main_frame, |
url, |
transition_type); |
@@ -370,7 +380,7 @@ void WebNavigationTabObserver::DidCommitProvisionalLoadForFrame( |
helpers::DispatchOnCommitted( |
keys::kOnCommitted, |
web_contents(), |
- frame_id, |
+ frame_no, |
is_main_frame, |
url, |
transition_type); |
@@ -378,7 +388,7 @@ void WebNavigationTabObserver::DidCommitProvisionalLoadForFrame( |
} |
void WebNavigationTabObserver::DidFailProvisionalLoad( |
- int64 frame_id, |
+ int64 frame_no, |
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_no, 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_no, is_main_frame, error_code); |
} |
void WebNavigationTabObserver::DocumentLoadedInFrame( |
- int64 frame_id, |
+ int64 frame_no, |
content::RenderViewHost* render_view_host) { |
if (render_view_host != render_view_host_) |
return; |
+ FrameNavigationState::FrameID frame_id( |
+ frame_no, 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_no); |
} |
void WebNavigationTabObserver::DidFinishLoad( |
- int64 frame_id, |
+ int64 frame_no, |
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_no, 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_no); |
} |
void WebNavigationTabObserver::DidFailLoad( |
- int64 frame_id, |
+ int64 frame_no, |
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_no, 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_no, 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_no) { |
+ FrameNavigationState::FrameID frame_id( |
+ source_frame_no, 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_no, |
+ 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->second, |
navigation_state_.GetUrl(*frame), |
- *frame, |
+ frame->first, |
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().first; |
+ |
+ 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.first); |
+ frame->process_id = frame_id.second; |
frame->error_occurred = navigation_state.GetErrorOccurredInFrame(frame_id); |
result_list.push_back(frame); |
} |