Index: chrome/browser/safe_browsing/safe_browsing_blocking_page_unittest.cc |
=================================================================== |
--- chrome/browser/safe_browsing/safe_browsing_blocking_page_unittest.cc (revision 28624) |
+++ chrome/browser/safe_browsing/safe_browsing_blocking_page_unittest.cc (working copy) |
@@ -102,6 +102,13 @@ |
contents()->TestDidNavigate(contents_->render_view_host(), params); |
} |
+ void GoBack() { |
+ NavigationEntry* entry = contents()->controller().GetEntryAtOffset(-1); |
+ ASSERT_TRUE(entry); |
+ contents()->controller().GoBack(); |
+ Navigate(entry->url().spec().c_str(), entry->page_id()); |
+ } |
+ |
void ShowInterstitial(ResourceType::Type resource_type, |
const char* url) { |
SafeBrowsingService::UnsafeResource resource; |
@@ -355,3 +362,41 @@ |
ASSERT_EQ(1, controller().entry_count()); |
EXPECT_EQ(kGoodURL, controller().GetActiveEntry()->url().spec()); |
} |
+ |
+// Tests showing a blocking page then navigating back and forth to make sure the |
+// controller entries are OK. http://crbug.com/17627 |
+TEST_F(SafeBrowsingBlockingPageTest, NavigatingBackAndForth) { |
+ // Navigate somewhere. |
+ Navigate(kGoodURL, 1); |
+ |
+ // Now navigate to a bad page triggerring an interstitial. |
+ controller().LoadURL(GURL(kBadURL), GURL(), PageTransition::TYPED); |
+ ShowInterstitial(ResourceType::MAIN_FRAME, kBadURL); |
+ SafeBrowsingBlockingPage* sb_interstitial = GetSafeBrowsingBlockingPage(); |
+ ASSERT_TRUE(sb_interstitial); |
+ |
+ // Proceed, then navigate back. |
+ ProceedThroughInterstitial(sb_interstitial); |
+ Navigate(kBadURL, 2); // Commit the navigation. |
+ GoBack(); |
+ |
+ // We are back on the good page. |
+ sb_interstitial = GetSafeBrowsingBlockingPage(); |
+ ASSERT_FALSE(sb_interstitial); |
+ ASSERT_EQ(2, controller().entry_count()); |
+ EXPECT_EQ(kGoodURL, controller().GetActiveEntry()->url().spec()); |
+ |
+ // Navigate forward to the malware URL. |
+ contents()->controller().GoForward(); |
+ ShowInterstitial(ResourceType::MAIN_FRAME, kBadURL); |
+ sb_interstitial = GetSafeBrowsingBlockingPage(); |
+ ASSERT_TRUE(sb_interstitial); |
+ |
+ // Let's proceed and make sure everything is OK (bug 17627). |
+ ProceedThroughInterstitial(sb_interstitial); |
+ Navigate(kBadURL, 2); // Commit the navigation. |
+ sb_interstitial = GetSafeBrowsingBlockingPage(); |
+ ASSERT_FALSE(sb_interstitial); |
+ ASSERT_EQ(2, controller().entry_count()); |
+ EXPECT_EQ(kBadURL, controller().GetActiveEntry()->url().spec()); |
+} |