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

Unified Diff: content/browser/web_contents/navigation_controller_impl_unittest.cc

Issue 11198007: Clear the favicon of a tab when navigating to a url on a different host. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 2 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 | « content/browser/web_contents/navigation_controller_impl.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/browser/web_contents/navigation_controller_impl_unittest.cc
diff --git a/content/browser/web_contents/navigation_controller_impl_unittest.cc b/content/browser/web_contents/navigation_controller_impl_unittest.cc
index 1298b7183c59cc5bb3fea1036f7b6cd50d6b2758..747b8bae4bbb4b3bb191ec7856231f62c5fb8b92 100644
--- a/content/browser/web_contents/navigation_controller_impl_unittest.cc
+++ b/content/browser/web_contents/navigation_controller_impl_unittest.cc
@@ -108,6 +108,25 @@ class NavigationControllerTest : public RenderViewHostImplTestHarness {
NavigationControllerImpl& controller_impl() {
return static_cast<NavigationControllerImpl&>(controller());
}
+
+ bool DoImagesMatch(const gfx::Image& a, const gfx::Image& b) {
+ // Assume that if the 1x bitmaps match, the images match.
+ SkBitmap a_bitmap = a.AsBitmap();
+ SkBitmap b_bitmap = b.AsBitmap();
+
+ if (a_bitmap.width() != b_bitmap.width() ||
+ a_bitmap.height() != b_bitmap.height()) {
+ return false;
+ }
+
+ SkAutoLockPixels a_bitmap_lock(a_bitmap);
+ SkAutoLockPixels b_bitmap_lock(b_bitmap);
+
+ return memcmp(a_bitmap.getPixels(),
+ b_bitmap.getPixels(),
+ b_bitmap.getSize()) == 0;
+
+ }
};
void RegisterForAllNavNotifications(TestNotificationTracker* tracker,
@@ -2889,6 +2908,98 @@ TEST_F(NavigationControllerTest, IsInitialNavigation) {
EXPECT_FALSE(controller.IsInitialNavigation());
}
+// Check that the favicon is not reused across a client redirect.
+// (crbug.com/28515)
+TEST_F(NavigationControllerTest, ClearFaviconOnRedirect) {
+ const GURL kPageWithFavicon("http://withfavicon.html");
+ const GURL kPageWithoutFavicon("http://withoutfavicon.html");
+ const GURL kIconURL("http://withfavicon.ico");
+ const gfx::Image kDefaultFavicon = content::FaviconStatus().image;
+
+ NavigationControllerImpl& controller = controller_impl();
+ content::TestNotificationTracker notifications;
+ RegisterForAllNavNotifications(&notifications, &controller);
+
+ test_rvh()->SendNavigate(0, kPageWithFavicon);
+ EXPECT_TRUE(notifications.Check1AndReset(
+ content::NOTIFICATION_NAV_ENTRY_COMMITTED));
+
+ content::NavigationEntry* entry = controller.GetLastCommittedEntry();
+ EXPECT_TRUE(entry);
+ EXPECT_EQ(kPageWithFavicon, entry->GetURL());
+
+ // Simulate Chromium having set the favicon for |kPageWithFavicon|.
+ SkBitmap bitmap;
+ bitmap.setConfig(SkBitmap::kARGB_8888_Config, 1, 1);
+ bitmap.allocPixels();
+
+ content::FaviconStatus& favicon_status = entry->GetFavicon();
+ favicon_status.image = gfx::Image(bitmap);
+ favicon_status.url = kIconURL;
+ favicon_status.valid = true;
+ EXPECT_FALSE(DoImagesMatch(kDefaultFavicon, entry->GetFavicon().image));
+
+ test_rvh()->SendNavigateWithTransition(
+ 0, // same page ID.
+ kPageWithoutFavicon,
+ content::PAGE_TRANSITION_CLIENT_REDIRECT);
+ EXPECT_TRUE(notifications.Check1AndReset(
+ content::NOTIFICATION_NAV_ENTRY_COMMITTED));
+
+ entry = controller.GetLastCommittedEntry();
+ EXPECT_TRUE(entry);
+ EXPECT_EQ(kPageWithoutFavicon, entry->GetURL());
+
+ EXPECT_TRUE(DoImagesMatch(kDefaultFavicon, entry->GetFavicon().image));
+}
+
+// Check that the favicon is not cleared for NavigationEntries which were
+// previously navigated to.
+TEST_F(NavigationControllerTest, BackNavigationDoesNotClearFavicon) {
+ const GURL kUrl1("http://www.a.com/1");
+ const GURL kUrl2("http://www.a.com/2");
+ const GURL kIconURL("http://www.a.com/1/favicon.ico");
+
+ NavigationControllerImpl& controller = controller_impl();
+ content::TestNotificationTracker notifications;
+ RegisterForAllNavNotifications(&notifications, &controller);
+
+ test_rvh()->SendNavigate(0, kUrl1);
+ EXPECT_TRUE(notifications.Check1AndReset(
+ content::NOTIFICATION_NAV_ENTRY_COMMITTED));
+
+ // Simulate Chromium having set the favicon for |kUrl1|.
+ SkBitmap favicon_bitmap;
+ favicon_bitmap.setConfig(SkBitmap::kARGB_8888_Config, 1, 1);
+ favicon_bitmap.allocPixels();
+
+ content::NavigationEntry* entry = controller.GetLastCommittedEntry();
+ EXPECT_TRUE(entry);
+ content::FaviconStatus& favicon_status = entry->GetFavicon();
+ favicon_status.image = gfx::Image(favicon_bitmap);
+ favicon_status.url = kIconURL;
+ favicon_status.valid = true;
+
+ // Navigate to another page and go back to the original page.
+ test_rvh()->SendNavigate(1, kUrl2);
+ EXPECT_TRUE(notifications.Check1AndReset(
+ content::NOTIFICATION_NAV_ENTRY_COMMITTED));
+ test_rvh()->SendNavigateWithTransition(
+ 0,
+ kUrl1,
+ content::PAGE_TRANSITION_FORWARD_BACK);
+ EXPECT_TRUE(notifications.Check1AndReset(
+ content::NOTIFICATION_NAV_ENTRY_COMMITTED));
+
+ // Verify that the favicon for the page at |kUrl1| was not cleared.
+ gfx::Image favicon_after_back;
+ entry = controller.GetEntryAtIndex(0);
+ EXPECT_TRUE(entry);
+ EXPECT_EQ(kUrl1, entry->GetURL());
+ EXPECT_TRUE(DoImagesMatch(gfx::Image(favicon_bitmap),
+ entry->GetFavicon().image));
+}
+
/* TODO(brettw) These test pass on my local machine but fail on the XP buildbot
(but not Vista) cleaning up the directory after they run.
This should be fixed.
« no previous file with comments | « content/browser/web_contents/navigation_controller_impl.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698