Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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/file_util.h" | 5 #include "base/file_util.h" |
| 6 #include "base/memory/scoped_ptr.h" | 6 #include "base/memory/scoped_ptr.h" |
| 7 #include "base/path_service.h" | 7 #include "base/path_service.h" |
| 8 #include "base/stl_util-inl.h" | 8 #include "base/stl_util-inl.h" |
| 9 #include "base/string_util.h" | 9 #include "base/string_util.h" |
| 10 #include "base/utf_string_conversions.h" | 10 #include "base/utf_string_conversions.h" |
| 11 #include "chrome/browser/history/history.h" | 11 // These are only used for commented out tests. If someone wants to enable |
| 12 #include "chrome/browser/profiles/profile_manager.h" | 12 // them, they should be moved to chrome first. |
| 13 #include "chrome/browser/sessions/session_service.h" | 13 // #include "chrome/browser/history/history.h" |
| 14 #include "chrome/browser/sessions/session_service_factory.h" | 14 // #include "chrome/browser/profiles/profile_manager.h" |
| 15 #include "chrome/browser/sessions/session_service_test_helper.h" | 15 // #include "chrome/browser/sessions/session_service.h" |
| 16 // #include "chrome/browser/sessions/session_service_factory.h" | |
| 17 // #include "chrome/browser/sessions/session_service_test_helper.h" | |
| 16 #include "chrome/browser/sessions/session_types.h" | 18 #include "chrome/browser/sessions/session_types.h" |
| 17 #include "chrome/common/render_messages.h" | 19 #include "chrome/common/render_messages.h" |
| 18 #include "chrome/test/test_notification_tracker.h" | 20 #include "chrome/test/test_notification_tracker.h" |
| 19 #include "chrome/test/testing_profile.h" | 21 #include "chrome/test/testing_profile.h" |
| 20 #include "content/browser/renderer_host/test_render_view_host.h" | 22 #include "content/browser/renderer_host/test_render_view_host.h" |
| 21 #include "content/browser/site_instance.h" | 23 #include "content/browser/site_instance.h" |
| 22 #include "content/browser/tab_contents/navigation_controller.h" | 24 #include "content/browser/tab_contents/navigation_controller.h" |
| 23 #include "content/browser/tab_contents/navigation_entry.h" | 25 #include "content/browser/tab_contents/navigation_entry.h" |
| 24 #include "content/browser/tab_contents/tab_contents.h" | 26 #include "content/browser/tab_contents/tab_contents.h" |
| 25 #include "content/browser/tab_contents/tab_contents_delegate.h" | 27 #include "content/browser/tab_contents/tab_contents_delegate.h" |
| 26 #include "content/browser/tab_contents/test_tab_contents.h" | 28 #include "content/browser/tab_contents/test_tab_contents.h" |
| 27 #include "content/common/notification_registrar.h" | 29 #include "content/common/notification_registrar.h" |
| 28 #include "content/common/view_messages.h" | 30 #include "content/common/view_messages.h" |
| 29 #include "net/base/net_util.h" | 31 #include "net/base/net_util.h" |
| 30 #include "testing/gtest/include/gtest/gtest.h" | 32 #include "testing/gtest/include/gtest/gtest.h" |
| 31 #include "webkit/glue/webkit_glue.h" | 33 #include "webkit/glue/webkit_glue.h" |
| 32 | 34 |
| 33 using base::Time; | 35 using base::Time; |
| 34 | 36 |
| 35 // NavigationControllerTest ---------------------------------------------------- | 37 // NavigationControllerTest ---------------------------------------------------- |
| 36 | 38 |
| 37 class NavigationControllerTest : public RenderViewHostTestHarness { | 39 class NavigationControllerTest : public RenderViewHostTestHarness { |
| 38 public: | 40 public: |
| 39 NavigationControllerTest() {} | 41 NavigationControllerTest() {} |
| 40 }; | 42 }; |
| 41 | 43 |
| 42 // NavigationControllerHistoryTest --------------------------------------------- | |
| 43 | |
| 44 class NavigationControllerHistoryTest : public NavigationControllerTest { | |
| 45 public: | |
| 46 NavigationControllerHistoryTest() | |
| 47 : url0("http://foo1"), | |
| 48 url1("http://foo1"), | |
| 49 url2("http://foo1"), | |
| 50 profile_manager_(NULL) { | |
| 51 } | |
| 52 | |
| 53 virtual ~NavigationControllerHistoryTest() { | |
| 54 // Prevent our base class from deleting the profile since profile's | |
| 55 // lifetime is managed by profile_manager_. | |
| 56 STLDeleteElements(&windows_); | |
| 57 } | |
| 58 | |
| 59 // testing::Test overrides. | |
| 60 virtual void SetUp() { | |
| 61 NavigationControllerTest::SetUp(); | |
| 62 | |
| 63 // Force the session service to be created. | |
| 64 SessionService* service = new SessionService(profile()); | |
| 65 SessionServiceFactory::SetForTestProfile(profile(), service); | |
| 66 service->SetWindowType(window_id, Browser::TYPE_TABBED); | |
| 67 service->SetWindowBounds(window_id, gfx::Rect(0, 1, 2, 3), false); | |
| 68 service->SetTabIndexInWindow(window_id, | |
| 69 controller().session_id(), 0); | |
| 70 controller().SetWindowID(window_id); | |
| 71 | |
| 72 session_helper_.set_service(service); | |
| 73 } | |
| 74 | |
| 75 virtual void TearDown() { | |
| 76 // Release profile's reference to the session service. Otherwise the file | |
| 77 // will still be open and we won't be able to delete the directory below. | |
| 78 session_helper_.ReleaseService(); // profile owns this | |
| 79 SessionServiceFactory::SetForTestProfile(profile(), NULL); | |
| 80 | |
| 81 // Make sure we wait for history to shut down before continuing. The task | |
| 82 // we add will cause our message loop to quit once it is destroyed. | |
| 83 HistoryService* history = | |
| 84 profile()->GetHistoryService(Profile::IMPLICIT_ACCESS); | |
| 85 if (history) { | |
| 86 history->SetOnBackendDestroyTask(new MessageLoop::QuitTask); | |
| 87 MessageLoop::current()->Run(); | |
| 88 } | |
| 89 | |
| 90 // Do normal cleanup before deleting the profile directory below. | |
| 91 NavigationControllerTest::TearDown(); | |
| 92 | |
| 93 ASSERT_TRUE(file_util::Delete(test_dir_, true)); | |
| 94 ASSERT_FALSE(file_util::PathExists(test_dir_)); | |
| 95 } | |
| 96 | |
| 97 // Deletes the current profile manager and creates a new one. Indirectly this | |
| 98 // shuts down the history database and reopens it. | |
| 99 void ReopenDatabase() { | |
| 100 session_helper_.set_service(NULL); | |
| 101 SessionServiceFactory::SetForTestProfile(profile(), NULL); | |
| 102 | |
| 103 SessionService* service = new SessionService(profile()); | |
| 104 SessionServiceFactory::SetForTestProfile(profile(), service); | |
| 105 session_helper_.set_service(service); | |
| 106 } | |
| 107 | |
| 108 void GetLastSession() { | |
| 109 SessionServiceFactory::GetForProfile(profile())->TabClosed( | |
| 110 controller().window_id(), controller().session_id(), false); | |
| 111 | |
| 112 ReopenDatabase(); | |
| 113 Time close_time; | |
| 114 | |
| 115 session_helper_.ReadWindows(&windows_); | |
| 116 } | |
| 117 | |
| 118 CancelableRequestConsumer consumer; | |
| 119 | |
| 120 // URLs for testing. | |
| 121 const GURL url0; | |
| 122 const GURL url1; | |
| 123 const GURL url2; | |
| 124 | |
| 125 std::vector<SessionWindow*> windows_; | |
| 126 | |
| 127 SessionID window_id; | |
| 128 | |
| 129 SessionServiceTestHelper session_helper_; | |
| 130 | |
| 131 private: | |
| 132 ProfileManager* profile_manager_; | |
| 133 FilePath test_dir_; | |
| 134 }; | |
| 135 | |
| 136 void RegisterForAllNavNotifications(TestNotificationTracker* tracker, | 44 void RegisterForAllNavNotifications(TestNotificationTracker* tracker, |
| 137 NavigationController* controller) { | 45 NavigationController* controller) { |
| 138 tracker->ListenFor(NotificationType::NAV_ENTRY_COMMITTED, | 46 tracker->ListenFor(NotificationType::NAV_ENTRY_COMMITTED, |
| 139 Source<NavigationController>(controller)); | 47 Source<NavigationController>(controller)); |
| 140 tracker->ListenFor(NotificationType::NAV_LIST_PRUNED, | 48 tracker->ListenFor(NotificationType::NAV_LIST_PRUNED, |
| 141 Source<NavigationController>(controller)); | 49 Source<NavigationController>(controller)); |
| 142 tracker->ListenFor(NotificationType::NAV_ENTRY_CHANGED, | 50 tracker->ListenFor(NotificationType::NAV_ENTRY_CHANGED, |
| 143 Source<NavigationController>(controller)); | 51 Source<NavigationController>(controller)); |
| 144 } | 52 } |
| 145 | 53 |
| (...skipping 2013 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2159 | 2067 |
| 2160 EXPECT_EQ(-1, controller().pending_entry_index()); | 2068 EXPECT_EQ(-1, controller().pending_entry_index()); |
| 2161 EXPECT_EQ(-1, controller().pending_entry_index()); | 2069 EXPECT_EQ(-1, controller().pending_entry_index()); |
| 2162 EXPECT_EQ(controller().GetTransientEntry()->url(), transient_url); | 2070 EXPECT_EQ(controller().GetTransientEntry()->url(), transient_url); |
| 2163 } | 2071 } |
| 2164 | 2072 |
| 2165 /* TODO(brettw) These test pass on my local machine but fail on the XP buildbot | 2073 /* TODO(brettw) These test pass on my local machine but fail on the XP buildbot |
| 2166 (but not Vista) cleaning up the directory after they run. | 2074 (but not Vista) cleaning up the directory after they run. |
| 2167 This should be fixed. | 2075 This should be fixed. |
| 2168 | 2076 |
| 2077 // NavigationControllerHistoryTest --------------------------------------------- | |
| 2078 | |
| 2079 class NavigationControllerHistoryTest : public NavigationControllerTest { | |
|
brettw
2011/05/24 16:21:03
It looks like you commented this out. Does this re
jam
2011/05/24 16:26:49
Not sure what you mean by testing story? The test
| |
| 2080 public: | |
| 2081 NavigationControllerHistoryTest() | |
| 2082 : url0("http://foo1"), | |
| 2083 url1("http://foo1"), | |
| 2084 url2("http://foo1"), | |
| 2085 profile_manager_(NULL) { | |
| 2086 } | |
| 2087 | |
| 2088 virtual ~NavigationControllerHistoryTest() { | |
| 2089 // Prevent our base class from deleting the profile since profile's | |
| 2090 // lifetime is managed by profile_manager_. | |
| 2091 STLDeleteElements(&windows_); | |
| 2092 } | |
| 2093 | |
| 2094 // testing::Test overrides. | |
| 2095 virtual void SetUp() { | |
| 2096 NavigationControllerTest::SetUp(); | |
| 2097 | |
| 2098 // Force the session service to be created. | |
| 2099 SessionService* service = new SessionService(profile()); | |
| 2100 SessionServiceFactory::SetForTestProfile(profile(), service); | |
| 2101 service->SetWindowType(window_id, Browser::TYPE_TABBED); | |
| 2102 service->SetWindowBounds(window_id, gfx::Rect(0, 1, 2, 3), false); | |
| 2103 service->SetTabIndexInWindow(window_id, | |
| 2104 controller().session_id(), 0); | |
| 2105 controller().SetWindowID(window_id); | |
| 2106 | |
| 2107 session_helper_.set_service(service); | |
| 2108 } | |
| 2109 | |
| 2110 virtual void TearDown() { | |
| 2111 // Release profile's reference to the session service. Otherwise the file | |
| 2112 // will still be open and we won't be able to delete the directory below. | |
| 2113 session_helper_.ReleaseService(); // profile owns this | |
| 2114 SessionServiceFactory::SetForTestProfile(profile(), NULL); | |
| 2115 | |
| 2116 // Make sure we wait for history to shut down before continuing. The task | |
| 2117 // we add will cause our message loop to quit once it is destroyed. | |
| 2118 HistoryService* history = | |
| 2119 profile()->GetHistoryService(Profile::IMPLICIT_ACCESS); | |
| 2120 if (history) { | |
| 2121 history->SetOnBackendDestroyTask(new MessageLoop::QuitTask); | |
| 2122 MessageLoop::current()->Run(); | |
| 2123 } | |
| 2124 | |
| 2125 // Do normal cleanup before deleting the profile directory below. | |
| 2126 NavigationControllerTest::TearDown(); | |
| 2127 | |
| 2128 ASSERT_TRUE(file_util::Delete(test_dir_, true)); | |
| 2129 ASSERT_FALSE(file_util::PathExists(test_dir_)); | |
| 2130 } | |
| 2131 | |
| 2132 // Deletes the current profile manager and creates a new one. Indirectly this | |
| 2133 // shuts down the history database and reopens it. | |
| 2134 void ReopenDatabase() { | |
| 2135 session_helper_.set_service(NULL); | |
| 2136 SessionServiceFactory::SetForTestProfile(profile(), NULL); | |
| 2137 | |
| 2138 SessionService* service = new SessionService(profile()); | |
| 2139 SessionServiceFactory::SetForTestProfile(profile(), service); | |
| 2140 session_helper_.set_service(service); | |
| 2141 } | |
| 2142 | |
| 2143 void GetLastSession() { | |
| 2144 SessionServiceFactory::GetForProfile(profile())->TabClosed( | |
| 2145 controller().window_id(), controller().session_id(), false); | |
| 2146 | |
| 2147 ReopenDatabase(); | |
| 2148 Time close_time; | |
| 2149 | |
| 2150 session_helper_.ReadWindows(&windows_); | |
| 2151 } | |
| 2152 | |
| 2153 CancelableRequestConsumer consumer; | |
| 2154 | |
| 2155 // URLs for testing. | |
| 2156 const GURL url0; | |
| 2157 const GURL url1; | |
| 2158 const GURL url2; | |
| 2159 | |
| 2160 std::vector<SessionWindow*> windows_; | |
| 2161 | |
| 2162 SessionID window_id; | |
| 2163 | |
| 2164 SessionServiceTestHelper session_helper_; | |
| 2165 | |
| 2166 private: | |
| 2167 ProfileManager* profile_manager_; | |
| 2168 FilePath test_dir_; | |
| 2169 }; | |
| 2170 | |
| 2169 // A basic test case. Navigates to a single url, and make sure the history | 2171 // A basic test case. Navigates to a single url, and make sure the history |
| 2170 // db matches. | 2172 // db matches. |
| 2171 TEST_F(NavigationControllerHistoryTest, Basic) { | 2173 TEST_F(NavigationControllerHistoryTest, Basic) { |
| 2172 controller().LoadURL(url0, GURL(), PageTransition::LINK); | 2174 controller().LoadURL(url0, GURL(), PageTransition::LINK); |
| 2173 rvh()->SendNavigate(0, url0); | 2175 rvh()->SendNavigate(0, url0); |
| 2174 | 2176 |
| 2175 GetLastSession(); | 2177 GetLastSession(); |
| 2176 | 2178 |
| 2177 session_helper_.AssertSingleWindowWithSingleTab(windows_, 1); | 2179 session_helper_.AssertSingleWindowWithSingleTab(windows_, 1); |
| 2178 session_helper_.AssertTabEquals(0, 0, 1, *(windows_[0]->tabs[0])); | 2180 session_helper_.AssertTabEquals(0, 0, 1, *(windows_[0]->tabs[0])); |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2235 TabNavigation nav(0, url0, GURL(), string16(), | 2237 TabNavigation nav(0, url0, GURL(), string16(), |
| 2236 webkit_glue::CreateHistoryStateForURL(url0), | 2238 webkit_glue::CreateHistoryStateForURL(url0), |
| 2237 PageTransition::LINK); | 2239 PageTransition::LINK); |
| 2238 session_helper_.AssertNavigationEquals(nav, | 2240 session_helper_.AssertNavigationEquals(nav, |
| 2239 windows_[0]->tabs[0]->navigations[0]); | 2241 windows_[0]->tabs[0]->navigations[0]); |
| 2240 nav.set_url(url2); | 2242 nav.set_url(url2); |
| 2241 session_helper_.AssertNavigationEquals(nav, | 2243 session_helper_.AssertNavigationEquals(nav, |
| 2242 windows_[0]->tabs[0]->navigations[1]); | 2244 windows_[0]->tabs[0]->navigations[1]); |
| 2243 } | 2245 } |
| 2244 */ | 2246 */ |
| OLD | NEW |