| OLD | NEW |
| 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 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 // Navigates the browser to server and client redirect pages and makes sure | 5 // Navigates the browser to server and client redirect pages and makes sure |
| 6 // that the correct redirects are reflected in the history database. Errors | 6 // that the correct redirects are reflected in the history database. Errors |
| 7 // here might indicate that WebKit changed the calls our glue layer gets in | 7 // here might indicate that WebKit changed the calls our glue layer gets in |
| 8 // the case of redirects. It may also mean problems with the history system. | 8 // the case of redirects. It may also mean problems with the history system. |
| 9 | 9 |
| 10 #include "base/file_util.h" | 10 #include "base/file_util.h" |
| (...skipping 20 matching lines...) Expand all Loading... |
| 31 scoped_refptr<HTTPTestServer> server = | 31 scoped_refptr<HTTPTestServer> server = |
| 32 HTTPTestServer::CreateServer(kDocRoot, NULL); | 32 HTTPTestServer::CreateServer(kDocRoot, NULL); |
| 33 ASSERT_TRUE(NULL != server.get()); | 33 ASSERT_TRUE(NULL != server.get()); |
| 34 | 34 |
| 35 GURL final_url = server->TestServerPageW(std::wstring()); | 35 GURL final_url = server->TestServerPageW(std::wstring()); |
| 36 GURL first_url = server->TestServerPageW( | 36 GURL first_url = server->TestServerPageW( |
| 37 std::wstring(L"server-redirect?") + UTF8ToWide(final_url.spec())); | 37 std::wstring(L"server-redirect?") + UTF8ToWide(final_url.spec())); |
| 38 | 38 |
| 39 NavigateToURL(first_url); | 39 NavigateToURL(first_url); |
| 40 | 40 |
| 41 scoped_ptr<TabProxy> tab_proxy(GetActiveTab()); | 41 scoped_refptr<TabProxy> tab_proxy(GetActiveTab()); |
| 42 ASSERT_TRUE(tab_proxy.get()); | 42 ASSERT_TRUE(tab_proxy.get()); |
| 43 | 43 |
| 44 std::vector<GURL> redirects; | 44 std::vector<GURL> redirects; |
| 45 ASSERT_TRUE(tab_proxy->GetRedirectsFrom(first_url, &redirects)); | 45 ASSERT_TRUE(tab_proxy->GetRedirectsFrom(first_url, &redirects)); |
| 46 | 46 |
| 47 ASSERT_EQ(1U, redirects.size()); | 47 ASSERT_EQ(1U, redirects.size()); |
| 48 EXPECT_EQ(final_url.spec(), redirects[0].spec()); | 48 EXPECT_EQ(final_url.spec(), redirects[0].spec()); |
| 49 } | 49 } |
| 50 | 50 |
| 51 // Tests a single client redirect. | 51 // Tests a single client redirect. |
| 52 TEST_F(RedirectTest, Client) { | 52 TEST_F(RedirectTest, Client) { |
| 53 scoped_refptr<HTTPTestServer> server = | 53 scoped_refptr<HTTPTestServer> server = |
| 54 HTTPTestServer::CreateServer(kDocRoot, NULL); | 54 HTTPTestServer::CreateServer(kDocRoot, NULL); |
| 55 ASSERT_TRUE(NULL != server.get()); | 55 ASSERT_TRUE(NULL != server.get()); |
| 56 | 56 |
| 57 GURL final_url = server->TestServerPageW(std::wstring()); | 57 GURL final_url = server->TestServerPageW(std::wstring()); |
| 58 GURL first_url = server->TestServerPageW( | 58 GURL first_url = server->TestServerPageW( |
| 59 std::wstring(L"client-redirect?") + UTF8ToWide(final_url.spec())); | 59 std::wstring(L"client-redirect?") + UTF8ToWide(final_url.spec())); |
| 60 | 60 |
| 61 // We need the sleep for the client redirects, because it appears as two | 61 // We need the sleep for the client redirects, because it appears as two |
| 62 // page visits in the browser. | 62 // page visits in the browser. |
| 63 NavigateToURL(first_url); | 63 NavigateToURL(first_url); |
| 64 PlatformThread::Sleep(action_timeout_ms()); | 64 PlatformThread::Sleep(action_timeout_ms()); |
| 65 | 65 |
| 66 scoped_ptr<TabProxy> tab_proxy(GetActiveTab()); | 66 scoped_refptr<TabProxy> tab_proxy(GetActiveTab()); |
| 67 ASSERT_TRUE(tab_proxy.get()); | 67 ASSERT_TRUE(tab_proxy.get()); |
| 68 | 68 |
| 69 std::vector<GURL> redirects; | 69 std::vector<GURL> redirects; |
| 70 ASSERT_TRUE(tab_proxy->GetRedirectsFrom(first_url, &redirects)); | 70 ASSERT_TRUE(tab_proxy->GetRedirectsFrom(first_url, &redirects)); |
| 71 | 71 |
| 72 ASSERT_EQ(1U, redirects.size()); | 72 ASSERT_EQ(1U, redirects.size()); |
| 73 EXPECT_EQ(final_url.spec(), redirects[0].spec()); | 73 EXPECT_EQ(final_url.spec(), redirects[0].spec()); |
| 74 } | 74 } |
| 75 | 75 |
| 76 TEST_F(RedirectTest, ClientEmptyReferer) { | 76 TEST_F(RedirectTest, ClientEmptyReferer) { |
| 77 scoped_refptr<HTTPTestServer> server = | 77 scoped_refptr<HTTPTestServer> server = |
| 78 HTTPTestServer::CreateServer(kDocRoot, NULL); | 78 HTTPTestServer::CreateServer(kDocRoot, NULL); |
| 79 ASSERT_TRUE(NULL != server.get()); | 79 ASSERT_TRUE(NULL != server.get()); |
| 80 | 80 |
| 81 GURL final_url = server->TestServerPageW(std::wstring()); | 81 GURL final_url = server->TestServerPageW(std::wstring()); |
| 82 FilePath test_file(test_data_directory_); | 82 FilePath test_file(test_data_directory_); |
| 83 test_file = test_file.AppendASCII("file_client_redirect.html"); | 83 test_file = test_file.AppendASCII("file_client_redirect.html"); |
| 84 GURL first_url = net::FilePathToFileURL(test_file); | 84 GURL first_url = net::FilePathToFileURL(test_file); |
| 85 | 85 |
| 86 NavigateToURL(first_url); | 86 NavigateToURL(first_url); |
| 87 std::vector<GURL> redirects; | 87 std::vector<GURL> redirects; |
| 88 // We need the sleeps for the client redirects, because it appears as two | 88 // We need the sleeps for the client redirects, because it appears as two |
| 89 // page visits in the browser. And note for this test the browser actually | 89 // page visits in the browser. And note for this test the browser actually |
| 90 // loads the html file on disk, rather than just getting a response from | 90 // loads the html file on disk, rather than just getting a response from |
| 91 // the TestServer. | 91 // the TestServer. |
| 92 for (int i = 0; i < 10; ++i) { | 92 for (int i = 0; i < 10; ++i) { |
| 93 PlatformThread::Sleep(sleep_timeout_ms()); | 93 PlatformThread::Sleep(sleep_timeout_ms()); |
| 94 scoped_ptr<TabProxy> tab_proxy(GetActiveTab()); | 94 scoped_refptr<TabProxy> tab_proxy(GetActiveTab()); |
| 95 ASSERT_TRUE(tab_proxy.get()); | 95 ASSERT_TRUE(tab_proxy.get()); |
| 96 ASSERT_TRUE(tab_proxy->GetRedirectsFrom(first_url, &redirects)); | 96 ASSERT_TRUE(tab_proxy->GetRedirectsFrom(first_url, &redirects)); |
| 97 if (!redirects.empty()) | 97 if (!redirects.empty()) |
| 98 break; | 98 break; |
| 99 } | 99 } |
| 100 | 100 |
| 101 EXPECT_EQ(1U, redirects.size()); | 101 EXPECT_EQ(1U, redirects.size()); |
| 102 EXPECT_EQ(final_url.spec(), redirects[0].spec()); | 102 EXPECT_EQ(final_url.spec(), redirects[0].spec()); |
| 103 } | 103 } |
| 104 | 104 |
| 105 // Tests to make sure a location change when a pending redirect exists isn't | 105 // Tests to make sure a location change when a pending redirect exists isn't |
| 106 // flagged as a redirect. | 106 // flagged as a redirect. |
| 107 TEST_F(RedirectTest, ClientCancelled) { | 107 TEST_F(RedirectTest, ClientCancelled) { |
| 108 FilePath first_path(test_data_directory_); | 108 FilePath first_path(test_data_directory_); |
| 109 first_path = first_path.AppendASCII("cancelled_redirect_test.html"); | 109 first_path = first_path.AppendASCII("cancelled_redirect_test.html"); |
| 110 ASSERT_TRUE(file_util::AbsolutePath(&first_path)); | 110 ASSERT_TRUE(file_util::AbsolutePath(&first_path)); |
| 111 GURL first_url = net::FilePathToFileURL(first_path); | 111 GURL first_url = net::FilePathToFileURL(first_path); |
| 112 | 112 |
| 113 NavigateToURL(first_url); | 113 NavigateToURL(first_url); |
| 114 PlatformThread::Sleep(action_timeout_ms()); | 114 PlatformThread::Sleep(action_timeout_ms()); |
| 115 | 115 |
| 116 scoped_ptr<TabProxy> tab_proxy(GetActiveTab()); | 116 scoped_refptr<TabProxy> tab_proxy(GetActiveTab()); |
| 117 ASSERT_TRUE(tab_proxy.get()); | 117 ASSERT_TRUE(tab_proxy.get()); |
| 118 | 118 |
| 119 std::vector<GURL> redirects; | 119 std::vector<GURL> redirects; |
| 120 ASSERT_TRUE(tab_proxy->GetRedirectsFrom(first_url, &redirects)); | 120 ASSERT_TRUE(tab_proxy->GetRedirectsFrom(first_url, &redirects)); |
| 121 | 121 |
| 122 // There should be no redirects from first_url, because the anchor location | 122 // There should be no redirects from first_url, because the anchor location |
| 123 // change that occurs should not be flagged as a redirect and the meta-refresh | 123 // change that occurs should not be flagged as a redirect and the meta-refresh |
| 124 // won't have fired yet. | 124 // won't have fired yet. |
| 125 ASSERT_EQ(0U, redirects.size()); | 125 ASSERT_EQ(0U, redirects.size()); |
| 126 GURL current_url; | 126 GURL current_url; |
| (...skipping 28 matching lines...) Expand all Loading... |
| 155 GURL first_url = server->TestServerPageW( | 155 GURL first_url = server->TestServerPageW( |
| 156 std::wstring(L"client-redirect?") + UTF8ToWide(second_url.spec())); | 156 std::wstring(L"client-redirect?") + UTF8ToWide(second_url.spec())); |
| 157 std::vector<GURL> redirects; | 157 std::vector<GURL> redirects; |
| 158 | 158 |
| 159 // We need the sleep for the client redirects, because it appears as two | 159 // We need the sleep for the client redirects, because it appears as two |
| 160 // page visits in the browser. | 160 // page visits in the browser. |
| 161 NavigateToURL(first_url); | 161 NavigateToURL(first_url); |
| 162 | 162 |
| 163 for (int i = 0; i < 10; ++i) { | 163 for (int i = 0; i < 10; ++i) { |
| 164 PlatformThread::Sleep(sleep_timeout_ms()); | 164 PlatformThread::Sleep(sleep_timeout_ms()); |
| 165 scoped_ptr<TabProxy> tab_proxy(GetActiveTab()); | 165 scoped_refptr<TabProxy> tab_proxy(GetActiveTab()); |
| 166 ASSERT_TRUE(tab_proxy.get()); | 166 ASSERT_TRUE(tab_proxy.get()); |
| 167 ASSERT_TRUE(tab_proxy->GetRedirectsFrom(first_url, &redirects)); | 167 ASSERT_TRUE(tab_proxy->GetRedirectsFrom(first_url, &redirects)); |
| 168 if (!redirects.empty()) | 168 if (!redirects.empty()) |
| 169 break; | 169 break; |
| 170 } | 170 } |
| 171 | 171 |
| 172 ASSERT_EQ(3U, redirects.size()); | 172 ASSERT_EQ(3U, redirects.size()); |
| 173 EXPECT_EQ(second_url.spec(), redirects[0].spec()); | 173 EXPECT_EQ(second_url.spec(), redirects[0].spec()); |
| 174 EXPECT_EQ(next_to_last.spec(), redirects[1].spec()); | 174 EXPECT_EQ(next_to_last.spec(), redirects[1].spec()); |
| 175 EXPECT_EQ(final_url.spec(), redirects[2].spec()); | 175 EXPECT_EQ(final_url.spec(), redirects[2].spec()); |
| (...skipping 28 matching lines...) Expand all Loading... |
| 204 FilePath test_file(test_data_directory_); | 204 FilePath test_file(test_data_directory_); |
| 205 test_file = test_file.AppendASCII("http_to_file.html"); | 205 test_file = test_file.AppendASCII("http_to_file.html"); |
| 206 GURL file_url = net::FilePathToFileURL(test_file); | 206 GURL file_url = net::FilePathToFileURL(test_file); |
| 207 | 207 |
| 208 GURL initial_url = server->TestServerPageW( | 208 GURL initial_url = server->TestServerPageW( |
| 209 std::wstring(L"client-redirect?") + UTF8ToWide(file_url.spec())); | 209 std::wstring(L"client-redirect?") + UTF8ToWide(file_url.spec())); |
| 210 | 210 |
| 211 NavigateToURL(initial_url); | 211 NavigateToURL(initial_url); |
| 212 // UITest will check for crashes. We make sure the title doesn't match the | 212 // UITest will check for crashes. We make sure the title doesn't match the |
| 213 // title from the file, because the nav should not have taken place. | 213 // title from the file, because the nav should not have taken place. |
| 214 scoped_ptr<TabProxy> tab_proxy(GetActiveTab()); | 214 scoped_refptr<TabProxy> tab_proxy(GetActiveTab()); |
| 215 ASSERT_TRUE(tab_proxy.get()); | 215 ASSERT_TRUE(tab_proxy.get()); |
| 216 std::wstring actual_title; | 216 std::wstring actual_title; |
| 217 tab_proxy->GetTabTitle(&actual_title); | 217 tab_proxy->GetTabTitle(&actual_title); |
| 218 EXPECT_NE(L"File!", actual_title); | 218 EXPECT_NE(L"File!", actual_title); |
| 219 } | 219 } |
| 220 | 220 |
| 221 // Ensures that non-user initiated location changes (within page) are | 221 // Ensures that non-user initiated location changes (within page) are |
| 222 // flagged as client redirects. See bug 1139823. | 222 // flagged as client redirects. See bug 1139823. |
| 223 TEST_F(RedirectTest, ClientFragments) { | 223 TEST_F(RedirectTest, ClientFragments) { |
| 224 scoped_refptr<HTTPTestServer> server = | 224 scoped_refptr<HTTPTestServer> server = |
| 225 HTTPTestServer::CreateServer(kDocRoot, NULL); | 225 HTTPTestServer::CreateServer(kDocRoot, NULL); |
| 226 ASSERT_TRUE(NULL != server.get()); | 226 ASSERT_TRUE(NULL != server.get()); |
| 227 | 227 |
| 228 FilePath test_file(test_data_directory_); | 228 FilePath test_file(test_data_directory_); |
| 229 test_file = test_file.AppendASCII("ref_redirect.html"); | 229 test_file = test_file.AppendASCII("ref_redirect.html"); |
| 230 GURL first_url = net::FilePathToFileURL(test_file); | 230 GURL first_url = net::FilePathToFileURL(test_file); |
| 231 std::vector<GURL> redirects; | 231 std::vector<GURL> redirects; |
| 232 | 232 |
| 233 NavigateToURL(first_url); | 233 NavigateToURL(first_url); |
| 234 for (int i = 0; i < 10; ++i) { | 234 for (int i = 0; i < 10; ++i) { |
| 235 PlatformThread::Sleep(sleep_timeout_ms()); | 235 PlatformThread::Sleep(sleep_timeout_ms()); |
| 236 scoped_ptr<TabProxy> tab_proxy(GetActiveTab()); | 236 scoped_refptr<TabProxy> tab_proxy(GetActiveTab()); |
| 237 ASSERT_TRUE(tab_proxy.get()); | 237 ASSERT_TRUE(tab_proxy.get()); |
| 238 ASSERT_TRUE(tab_proxy->GetRedirectsFrom(first_url, &redirects)); | 238 ASSERT_TRUE(tab_proxy->GetRedirectsFrom(first_url, &redirects)); |
| 239 if (!redirects.empty()) | 239 if (!redirects.empty()) |
| 240 break; | 240 break; |
| 241 } | 241 } |
| 242 | 242 |
| 243 EXPECT_EQ(1U, redirects.size()); | 243 EXPECT_EQ(1U, redirects.size()); |
| 244 EXPECT_EQ(first_url.spec() + "#myanchor", redirects[0].spec()); | 244 EXPECT_EQ(first_url.spec() + "#myanchor", redirects[0].spec()); |
| 245 } | 245 } |
| 246 | 246 |
| (...skipping 27 matching lines...) Expand all Loading... |
| 274 // because we told the server to wait a minute. This means the browser has | 274 // because we told the server to wait a minute. This means the browser has |
| 275 // started it's provisional load for the client redirect destination page but | 275 // started it's provisional load for the client redirect destination page but |
| 276 // hasn't completed. Our time is now! | 276 // hasn't completed. Our time is now! |
| 277 NavigateToURL(final_url); | 277 NavigateToURL(final_url); |
| 278 | 278 |
| 279 std::wstring tab_title; | 279 std::wstring tab_title; |
| 280 std::wstring final_url_title = L"Title Of Awesomeness"; | 280 std::wstring final_url_title = L"Title Of Awesomeness"; |
| 281 // Wait till the final page has been loaded. | 281 // Wait till the final page has been loaded. |
| 282 for (int i = 0; i < 10; ++i) { | 282 for (int i = 0; i < 10; ++i) { |
| 283 PlatformThread::Sleep(sleep_timeout_ms()); | 283 PlatformThread::Sleep(sleep_timeout_ms()); |
| 284 scoped_ptr<TabProxy> tab_proxy(GetActiveTab()); | 284 scoped_refptr<TabProxy> tab_proxy(GetActiveTab()); |
| 285 ASSERT_TRUE(tab_proxy.get()); | 285 ASSERT_TRUE(tab_proxy.get()); |
| 286 ASSERT_TRUE(tab_proxy->GetTabTitle(&tab_title)); | 286 ASSERT_TRUE(tab_proxy->GetTabTitle(&tab_title)); |
| 287 if (tab_title == final_url_title) { | 287 if (tab_title == final_url_title) { |
| 288 ASSERT_TRUE(tab_proxy->GetRedirectsFrom(first_url, &redirects)); | 288 ASSERT_TRUE(tab_proxy->GetRedirectsFrom(first_url, &redirects)); |
| 289 break; | 289 break; |
| 290 } | 290 } |
| 291 } | 291 } |
| 292 | 292 |
| 293 // Check to make sure the navigation did in fact take place and we are | 293 // Check to make sure the navigation did in fact take place and we are |
| 294 // at the expected page. | 294 // at the expected page. |
| 295 EXPECT_EQ(final_url_title, tab_title); | 295 EXPECT_EQ(final_url_title, tab_title); |
| 296 | 296 |
| 297 bool final_navigation_not_redirect = true; | 297 bool final_navigation_not_redirect = true; |
| 298 // Check to make sure our request for files/title2.html doesn't get flagged | 298 // Check to make sure our request for files/title2.html doesn't get flagged |
| 299 // as a client redirect from the first (/client-redirect?) page. | 299 // as a client redirect from the first (/client-redirect?) page. |
| 300 for (std::vector<GURL>::iterator it = redirects.begin(); | 300 for (std::vector<GURL>::iterator it = redirects.begin(); |
| 301 it != redirects.end(); ++it) { | 301 it != redirects.end(); ++it) { |
| 302 if (final_url.spec() == it->spec()) { | 302 if (final_url.spec() == it->spec()) { |
| 303 final_navigation_not_redirect = false; | 303 final_navigation_not_redirect = false; |
| 304 break; | 304 break; |
| 305 } | 305 } |
| 306 } | 306 } |
| 307 EXPECT_TRUE(final_navigation_not_redirect); | 307 EXPECT_TRUE(final_navigation_not_redirect); |
| 308 } | 308 } |
| 309 | 309 |
| 310 } // namespace | 310 } // namespace |
| OLD | NEW |