Index: chrome_frame/chrome_active_document.cc |
=================================================================== |
--- chrome_frame/chrome_active_document.cc (revision 71338) |
+++ chrome_frame/chrome_active_document.cc (working copy) |
@@ -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 @@ |
<< ", 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 @@ |
return; |
} |
- UpdateNavigationState(nav_info); |
+ UpdateNavigationState(nav_info, 0); |
} |
void ChromeActiveDocument::OnCloseTab() { |
@@ -707,7 +708,7 @@ |
} |
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 @@ |
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 @@ |
} |
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; |