summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
Diffstat (limited to 'chrome')
-rw-r--r--chrome/browser/omnibox_search_hint.cc2
-rw-r--r--chrome/browser/tab_contents/infobar_delegate.cc11
-rw-r--r--chrome/browser/tab_contents/infobar_delegate.h8
-rw-r--r--chrome/browser/translate/translate_infobar_delegate.cc10
-rw-r--r--chrome/browser/translate/translate_infobar_delegate.h4
-rw-r--r--chrome/browser/translate/translate_manager_browsertest.cc7
-rw-r--r--chrome/browser/ui/browser_init.cc2
-rw-r--r--chrome/browser/ui/cocoa/keystone_infobar.mm2
-rw-r--r--chrome/browser/ui/tab_contents/tab_contents_wrapper.cc6
9 files changed, 33 insertions, 19 deletions
diff --git a/chrome/browser/omnibox_search_hint.cc b/chrome/browser/omnibox_search_hint.cc
index 375db47..6121dc60 100644
--- a/chrome/browser/omnibox_search_hint.cc
+++ b/chrome/browser/omnibox_search_hint.cc
@@ -100,7 +100,7 @@ HintInfoBar::~HintInfoBar() {
bool HintInfoBar::ShouldExpire(
const NavigationController::LoadCommittedDetails& details) const {
- return should_expire_;
+ return details.is_user_initiated_main_frame_load() && should_expire_;
}
void HintInfoBar::InfoBarDismissed() {
diff --git a/chrome/browser/tab_contents/infobar_delegate.cc b/chrome/browser/tab_contents/infobar_delegate.cc
index d0b04b7..d17bc11 100644
--- a/chrome/browser/tab_contents/infobar_delegate.cc
+++ b/chrome/browser/tab_contents/infobar_delegate.cc
@@ -21,6 +21,17 @@ bool InfoBarDelegate::EqualsDelegate(InfoBarDelegate* delegate) const {
bool InfoBarDelegate::ShouldExpire(
const NavigationController::LoadCommittedDetails& details) const {
+ // Only hide InfoBars when the user has done something that makes the main
+ // frame load. We don't want various automatic or subframe navigations making
+ // it disappear.
+ if (!details.is_user_initiated_main_frame_load())
+ return false;
+
+ return ShouldExpireInternal(details);
+}
+
+bool InfoBarDelegate::ShouldExpireInternal(
+ const NavigationController::LoadCommittedDetails& details) const {
return (contents_unique_id_ != details.entry->unique_id()) ||
(PageTransition::StripQualifier(details.entry->transition_type()) ==
PageTransition::RELOAD);
diff --git a/chrome/browser/tab_contents/infobar_delegate.h b/chrome/browser/tab_contents/infobar_delegate.h
index ea56a1e..dd12472 100644
--- a/chrome/browser/tab_contents/infobar_delegate.h
+++ b/chrome/browser/tab_contents/infobar_delegate.h
@@ -52,8 +52,8 @@ class InfoBarDelegate {
virtual bool EqualsDelegate(InfoBarDelegate* delegate) const;
// Returns true if the InfoBar should be closed automatically after the page
- // is navigated. The default behavior is to return true if the page is
- // navigated somewhere else or reloaded.
+ // is navigated. The default behavior is to return true if the user initiated
+ // navigation somewhere else or reloaded.
virtual bool ShouldExpire(
const NavigationController::LoadCommittedDetails& details) const;
@@ -91,6 +91,10 @@ class InfoBarDelegate {
// be expired from |contents_|.
void StoreActiveEntryUniqueID(TabContents* contents);
+ // Returns true if the navigation is to a new URL or a reload occured.
+ bool ShouldExpireInternal(
+ const NavigationController::LoadCommittedDetails& details) const;
+
private:
// The unique id of the active NavigationEntry of the TabContents that we were
// opened for. Used to help expire on navigations.
diff --git a/chrome/browser/translate/translate_infobar_delegate.cc b/chrome/browser/translate/translate_infobar_delegate.cc
index 3c39bce..76e6a4b 100644
--- a/chrome/browser/translate/translate_infobar_delegate.cc
+++ b/chrome/browser/translate/translate_infobar_delegate.cc
@@ -353,6 +353,16 @@ TranslateInfoBarDelegate::TranslateInfoBarDelegate(
}
}
+bool TranslateInfoBarDelegate::ShouldExpire(
+ const NavigationController::LoadCommittedDetails& details) const {
+ // Note: we allow closing this infobar even if the main frame navigation
+ // was programmatic and not initiated by the user - crbug.com/70261 .
+ if (!details.is_user_initiated_main_frame_load() && !details.is_main_frame)
+ return false;
+
+ return InfoBarDelegate::ShouldExpireInternal(details);
+}
+
void TranslateInfoBarDelegate::InfoBarDismissed() {
if (type_ != BEFORE_TRANSLATE)
return;
diff --git a/chrome/browser/translate/translate_infobar_delegate.h b/chrome/browser/translate/translate_infobar_delegate.h
index 03c196e..4ba31e6 100644
--- a/chrome/browser/translate/translate_infobar_delegate.h
+++ b/chrome/browser/translate/translate_infobar_delegate.h
@@ -9,7 +9,7 @@
#include <string>
#include <vector>
-#include "chrome/browser/tab_contents/confirm_infobar_delegate.h"
+#include "chrome/browser/tab_contents/infobar_delegate.h"
#include "chrome/browser/translate/translate_prefs.h"
#include "chrome/common/translate_errors.h"
@@ -163,6 +163,8 @@ class TranslateInfoBarDelegate : public InfoBarDelegate {
virtual void InfoBarDismissed() OVERRIDE;
virtual gfx::Image* GetIcon() const OVERRIDE;
virtual InfoBarDelegate::Type GetInfoBarType() const OVERRIDE;
+ virtual bool ShouldExpire(
+ const NavigationController::LoadCommittedDetails& details) const;
virtual TranslateInfoBarDelegate* AsTranslateInfoBarDelegate() OVERRIDE;
// Gets the host of the page being translated, or an empty string if no URL is
diff --git a/chrome/browser/translate/translate_manager_browsertest.cc b/chrome/browser/translate/translate_manager_browsertest.cc
index 797b2c6..e6da867 100644
--- a/chrome/browser/translate/translate_manager_browsertest.cc
+++ b/chrome/browser/translate/translate_manager_browsertest.cc
@@ -722,13 +722,6 @@ TEST_F(TranslateManagerTest, TranslateInPageNavigation) {
infobar = GetTranslateInfoBar();
ASSERT_TRUE(infobar != NULL);
- // Navigate in page, the same infobar should still be shown.
- ClearRemovedInfoBars();
- SimulateNavigation(GURL("http://www.google.fr/#ref1"), "fr",
- true);
- EXPECT_FALSE(InfoBarRemoved());
- EXPECT_EQ(infobar, GetTranslateInfoBar());
-
// Navigate out of page, a new infobar should show.
// See note in TranslateCloseInfoBarInPageNavigation test on why it is
// important to navigate to a page in a different language for this test.
diff --git a/chrome/browser/ui/browser_init.cc b/chrome/browser/ui/browser_init.cc
index ba68646..d825838 100644
--- a/chrome/browser/ui/browser_init.cc
+++ b/chrome/browser/ui/browser_init.cc
@@ -186,7 +186,7 @@ DefaultBrowserInfoBarDelegate::~DefaultBrowserInfoBarDelegate() {
bool DefaultBrowserInfoBarDelegate::ShouldExpire(
const NavigationController::LoadCommittedDetails& details) const {
- return should_expire_;
+ return details.is_user_initiated_main_frame_load() && should_expire_;
}
gfx::Image* DefaultBrowserInfoBarDelegate::GetIcon() const {
diff --git a/chrome/browser/ui/cocoa/keystone_infobar.mm b/chrome/browser/ui/cocoa/keystone_infobar.mm
index d9cd41c..b51c622 100644
--- a/chrome/browser/ui/cocoa/keystone_infobar.mm
+++ b/chrome/browser/ui/cocoa/keystone_infobar.mm
@@ -84,7 +84,7 @@ KeystonePromotionInfoBarDelegate::~KeystonePromotionInfoBarDelegate() {
bool KeystonePromotionInfoBarDelegate::ShouldExpire(
const NavigationController::LoadCommittedDetails& details) const {
- return can_expire_;
+ return details.is_user_initiated_main_frame_load() && can_expire_;
}
gfx::Image* KeystonePromotionInfoBarDelegate::GetIcon() const {
diff --git a/chrome/browser/ui/tab_contents/tab_contents_wrapper.cc b/chrome/browser/ui/tab_contents/tab_contents_wrapper.cc
index f81d1c5..ade9b15 100644
--- a/chrome/browser/ui/tab_contents/tab_contents_wrapper.cc
+++ b/chrome/browser/ui/tab_contents/tab_contents_wrapper.cc
@@ -317,12 +317,6 @@ void TabContentsWrapper::Observe(NotificationType type,
NavigationController::LoadCommittedDetails& committed_details =
*(Details<NavigationController::LoadCommittedDetails>(details).ptr());
- // Only hide InfoBars when the user has done something that makes the main
- // frame load. We don't want various automatic or subframe navigations
- // making it disappear.
- if (!committed_details.is_user_initiated_main_frame_load())
- return;
-
// NOTE: It is not safe to change the following code to count upwards or
// use iterators, as the RemoveInfoBar() call synchronously modifies our
// delegate list.