summaryrefslogtreecommitdiffstats
path: root/chrome_frame/chrome_active_document.cc
diff options
context:
space:
mode:
authorananta@chromium.org <ananta@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-01-15 00:28:45 +0000
committerananta@chromium.org <ananta@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-01-15 00:28:45 +0000
commit747bca1dea711a6bd3c38dec7e0903bb9e0035a9 (patch)
tree204c3a6b4a1d38a06c77e75250089130bbf5f603 /chrome_frame/chrome_active_document.cc
parent9f701fdbb0388152a3ce5ef01cc9b8fa43a5a315 (diff)
downloadchromium_src-747bca1dea711a6bd3c38dec7e0903bb9e0035a9.zip
chromium_src-747bca1dea711a6bd3c38dec7e0903bb9e0035a9.tar.gz
chromium_src-747bca1dea711a6bd3c38dec7e0903bb9e0035a9.tar.bz2
Fix a ChromeFrame Back Forward navigation issue which occurs when we modify the IE history
while processing a navigation update received for a tab loading state change. This is incorrectly treated as an internal navigation which messes up the history. Fix is to not treat the tab loading state change notification as an internal navigation. Fixes bug http://code.google.com/p/chromium/issues/detail?id=69096 BUG=69096 TEST=None at this point. Review URL: http://codereview.chromium.org/6284002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@71524 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome_frame/chrome_active_document.cc')
-rw-r--r--chrome_frame/chrome_active_document.cc23
1 files changed, 15 insertions, 8 deletions
diff --git a/chrome_frame/chrome_active_document.cc b/chrome_frame/chrome_active_document.cc
index 3a0a58b..01ce8b6 100644
--- a/chrome_frame/chrome_active_document.cc
+++ b/chrome_frame/chrome_active_document.cc
@@ -33,6 +33,7 @@
#include "grit/generated_resources.h"
#include "chrome/app/chrome_command_ids.h"
#include "chrome/app/chrome_dll_resource.h"
+#include "chrome/browser/tab_contents/tab_contents.h"
#include "chrome/common/chrome_constants.h"
#include "chrome/common/navigation_types.h"
#include "chrome/common/page_zoom.h"
@@ -627,7 +628,7 @@ void ChromeActiveDocument::OnNavigationStateChanged(
<< ", Relative Offset: " << nav_info.relative_offset
<< ", Index: " << nav_info.navigation_index;
- UpdateNavigationState(nav_info);
+ UpdateNavigationState(nav_info, flags);
}
void ChromeActiveDocument::OnUpdateTargetUrl(
@@ -692,7 +693,7 @@ void ChromeActiveDocument::OnDidNavigate(const NavigationInfo& nav_info) {
return;
}
- UpdateNavigationState(nav_info);
+ UpdateNavigationState(nav_info, 0);
}
void ChromeActiveDocument::OnCloseTab() {
@@ -707,7 +708,7 @@ void ChromeActiveDocument::OnCloseTab() {
}
void ChromeActiveDocument::UpdateNavigationState(
- const NavigationInfo& new_navigation_info) {
+ const NavigationInfo& new_navigation_info, int flags) {
HRESULT hr = S_OK;
bool is_title_changed = (navigation_info_.title != new_navigation_info.title);
bool is_ssl_state_changed =
@@ -754,7 +755,7 @@ void ChromeActiveDocument::UpdateNavigationState(
cf_url.attach_to_external_tab();
bool is_internal_navigation =
- IsNewNavigation(new_navigation_info) || is_attach_external_tab_url;
+ IsNewNavigation(new_navigation_info, flags) || is_attach_external_tab_url;
if (new_navigation_info.url.is_valid())
url_.Allocate(UTF8ToWide(new_navigation_info.url.spec()).c_str());
@@ -1364,14 +1365,20 @@ void ChromeActiveDocument::SetWindowDimensions() {
}
bool ChromeActiveDocument::IsNewNavigation(
- const NavigationInfo& new_navigation_info) const {
+ const NavigationInfo& new_navigation_info, int flags) const {
// A new navigation is typically an internal navigation which is initiated by
// the renderer(WebKit). Condition 1 below has to be true along with the
// any of the other conditions below.
- // 1. The navigation index is greater than 0 which means that a top level
+ // 1. The navigation notification flags passed in as the flags parameter
+ // is not INVALIDATE_LOAD which indicates that the loading state of the
+ // tab changed.
+ // 2. The navigation index is greater than 0 which means that a top level
// navigation was initiated on the current external tab.
- // 2. The navigation type has changed.
- // 3. The url or the referrer are different.
+ // 3. The navigation type has changed.
+ // 4. The url or the referrer are different.
+ if (flags == TabContents::INVALIDATE_LOAD)
+ return false;
+
if (new_navigation_info.navigation_index <= 0)
return false;