Index: chrome/browser/extensions/api/web_navigation/frame_navigation_state.cc |
diff --git a/chrome/browser/extensions/api/web_navigation/frame_navigation_state.cc b/chrome/browser/extensions/api/web_navigation/frame_navigation_state.cc |
index 766f04a78239a2a5bc5b8d0f93cdeae9a93f373d..4548eb54f52945542c60b72537512c941ff19f92 100644 |
--- a/chrome/browser/extensions/api/web_navigation/frame_navigation_state.cc |
+++ b/chrome/browser/extensions/api/web_navigation/frame_navigation_state.cc |
@@ -89,6 +89,7 @@ bool FrameNavigationState::IsValidUrl(const GURL& url) const { |
} |
void FrameNavigationState::TrackFrame(FrameID frame_id, |
+ FrameID parent_frame_id, |
const GURL& url, |
bool is_main_frame, |
bool is_error_page) { |
@@ -99,6 +100,12 @@ void FrameNavigationState::TrackFrame(FrameID frame_id, |
frame_state.is_navigating = true; |
frame_state.is_committed = false; |
frame_state.is_server_redirected = false; |
+ if (!is_main_frame) { |
+ frame_state.parent_frame_num = parent_frame_id.frame_num; |
+ } else { |
+ DCHECK(parent_frame_id.frame_num == -1); |
+ frame_state.parent_frame_num = -1; |
+ } |
frame_ids_.insert(frame_id); |
} |
@@ -156,6 +163,18 @@ FrameNavigationState::FrameID FrameNavigationState::GetMainFrameID() const { |
return main_frame_id_; |
} |
+FrameNavigationState::FrameID FrameNavigationState::GetParentFrameID( |
+ FrameID frame_id) const { |
+ FrameIdToStateMap::const_iterator frame_state = |
+ frame_state_map_.find(frame_id); |
+ if (frame_state == frame_state_map_.end()) { |
+ NOTREACHED(); |
+ return FrameID(); |
+ } |
+ return FrameID(frame_state->second.parent_frame_num, |
+ frame_id.render_view_host); |
+} |
+ |
void FrameNavigationState::SetErrorOccurredInFrame(FrameID frame_id) { |
DCHECK(frame_state_map_.find(frame_id) != frame_state_map_.end()); |
frame_state_map_[frame_id].error_occurred = true; |