Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(5115)

Unified Diff: chrome/browser/google/google_url_tracker_unittest.cc

Issue 10753019: Merge 144201 - More comprehensive handling of NOTIFICATION_NAV_ENTRY_PENDING for GoogleURLTracker. (Closed) Base URL: svn://svn.chromium.org/chrome/branches/1180/src/
Patch Set: Created 8 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/google/google_url_tracker.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/google/google_url_tracker_unittest.cc
===================================================================
--- chrome/browser/google/google_url_tracker_unittest.cc (revision 145827)
+++ chrome/browser/google/google_url_tracker_unittest.cc (working copy)
@@ -60,34 +60,33 @@
class TestInfoBarDelegate : public GoogleURLTrackerInfoBarDelegate {
public:
TestInfoBarDelegate(InfoBarTabHelper* infobar_helper,
- const GURL& search_url,
GoogleURLTracker* google_url_tracker,
const GURL& new_google_url);
virtual ~TestInfoBarDelegate();
GURL search_url() const { return search_url_; }
GURL new_google_url() const { return new_google_url_; }
- bool showing() const { return showing_; }
+ int pending_id() const { return pending_id_; }
private:
// GoogleURLTrackerInfoBarDelegate:
- virtual void Show() OVERRIDE;
+ virtual void Show(const GURL& search_url) OVERRIDE;
virtual void Close(bool redo_search) OVERRIDE;
};
TestInfoBarDelegate::TestInfoBarDelegate(InfoBarTabHelper* infobar_helper,
- const GURL& search_url,
GoogleURLTracker* google_url_tracker,
const GURL& new_google_url)
- : GoogleURLTrackerInfoBarDelegate(NULL, search_url, google_url_tracker,
- new_google_url) {
+ : GoogleURLTrackerInfoBarDelegate(NULL, google_url_tracker, new_google_url) {
// We set |map_key_| here instead of in the superclass constructor so that the
// InfoBarDelegate base class will not try to dereference it, which would fail
// since this is really a magic number and not an actual pointer.
map_key_ = infobar_helper;
}
-void TestInfoBarDelegate::Show() {
+void TestInfoBarDelegate::Show(const GURL& search_url) {
+ search_url_ = search_url;
+ pending_id_ = 0;
showing_ = true;
}
@@ -100,10 +99,9 @@
GoogleURLTrackerInfoBarDelegate* CreateTestInfobar(
InfoBarTabHelper* infobar_helper,
- const GURL& search_url,
GoogleURLTracker* google_url_tracker,
const GURL& new_google_url) {
- return new TestInfoBarDelegate(infobar_helper, search_url, google_url_tracker,
+ return new TestInfoBarDelegate(infobar_helper, google_url_tracker,
new_google_url);
}
@@ -135,11 +133,14 @@
GURL google_url() const { return google_url_tracker_->google_url_; }
void SetLastPromptedGoogleURL(const GURL& url);
GURL GetLastPromptedGoogleURL();
- void SetSearchPending(const GURL& search_url, int unique_id);
- void CommitSearch(int unique_id);
+ void SetNonSearchPending(int unique_id);
+ void SetSearchPending(int unique_id);
+ void CommitNonSearch(int unique_id);
+ void CommitSearch(const GURL& search_url, int unique_id);
void CloseTab(int unique_id);
TestInfoBarDelegate* GetInfoBar(int unique_id);
- void ExpectDefaultURLs();
+ void ExpectDefaultURLs() const;
+ void ExpectListeningForCommit(int unique_id, bool listening) const;
scoped_ptr<TestNotificationObserver> observer_;
@@ -233,10 +234,8 @@
return GURL(profile_.GetPrefs()->GetString(prefs::kLastPromptedGoogleURL));
}
-void GoogleURLTrackerTest::SetSearchPending(const GURL& search_url,
- int unique_id) {
+void GoogleURLTrackerTest::SetNonSearchPending(int unique_id) {
unique_ids_seen_.insert(unique_id);
- google_url_tracker_->SearchCommitted();
if (google_url_tracker_->registrar_.IsRegistered(google_url_tracker_.get(),
content::NOTIFICATION_NAV_ENTRY_PENDING,
content::NotificationService::AllBrowserContextsAndSources())) {
@@ -244,33 +243,55 @@
content::Source<content::NavigationController>(
reinterpret_cast<content::NavigationController*>(unique_id)),
content::Source<TabContents>(reinterpret_cast<TabContents*>(unique_id)),
- reinterpret_cast<InfoBarTabHelper*>(unique_id), search_url);
+ reinterpret_cast<InfoBarTabHelper*>(unique_id), unique_id);
}
}
-void GoogleURLTrackerTest::CommitSearch(int unique_id) {
- content::Source<content::NavigationController> source(
- reinterpret_cast<content::NavigationController*>(unique_id));
+void GoogleURLTrackerTest::SetSearchPending(int unique_id) {
+ google_url_tracker_->SearchCommitted();
+ // Note that the call above might not have actually registered a listener for
+ // NOTIFICATION_NAV_ENTRY_PENDING if the searchdomaincheck response was bogus.
+ SetNonSearchPending(unique_id);
+}
+
+void GoogleURLTrackerTest::CommitNonSearch(int unique_id) {
+ GoogleURLTracker::InfoBarMap::iterator i =
+ google_url_tracker_->infobar_map_.find(
+ reinterpret_cast<InfoBarTabHelper*>(unique_id));
+ if (i != google_url_tracker_->infobar_map_.end()) {
+ ExpectListeningForCommit(unique_id, false);
+ TestInfoBarDelegate* infobar =
+ static_cast<TestInfoBarDelegate*>(i->second.infobar);
+ // The infobar should be showing; otherwise the pending non-search should
+ // have closed it.
+ EXPECT_TRUE(infobar->showing());
+ // The pending_id should have been reset to 0 when the non-search became
+ // pending.
+ EXPECT_EQ(0, infobar->pending_id());
+ infobar->InfoBarClosed();
+ }
+}
+
+void GoogleURLTrackerTest::CommitSearch(const GURL& search_url, int unique_id) {
if (google_url_tracker_->registrar_.IsRegistered(google_url_tracker_.get(),
- content::NOTIFICATION_NAV_ENTRY_COMMITTED, source)) {
- google_url_tracker_->OnNavigationCommittedOrTabClosed(source,
- content::Source<TabContents>(reinterpret_cast<TabContents*>(unique_id)),
- reinterpret_cast<InfoBarTabHelper*>(unique_id), true);
+ content::NOTIFICATION_NAV_ENTRY_COMMITTED,
+ content::Source<content::NavigationController>(
+ reinterpret_cast<content::NavigationController*>(unique_id)))) {
+ google_url_tracker_->OnNavigationCommittedOrTabClosed(
+ reinterpret_cast<InfoBarTabHelper*>(unique_id),
+ search_url);
}
}
void GoogleURLTrackerTest::CloseTab(int unique_id) {
unique_ids_seen_.erase(unique_id);
- content::Source<TabContents> source(
- reinterpret_cast<TabContents*>(unique_id));
InfoBarTabHelper* infobar_helper =
reinterpret_cast<InfoBarTabHelper*>(unique_id);
if (google_url_tracker_->registrar_.IsRegistered(google_url_tracker_.get(),
- chrome::NOTIFICATION_TAB_CONTENTS_DESTROYED, source)) {
- google_url_tracker_->OnNavigationCommittedOrTabClosed(
- content::Source<content::NavigationController>(
- reinterpret_cast<content::NavigationController*>(unique_id)),
- source, infobar_helper, false);
+ chrome::NOTIFICATION_TAB_CONTENTS_DESTROYED, content::Source<TabContents>(
+ reinterpret_cast<TabContents*>(unique_id)))) {
+ google_url_tracker_->OnNavigationCommittedOrTabClosed(infobar_helper,
+ GURL());
} else {
// Normally, closing a tab with an infobar showing will close the infobar.
// Since we don't have real tabs and are just faking things with magic
@@ -279,8 +300,8 @@
google_url_tracker_->infobar_map_.find(infobar_helper);
if (i != google_url_tracker_->infobar_map_.end()) {
TestInfoBarDelegate* infobar =
- static_cast<TestInfoBarDelegate*>(i->second);
- DCHECK(infobar->showing());
+ static_cast<TestInfoBarDelegate*>(i->second.infobar);
+ EXPECT_TRUE(infobar->showing());
infobar->InfoBarClosed();
}
}
@@ -291,15 +312,26 @@
google_url_tracker_->infobar_map_.find(
reinterpret_cast<InfoBarTabHelper*>(unique_id));
return (i == google_url_tracker_->infobar_map_.end()) ?
- NULL : static_cast<TestInfoBarDelegate*>(i->second);
+ NULL : static_cast<TestInfoBarDelegate*>(i->second.infobar);
}
-void GoogleURLTrackerTest::ExpectDefaultURLs() {
+void GoogleURLTrackerTest::ExpectDefaultURLs() const {
EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url());
EXPECT_EQ(GURL(), fetched_google_url());
}
+void GoogleURLTrackerTest::ExpectListeningForCommit(int unique_id,
+ bool listening) const {
+ GoogleURLTracker::InfoBarMap::iterator i =
+ google_url_tracker_->infobar_map_.find(
+ reinterpret_cast<InfoBarTabHelper*>(unique_id));
+ ASSERT_FALSE(i == google_url_tracker_->infobar_map_.end());
+ EXPECT_EQ(listening, google_url_tracker_->registrar_.IsRegistered(
+ google_url_tracker_.get(), content::NOTIFICATION_NAV_ENTRY_COMMITTED,
+ i->second.navigation_controller_source));
+}
+
// Tests ----------------------------------------------------------------------
TEST_F(GoogleURLTrackerTest, DontFetchWhenNoOneRequestsCheck) {
@@ -357,8 +389,8 @@
EXPECT_EQ(GURL(), fetched_google_url());
EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url());
EXPECT_FALSE(observer_->notified());
- SetSearchPending(GURL("http://www.google.co.uk/search?q=test"), 1);
- CommitSearch(1);
+ SetSearchPending(1);
+ CommitSearch(GURL("http://www.google.co.uk/search?q=test"), 1);
EXPECT_TRUE(GetInfoBar(1) == NULL);
// Bad subdomain.
@@ -367,8 +399,8 @@
EXPECT_EQ(GURL(), fetched_google_url());
EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url());
EXPECT_FALSE(observer_->notified());
- SetSearchPending(GURL("http://www.google.co.uk/search?q=test"), 1);
- CommitSearch(1);
+ SetSearchPending(1);
+ CommitSearch(GURL("http://www.google.co.uk/search?q=test"), 1);
EXPECT_TRUE(GetInfoBar(1) == NULL);
// Non-empty path.
@@ -377,8 +409,8 @@
EXPECT_EQ(GURL(), fetched_google_url());
EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url());
EXPECT_FALSE(observer_->notified());
- SetSearchPending(GURL("http://www.google.co.uk/search?q=test"), 1);
- CommitSearch(1);
+ SetSearchPending(1);
+ CommitSearch(GURL("http://www.google.co.uk/search?q=test"), 1);
EXPECT_TRUE(GetInfoBar(1) == NULL);
// Non-empty query.
@@ -387,8 +419,8 @@
EXPECT_EQ(GURL(), fetched_google_url());
EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url());
EXPECT_FALSE(observer_->notified());
- SetSearchPending(GURL("http://www.google.co.uk/search?q=test"), 1);
- CommitSearch(1);
+ SetSearchPending(1);
+ CommitSearch(GURL("http://www.google.co.uk/search?q=test"), 1);
EXPECT_TRUE(GetInfoBar(1) == NULL);
// Non-empty ref.
@@ -397,8 +429,8 @@
EXPECT_EQ(GURL(), fetched_google_url());
EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url());
EXPECT_FALSE(observer_->notified());
- SetSearchPending(GURL("http://www.google.co.uk/search?q=test"), 1);
- CommitSearch(1);
+ SetSearchPending(1);
+ CommitSearch(GURL("http://www.google.co.uk/search?q=test"), 1);
EXPECT_TRUE(GetInfoBar(1) == NULL);
// Complete garbage.
@@ -407,8 +439,8 @@
EXPECT_EQ(GURL(), fetched_google_url());
EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url());
EXPECT_FALSE(observer_->notified());
- SetSearchPending(GURL("http://www.google.co.uk/search?q=test"), 1);
- CommitSearch(1);
+ SetSearchPending(1);
+ CommitSearch(GURL("http://www.google.co.uk/search?q=test"), 1);
EXPECT_TRUE(GetInfoBar(1) == NULL);
}
@@ -519,8 +551,8 @@
EXPECT_TRUE(observer_->notified());
observer_->clear_notified();
- SetSearchPending(GURL("http://www.google.co.uk/search?q=test"), 1);
- CommitSearch(1);
+ SetSearchPending(1);
+ CommitSearch(GURL("http://www.google.co.uk/search?q=test"), 1);
TestInfoBarDelegate* infobar = GetInfoBar(1);
EXPECT_TRUE(infobar == NULL);
EXPECT_EQ(GURL("http://www.google.co.uk/"), fetched_google_url());
@@ -539,13 +571,11 @@
EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL());
EXPECT_FALSE(observer_->notified());
- SetSearchPending(GURL("http://www.google.co.uk/search?q=test"), 1);
+ SetSearchPending(1);
TestInfoBarDelegate* infobar = GetInfoBar(1);
ASSERT_FALSE(infobar == NULL);
EXPECT_FALSE(infobar->showing());
EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url());
- EXPECT_EQ(GURL("http://www.google.co.uk/search?q=test"),
- infobar->search_url());
EXPECT_EQ(GURL("http://www.google.co.jp/"), infobar->new_google_url());
EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL());
EXPECT_FALSE(observer_->notified());
@@ -563,8 +593,8 @@
FinishSleep();
MockSearchDomainCheckResponse("http://www.google.co.jp/");
- SetSearchPending(GURL("http://www.google.co.uk/search?q=test"), 1);
- CommitSearch(1);
+ SetSearchPending(1);
+ CommitSearch(GURL("http://www.google.co.uk/search?q=test"), 1);
TestInfoBarDelegate* infobar = GetInfoBar(1);
ASSERT_FALSE(infobar == NULL);
EXPECT_TRUE(infobar->showing());
@@ -582,8 +612,8 @@
FinishSleep();
MockSearchDomainCheckResponse("http://www.google.co.jp/");
- SetSearchPending(GURL("http://www.google.co.uk/search?q=test"), 1);
- CommitSearch(1);
+ SetSearchPending(1);
+ CommitSearch(GURL("http://www.google.co.uk/search?q=test"), 1);
TestInfoBarDelegate* infobar = GetInfoBar(1);
ASSERT_FALSE(infobar == NULL);
@@ -600,8 +630,8 @@
FinishSleep();
MockSearchDomainCheckResponse("http://www.google.co.jp/");
- SetSearchPending(GURL("http://www.google.co.uk/search?q=test"), 1);
- CommitSearch(1);
+ SetSearchPending(1);
+ CommitSearch(GURL("http://www.google.co.uk/search?q=test"), 1);
TestInfoBarDelegate* infobar = GetInfoBar(1);
ASSERT_FALSE(infobar == NULL);
@@ -618,8 +648,8 @@
FinishSleep();
MockSearchDomainCheckResponse("http://www.google.co.jp/");
- SetSearchPending(GURL("http://www.google.co.uk/search?q=test"), 1);
- CommitSearch(1);
+ SetSearchPending(1);
+ CommitSearch(GURL("http://www.google.co.uk/search?q=test"), 1);
TestInfoBarDelegate* infobar = GetInfoBar(1);
ASSERT_FALSE(infobar == NULL);
@@ -639,8 +669,8 @@
// should close the infobar.
NotifyIPAddressChanged();
MockSearchDomainCheckResponse("http://www.google.co.uk/");
- SetSearchPending(GURL("http://www.google.com/search?q=test"), 1);
- CommitSearch(1);
+ SetSearchPending(1);
+ CommitSearch(GURL("http://www.google.com/search?q=test"), 1);
EXPECT_FALSE(GetInfoBar(1) == NULL);
NotifyIPAddressChanged();
MockSearchDomainCheckResponse(google_url().spec());
@@ -650,8 +680,8 @@
// As should fetching a URL that differs from the accepted only by the scheme.
NotifyIPAddressChanged();
MockSearchDomainCheckResponse("http://www.google.co.uk/");
- SetSearchPending(GURL("http://www.google.com/search?q=test"), 1);
- CommitSearch(1);
+ SetSearchPending(1);
+ CommitSearch(GURL("http://www.google.com/search?q=test"), 1);
EXPECT_FALSE(GetInfoBar(1) == NULL);
NotifyIPAddressChanged();
url_canon::Replacements<char> replacements;
@@ -667,8 +697,8 @@
SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/"));
NotifyIPAddressChanged();
MockSearchDomainCheckResponse("http://www.google.co.jp/");
- SetSearchPending(GURL("http://www.google.com/search?q=test"), 1);
- CommitSearch(1);
+ SetSearchPending(1);
+ CommitSearch(GURL("http://www.google.com/search?q=test"), 1);
EXPECT_FALSE(GetInfoBar(1) == NULL);
NotifyIPAddressChanged();
MockSearchDomainCheckResponse("http://www.google.co.uk/");
@@ -679,8 +709,8 @@
// And one that differs from the last prompted URL only by the scheme.
NotifyIPAddressChanged();
MockSearchDomainCheckResponse("http://www.google.co.jp/");
- SetSearchPending(GURL("http://www.google.com/search?q=test"), 1);
- CommitSearch(1);
+ SetSearchPending(1);
+ CommitSearch(GURL("http://www.google.com/search?q=test"), 1);
EXPECT_FALSE(GetInfoBar(1) == NULL);
NotifyIPAddressChanged();
MockSearchDomainCheckResponse("https://www.google.co.uk/");
@@ -691,8 +721,8 @@
// And fetching a different URL entirely.
NotifyIPAddressChanged();
MockSearchDomainCheckResponse("http://www.google.co.jp/");
- SetSearchPending(GURL("http://www.google.com/search?q=test"), 1);
- CommitSearch(1);
+ SetSearchPending(1);
+ CommitSearch(GURL("http://www.google.com/search?q=test"), 1);
EXPECT_FALSE(GetInfoBar(1) == NULL);
NotifyIPAddressChanged();
MockSearchDomainCheckResponse("https://www.google.co.in/");
@@ -708,74 +738,158 @@
NotifyIPAddressChanged();
MockSearchDomainCheckResponse("http://www.google.co.uk/");
- SetSearchPending(GURL("http://www.google.com/search?q=test"), 1);
- CommitSearch(1);
+ SetSearchPending(1);
TestInfoBarDelegate* infobar = GetInfoBar(1);
ASSERT_FALSE(infobar == NULL);
EXPECT_EQ(GURL("http://www.google.co.uk/"), infobar->new_google_url());
- // If while an infobar is showing we fetch a new URL that differs from the
- // infobar's only by scheme, the infobar should stay open but have its Google
- // URL reset.
+ // If while an infobar is pending we fetch a new URL that differs from the
+ // infobar's only by scheme, the infobar should stay pending but have its
+ // Google URL reset.
NotifyIPAddressChanged();
MockSearchDomainCheckResponse("https://www.google.co.uk/");
TestInfoBarDelegate* new_infobar = GetInfoBar(1);
ASSERT_FALSE(new_infobar == NULL);
EXPECT_EQ(infobar, new_infobar);
EXPECT_EQ(GURL("https://www.google.co.uk/"), new_infobar->new_google_url());
+
+ // Same with an infobar that is showing.
+ CommitSearch(GURL("http://www.google.com/search?q=test"), 1);
+ EXPECT_TRUE(infobar->showing());
+ NotifyIPAddressChanged();
+ MockSearchDomainCheckResponse("http://www.google.co.uk/");
+ new_infobar = GetInfoBar(1);
+ ASSERT_FALSE(new_infobar == NULL);
+ EXPECT_EQ(infobar, new_infobar);
+ EXPECT_EQ(GURL("http://www.google.co.uk/"), infobar->new_google_url());
+ EXPECT_TRUE(infobar->showing());
}
-TEST_F(GoogleURLTrackerTest, InfobarShownAgainOnSearchAfterPendingSearch) {
+TEST_F(GoogleURLTrackerTest, NavigationsAfterPendingSearch) {
SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/"));
RequestServerCheck();
FinishSleep();
MockSearchDomainCheckResponse("http://www.google.co.jp/");
- SetSearchPending(GURL("http://www.google.co.uk/search?q=test"), 1);
+ // A pending non-search after a pending search should close the infobar.
+ SetSearchPending(1);
TestInfoBarDelegate* infobar = GetInfoBar(1);
ASSERT_FALSE(infobar == NULL);
EXPECT_FALSE(infobar->showing());
- EXPECT_EQ(GURL("http://www.google.co.uk/search?q=test"),
- infobar->search_url());
+ SetNonSearchPending(1);
+ infobar = GetInfoBar(1);
+ EXPECT_TRUE(infobar == NULL);
- SetSearchPending(GURL("http://www.google.co.uk/search?q=test2"), 1);
- TestInfoBarDelegate* infobar2 = GetInfoBar(1);
- ASSERT_FALSE(infobar2 == NULL);
- EXPECT_FALSE(infobar2->showing());
- EXPECT_EQ(GURL("http://www.google.co.uk/search?q=test2"),
- infobar2->search_url());
+ // A pending search after a pending search should leave the infobar alive.
+ SetSearchPending(1);
+ infobar = GetInfoBar(1);
+ ASSERT_FALSE(infobar == NULL);
+ EXPECT_FALSE(infobar->showing());
+ SetSearchPending(1);
+ TestInfoBarDelegate* new_infobar = GetInfoBar(1);
+ ASSERT_FALSE(new_infobar == NULL);
+ EXPECT_EQ(infobar, new_infobar);
+ EXPECT_FALSE(infobar->showing());
+ ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(1, true));
- CommitSearch(1);
- EXPECT_TRUE(infobar2->showing());
+ // Committing this search should show the infobar.
+ CommitSearch(GURL("http://www.google.co.uk/search?q=test2"), 1);
+ EXPECT_TRUE(infobar->showing());
EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url());
EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL());
EXPECT_FALSE(observer_->notified());
+ ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(1, false));
}
-TEST_F(GoogleURLTrackerTest, InfobarShownAgainOnSearchAfterCommittedSearch) {
+TEST_F(GoogleURLTrackerTest, NavigationsAfterCommittedSearch) {
SetLastPromptedGoogleURL(GURL("http://www.google.co.uk/"));
RequestServerCheck();
FinishSleep();
MockSearchDomainCheckResponse("http://www.google.co.jp/");
-
- SetSearchPending(GURL("http://www.google.co.uk/search?q=test"), 1);
- CommitSearch(1);
+ SetSearchPending(1);
+ CommitSearch(GURL("http://www.google.co.uk/search?q=test"), 1);
TestInfoBarDelegate* infobar = GetInfoBar(1);
ASSERT_FALSE(infobar == NULL);
EXPECT_TRUE(infobar->showing());
+ ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(1, false));
- // In real usage, the upcoming pending navigation for "test2" would close
- // |infobar|. Since we're not actually doing navigations, we need to clean it
- // up manually to prevent leaks.
- delete infobar;
+ // A pending non-search on a visible infobar should basically do nothing.
+ SetNonSearchPending(1);
+ TestInfoBarDelegate* new_infobar = GetInfoBar(1);
+ ASSERT_FALSE(new_infobar == NULL);
+ EXPECT_EQ(infobar, new_infobar);
+ EXPECT_TRUE(infobar->showing());
+ EXPECT_EQ(0, infobar->pending_id());
+ ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(1, false));
- SetSearchPending(GURL("http://www.google.co.uk/search?q=test2"), 1);
- TestInfoBarDelegate* infobar2 = GetInfoBar(1);
- ASSERT_FALSE(infobar2 == NULL);
- EXPECT_FALSE(infobar2->showing());
+ // As should another pending non-search after the first.
+ SetNonSearchPending(1);
+ new_infobar = GetInfoBar(1);
+ ASSERT_FALSE(new_infobar == NULL);
+ EXPECT_EQ(infobar, new_infobar);
+ EXPECT_TRUE(infobar->showing());
+ EXPECT_EQ(0, infobar->pending_id());
+ ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(1, false));
- CommitSearch(1);
- EXPECT_TRUE(infobar2->showing());
+ // Committing this non-search should close the infobar. The control flow in
+ // these tests is not really comparable to in the real browser, but at least a
+ // few sanity-checks will be performed.
+ ASSERT_NO_FATAL_FAILURE(CommitNonSearch(1));
+ new_infobar = GetInfoBar(1);
+ EXPECT_TRUE(new_infobar == NULL);
+
+ // A pending search on a visible infobar should cause the infobar to listen
+ // for the search to commit.
+ SetSearchPending(1);
+ CommitSearch(GURL("http://www.google.co.uk/search?q=test"), 1);
+ infobar = GetInfoBar(1);
+ ASSERT_FALSE(infobar == NULL);
+ EXPECT_TRUE(infobar->showing());
+ SetSearchPending(1);
+ new_infobar = GetInfoBar(1);
+ ASSERT_FALSE(new_infobar == NULL);
+ EXPECT_EQ(infobar, new_infobar);
+ EXPECT_TRUE(infobar->showing());
+ EXPECT_EQ(1, infobar->pending_id());
+ ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(1, true));
+
+ // But a non-search after this should cancel that state.
+ SetNonSearchPending(1);
+ new_infobar = GetInfoBar(1);
+ ASSERT_FALSE(new_infobar == NULL);
+ EXPECT_EQ(infobar, new_infobar);
+ EXPECT_TRUE(infobar->showing());
+ EXPECT_EQ(0, infobar->pending_id());
+ ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(1, false));
+
+ // Another pending search after the non-search should put us back into
+ // "waiting for commit" mode.
+ SetSearchPending(1);
+ new_infobar = GetInfoBar(1);
+ ASSERT_FALSE(new_infobar == NULL);
+ EXPECT_EQ(infobar, new_infobar);
+ EXPECT_TRUE(infobar->showing());
+ EXPECT_EQ(1, infobar->pending_id());
+ ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(1, true));
+
+ // A second pending search after the first should not really change anything.
+ SetSearchPending(1);
+ new_infobar = GetInfoBar(1);
+ ASSERT_FALSE(new_infobar == NULL);
+ EXPECT_EQ(infobar, new_infobar);
+ EXPECT_TRUE(infobar->showing());
+ EXPECT_EQ(1, infobar->pending_id());
+ ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(1, true));
+
+ // Committing this search should change the visible infobar's search_url.
+ CommitSearch(GURL("http://www.google.co.uk/search?q=test2"), 1);
+ new_infobar = GetInfoBar(1);
+ ASSERT_FALSE(new_infobar == NULL);
+ EXPECT_EQ(infobar, new_infobar);
+ EXPECT_TRUE(infobar->showing());
+ EXPECT_EQ(GURL("http://www.google.co.uk/search?q=test2"), infobar->search_url());
+ EXPECT_EQ(0, infobar->pending_id());
+ ASSERT_NO_FATAL_FAILURE(ExpectListeningForCommit(1, false));
EXPECT_EQ(GURL(GoogleURLTracker::kDefaultGoogleHomepage), google_url());
EXPECT_EQ(GURL("http://www.google.co.uk/"), GetLastPromptedGoogleURL());
EXPECT_FALSE(observer_->notified());
@@ -787,37 +901,33 @@
FinishSleep();
MockSearchDomainCheckResponse("http://www.google.co.jp/");
- SetSearchPending(GURL("http://www.google.co.uk/search?q=test"), 1);
+ SetSearchPending(1);
TestInfoBarDelegate* infobar = GetInfoBar(1);
ASSERT_FALSE(infobar == NULL);
EXPECT_FALSE(infobar->showing());
- EXPECT_EQ(GURL("http://www.google.co.uk/search?q=test"),
- infobar->search_url());
- SetSearchPending(GURL("http://www.google.co.uk/search?q=test2"), 2);
- CommitSearch(2);
+ SetSearchPending(2);
+ CommitSearch(GURL("http://www.google.co.uk/search?q=test2"), 2);
TestInfoBarDelegate* infobar2 = GetInfoBar(2);
ASSERT_FALSE(infobar2 == NULL);
EXPECT_TRUE(infobar2->showing());
EXPECT_EQ(GURL("http://www.google.co.uk/search?q=test2"),
infobar2->search_url());
- SetSearchPending(GURL("http://www.google.co.uk/search?q=test3"), 3);
+ SetSearchPending(3);
TestInfoBarDelegate* infobar3 = GetInfoBar(3);
ASSERT_FALSE(infobar3 == NULL);
EXPECT_FALSE(infobar3->showing());
- EXPECT_EQ(GURL("http://www.google.co.uk/search?q=test3"),
- infobar3->search_url());
- SetSearchPending(GURL("http://www.google.co.uk/search?q=test4"), 4);
- CommitSearch(4);
+ SetSearchPending(4);
+ CommitSearch(GURL("http://www.google.co.uk/search?q=test4"), 4);
TestInfoBarDelegate* infobar4 = GetInfoBar(4);
ASSERT_FALSE(infobar4 == NULL);
EXPECT_TRUE(infobar4->showing());
EXPECT_EQ(GURL("http://www.google.co.uk/search?q=test4"),
infobar4->search_url());
- CommitSearch(1);
+ CommitSearch(GURL("http://www.google.co.uk/search?q=test"), 1);
EXPECT_TRUE(infobar->showing());
infobar2->InfoBarClosed();
« no previous file with comments | « chrome/browser/google/google_url_tracker.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698