Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "base/basictypes.h" | 5 #include "base/basictypes.h" |
| 6 #include "base/bind.h" | 6 #include "base/bind.h" |
| 7 #include "base/file_util.h" | 7 #include "base/file_util.h" |
| 8 #include "base/memory/scoped_ptr.h" | 8 #include "base/memory/scoped_ptr.h" |
| 9 #include "base/path_service.h" | 9 #include "base/path_service.h" |
| 10 #include "base/stl_util.h" | 10 #include "base/stl_util.h" |
| (...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 109 | 109 |
| 110 // NavigationControllerTest ---------------------------------------------------- | 110 // NavigationControllerTest ---------------------------------------------------- |
| 111 | 111 |
| 112 class NavigationControllerTest : public RenderViewHostImplTestHarness { | 112 class NavigationControllerTest : public RenderViewHostImplTestHarness { |
| 113 public: | 113 public: |
| 114 NavigationControllerTest() {} | 114 NavigationControllerTest() {} |
| 115 | 115 |
| 116 NavigationControllerImpl& controller_impl() { | 116 NavigationControllerImpl& controller_impl() { |
| 117 return static_cast<NavigationControllerImpl&>(controller()); | 117 return static_cast<NavigationControllerImpl&>(controller()); |
| 118 } | 118 } |
| 119 | |
| 120 bool DoImagesMatch(const gfx::Image& a, const gfx::Image& b) { | |
| 121 // Assume that if the 1x bitmaps match, the images match. | |
| 122 SkBitmap a_bitmap = a.AsBitmap(); | |
| 123 SkBitmap b_bitmap = b.AsBitmap(); | |
| 124 | |
| 125 if (a_bitmap.width() != b_bitmap.width() || | |
| 126 a_bitmap.height() != b_bitmap.height()) { | |
| 127 return false; | |
| 128 } | |
| 129 | |
| 130 SkAutoLockPixels a_bitmap_lock(a_bitmap); | |
| 131 SkAutoLockPixels b_bitmap_lock(b_bitmap); | |
| 132 | |
| 133 return memcmp(a_bitmap.getPixels(), | |
| 134 b_bitmap.getPixels(), | |
| 135 b_bitmap.getSize()) == 0; | |
| 136 | |
| 137 } | |
| 119 }; | 138 }; |
| 120 | 139 |
| 121 void RegisterForAllNavNotifications(TestNotificationTracker* tracker, | 140 void RegisterForAllNavNotifications(TestNotificationTracker* tracker, |
| 122 NavigationController* controller) { | 141 NavigationController* controller) { |
| 123 tracker->ListenFor(content::NOTIFICATION_NAV_ENTRY_COMMITTED, | 142 tracker->ListenFor(content::NOTIFICATION_NAV_ENTRY_COMMITTED, |
| 124 content::Source<NavigationController>( | 143 content::Source<NavigationController>( |
| 125 controller)); | 144 controller)); |
| 126 tracker->ListenFor(content::NOTIFICATION_NAV_LIST_PRUNED, | 145 tracker->ListenFor(content::NOTIFICATION_NAV_LIST_PRUNED, |
| 127 content::Source<NavigationController>( | 146 content::Source<NavigationController>( |
| 128 controller)); | 147 controller)); |
| (...skipping 2853 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2982 | 3001 |
| 2983 const GURL url1("http://foo1"); | 3002 const GURL url1("http://foo1"); |
| 2984 test_rvh()->SendNavigate(0, url1); | 3003 test_rvh()->SendNavigate(0, url1); |
| 2985 EXPECT_TRUE(notifications.Check1AndReset( | 3004 EXPECT_TRUE(notifications.Check1AndReset( |
| 2986 content::NOTIFICATION_NAV_ENTRY_COMMITTED)); | 3005 content::NOTIFICATION_NAV_ENTRY_COMMITTED)); |
| 2987 | 3006 |
| 2988 // After commit, it stays false. | 3007 // After commit, it stays false. |
| 2989 EXPECT_FALSE(controller.IsInitialNavigation()); | 3008 EXPECT_FALSE(controller.IsInitialNavigation()); |
| 2990 } | 3009 } |
| 2991 | 3010 |
| 3011 // Check that the favicon is not reused accross a client redirect. | |
|
Charlie Reis
2012/10/23 04:53:22
nit: across
| |
| 3012 // (crbug.com/28515) | |
| 3013 TEST_F(NavigationControllerTest, ClearFaviconOnRedirect) { | |
| 3014 const GURL kPageWithFavicon("http://withfavicon.html"); | |
| 3015 const GURL kPageWithoutFavicon("http://withoutfavicon.html"); | |
| 3016 const GURL kIconURL("http://withfavicon.ico"); | |
| 3017 const gfx::Image kDefaultFavicon = content::FaviconStatus().image; | |
| 3018 | |
| 3019 NavigationControllerImpl& controller = controller_impl(); | |
| 3020 content::TestNotificationTracker notifications; | |
| 3021 RegisterForAllNavNotifications(¬ifications, &controller); | |
| 3022 | |
| 3023 test_rvh()->SendNavigate(0, kPageWithFavicon); | |
| 3024 EXPECT_TRUE(notifications.Check1AndReset( | |
| 3025 content::NOTIFICATION_NAV_ENTRY_COMMITTED)); | |
| 3026 | |
| 3027 content::NavigationEntry* entry = controller.GetLastCommittedEntry(); | |
| 3028 EXPECT_TRUE(entry); | |
| 3029 EXPECT_EQ(kPageWithFavicon, entry->GetURL()); | |
| 3030 | |
| 3031 // Simulate Chromium having set the favicon for |kPageWithFavicon|. | |
| 3032 SkBitmap bitmap; | |
| 3033 bitmap.setConfig(SkBitmap::kARGB_8888_Config, 1, 1); | |
| 3034 bitmap.allocPixels(); | |
| 3035 | |
| 3036 content::FaviconStatus& favicon_status = entry->GetFavicon(); | |
| 3037 favicon_status.image = gfx::Image(bitmap); | |
| 3038 favicon_status.url = kIconURL; | |
| 3039 favicon_status.valid = true; | |
|
Charlie Reis
2012/10/23 04:53:22
Should probably test that DoImagesMatch is false h
| |
| 3040 | |
| 3041 test_rvh()->SendNavigateWithTransition( | |
| 3042 0, // same page ID. | |
| 3043 kPageWithoutFavicon, | |
| 3044 content::PAGE_TRANSITION_CLIENT_REDIRECT); | |
| 3045 EXPECT_TRUE(notifications.Check1AndReset( | |
| 3046 content::NOTIFICATION_NAV_ENTRY_COMMITTED)); | |
| 3047 | |
| 3048 entry = controller.GetLastCommittedEntry(); | |
| 3049 EXPECT_TRUE(entry); | |
| 3050 EXPECT_EQ(kPageWithoutFavicon, entry->GetURL()); | |
| 3051 | |
| 3052 EXPECT_TRUE(DoImagesMatch(kDefaultFavicon, entry->GetFavicon().image)); | |
| 3053 } | |
| 3054 | |
| 3055 // Check that the favicon is not cleared for NavigationEntrys which were | |
|
Charlie Reis
2012/10/23 04:53:22
nit: NavigationEntries
| |
| 3056 // previously navigated to. | |
| 3057 TEST_F(NavigationControllerTest, BackNavigationDoesNotClearFavicon) { | |
| 3058 const GURL kUrl1("http://www.a.com/1"); | |
| 3059 const GURL kUrl2("http://www.a.com/2"); | |
| 3060 const GURL kIconURL("http://withfavicon.ico"); | |
| 3061 | |
| 3062 NavigationControllerImpl& controller = controller_impl(); | |
| 3063 content::TestNotificationTracker notifications; | |
| 3064 RegisterForAllNavNotifications(¬ifications, &controller); | |
| 3065 | |
| 3066 test_rvh()->SendNavigate(0, kUrl1); | |
| 3067 EXPECT_TRUE(notifications.Check1AndReset( | |
| 3068 content::NOTIFICATION_NAV_ENTRY_COMMITTED)); | |
| 3069 | |
| 3070 // Simulate Chromium having set the favicon for |kUrl1|. | |
| 3071 SkBitmap favicon_bitmap; | |
| 3072 favicon_bitmap.setConfig(SkBitmap::kARGB_8888_Config, 1, 1); | |
| 3073 favicon_bitmap.allocPixels(); | |
| 3074 | |
| 3075 content::NavigationEntry* entry = controller.GetLastCommittedEntry(); | |
| 3076 EXPECT_TRUE(entry); | |
| 3077 content::FaviconStatus& favicon_status = entry->GetFavicon(); | |
| 3078 favicon_status.image = gfx::Image(favicon_bitmap); | |
| 3079 favicon_status.url = kIconURL; | |
| 3080 favicon_status.valid = true; | |
| 3081 | |
| 3082 // Navigate to another page and go back to the original page. | |
| 3083 test_rvh()->SendNavigate(1, kUrl2); | |
| 3084 EXPECT_TRUE(notifications.Check1AndReset( | |
| 3085 content::NOTIFICATION_NAV_ENTRY_COMMITTED)); | |
| 3086 test_rvh()->SendNavigateWithTransition( | |
| 3087 0, | |
| 3088 kUrl1, | |
| 3089 content::PAGE_TRANSITION_FORWARD_BACK); | |
| 3090 EXPECT_TRUE(notifications.Check1AndReset( | |
| 3091 content::NOTIFICATION_NAV_ENTRY_COMMITTED)); | |
| 3092 | |
| 3093 // Verify that the favicon for the page at |kUrl1| was not cleared. | |
| 3094 gfx::Image favicon_after_back; | |
| 3095 entry = controller.GetEntryAtIndex(0); | |
| 3096 EXPECT_TRUE(entry); | |
| 3097 EXPECT_EQ(kUrl1, entry->GetURL()); | |
| 3098 EXPECT_TRUE(DoImagesMatch(gfx::Image(favicon_bitmap), | |
| 3099 entry->GetFavicon().image)); | |
| 3100 } | |
| 3101 | |
| 2992 /* TODO(brettw) These test pass on my local machine but fail on the XP buildbot | 3102 /* TODO(brettw) These test pass on my local machine but fail on the XP buildbot |
| 2993 (but not Vista) cleaning up the directory after they run. | 3103 (but not Vista) cleaning up the directory after they run. |
| 2994 This should be fixed. | 3104 This should be fixed. |
| 2995 | 3105 |
| 2996 // NavigationControllerHistoryTest --------------------------------------------- | 3106 // NavigationControllerHistoryTest --------------------------------------------- |
| 2997 | 3107 |
| 2998 class NavigationControllerHistoryTest : public NavigationControllerTest { | 3108 class NavigationControllerHistoryTest : public NavigationControllerTest { |
| 2999 public: | 3109 public: |
| 3000 NavigationControllerHistoryTest() | 3110 NavigationControllerHistoryTest() |
| 3001 : url0("http://foo1"), | 3111 : url0("http://foo1"), |
| (...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3159 TabNavigation nav(0, url0, GURL(), string16(), | 3269 TabNavigation nav(0, url0, GURL(), string16(), |
| 3160 webkit_glue::CreateHistoryStateForURL(url0), | 3270 webkit_glue::CreateHistoryStateForURL(url0), |
| 3161 content::PAGE_TRANSITION_LINK); | 3271 content::PAGE_TRANSITION_LINK); |
| 3162 session_helper_.AssertNavigationEquals(nav, | 3272 session_helper_.AssertNavigationEquals(nav, |
| 3163 windows_[0]->tabs[0]->navigations[0]); | 3273 windows_[0]->tabs[0]->navigations[0]); |
| 3164 nav.set_url(url2); | 3274 nav.set_url(url2); |
| 3165 session_helper_.AssertNavigationEquals(nav, | 3275 session_helper_.AssertNavigationEquals(nav, |
| 3166 windows_[0]->tabs[0]->navigations[1]); | 3276 windows_[0]->tabs[0]->navigations[1]); |
| 3167 } | 3277 } |
| 3168 */ | 3278 */ |
| OLD | NEW |