summaryrefslogtreecommitdiffstats
path: root/chrome_frame/chrome_active_document.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome_frame/chrome_active_document.cc')
-rw-r--r--chrome_frame/chrome_active_document.cc19
1 files changed, 14 insertions, 5 deletions
diff --git a/chrome_frame/chrome_active_document.cc b/chrome_frame/chrome_active_document.cc
index 7ee0026..8c076e4 100644
--- a/chrome_frame/chrome_active_document.cc
+++ b/chrome_frame/chrome_active_document.cc
@@ -830,11 +830,20 @@ void ChromeActiveDocument::UpdateNavigationState(
title.AsInput(), NULL);
}
- // It is important that we only update the navigation_info_ after we have
- // finalized the travel log. This is because IE will ask for information
- // such as navigation index when the travel log is finalized and we need
- // supply the old index and not the new one.
- *navigation_info_ = new_navigation_info;
+ // There are cases in which we receive NavigationStateChanged events for
+ // provisional loads. These events will contain a new URL but will not be
+ // considered new navigations since their navigation_index is 0. For these
+ // events, do not update the navigation_info_ state, as this will muck up the
+ // travel log when the subsequent committed navigation event takes place.
+ if (IsNewNavigation(new_navigation_info, flags) ||
+ new_navigation_info.url == navigation_info_->url) {
+ // It is important that we only update the navigation_info_ after we have
+ // finalized the travel log. This is because IE will ask for information
+ // such as navigation index when the travel log is finalized and we need
+ // supply the old index and not the new one.
+ *navigation_info_ = new_navigation_info;
+ }
+
// Update the IE zone here. Ideally we would like to do it when the active
// document is activated. However that does not work at times as the frame we
// get there is not the actual frame which handles the command.