Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1403)

Unified Diff: chrome/browser/extensions/api/web_navigation/web_navigation_api.cc

Issue 380213003: Harden WebNavigation API against invalid navigation callbacks (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 35d271bf122c42cc7cfd38e0c132fd3cb65f716a..a2b6363e00dbd0935af8934cc2b0508e24746c7a 100644
--- a/chrome/browser/extensions/api/web_navigation/web_navigation_api.cc
+++ b/chrome/browser/extensions/api/web_navigation/web_navigation_api.cc
@@ -373,7 +373,7 @@ void WebNavigationTabObserver::DidStartProvisionalLoadForFrame(
frame_id.frame_num,
is_main_frame,
parent_frame_id.frame_num,
- navigation_state_.IsMainFrame(parent_frame_id),
+ is_main_frame ? false : navigation_state_.IsMainFrame(parent_frame_id),
navigation_state_.GetUrl(frame_id));
}
@@ -753,9 +753,13 @@ bool WebNavigationGetFrameFunction::RunSync() {
frame_navigation_state.GetErrorOccurredInFrame(internal_frame_id);
FrameNavigationState::FrameID parent_frame_id =
frame_navigation_state.GetParentFrameID(internal_frame_id);
- frame_details.parent_frame_id = helpers::GetFrameId(
- frame_navigation_state.IsMainFrame(parent_frame_id),
- parent_frame_id.frame_num);
+ if (parent_frame_id.frame_num == -1) {
+ frame_details.parent_frame_id = -1;
+ } else {
+ frame_details.parent_frame_id =
+ helpers::GetFrameId(frame_navigation_state.IsMainFrame(parent_frame_id),
+ parent_frame_id.frame_num);
+ }
results_ = GetFrame::Results::Create(frame_details);
return true;
}
@@ -800,9 +804,13 @@ bool WebNavigationGetAllFramesFunction::RunSync() {
frame->url = frame_url.spec();
frame->frame_id = helpers::GetFrameId(
navigation_state.IsMainFrame(frame_id), frame_id.frame_num);
- frame->parent_frame_id = helpers::GetFrameId(
- navigation_state.IsMainFrame(parent_frame_id),
- parent_frame_id.frame_num);
+ if (parent_frame_id.frame_num == -1) {
+ frame->parent_frame_id = -1;
+ } else {
+ frame->parent_frame_id =
+ helpers::GetFrameId(navigation_state.IsMainFrame(parent_frame_id),
+ parent_frame_id.frame_num);
+ }
frame->process_id = frame_id.render_view_host->GetProcess()->GetID();
frame->error_occurred = navigation_state.GetErrorOccurredInFrame(frame_id);
result_list.push_back(frame);

Powered by Google App Engine
This is Rietveld 408576698