OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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" |
11 #include "base/platform_thread.h" | 11 #include "base/platform_thread.h" |
12 #include "base/scoped_ptr.h" | 12 #include "base/scoped_ptr.h" |
13 #include "base/string_util.h" | 13 #include "base/string_util.h" |
14 #include "base/string16.h" | 14 #include "base/string16.h" |
15 #include "base/utf_string_conversions.h" | 15 #include "base/utf_string_conversions.h" |
| 16 #include "chrome/browser/view_ids.h" |
| 17 #include "chrome/test/automation/browser_proxy.h" |
16 #include "chrome/test/automation/tab_proxy.h" | 18 #include "chrome/test/automation/tab_proxy.h" |
| 19 #include "chrome/test/automation/window_proxy.h" |
17 #include "chrome/test/ui/ui_test.h" | 20 #include "chrome/test/ui/ui_test.h" |
18 #include "net/base/net_util.h" | 21 #include "net/base/net_util.h" |
19 #include "net/test/test_server.h" | 22 #include "net/test/test_server.h" |
| 23 #include "views/event.h" |
20 | 24 |
21 namespace { | 25 namespace { |
22 | 26 |
23 class RedirectTest : public UITest { | 27 class RedirectTest : public UITest { |
24 public: | 28 public: |
25 RedirectTest() | 29 RedirectTest() |
26 : test_server_(net::TestServer::TYPE_HTTP, | 30 : test_server_(net::TestServer::TYPE_HTTP, |
27 FilePath(FILE_PATH_LITERAL("chrome/test/data"))) { | 31 FilePath(FILE_PATH_LITERAL("chrome/test/data"))) { |
28 } | 32 } |
29 | 33 |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
98 std::vector<GURL> redirects; | 102 std::vector<GURL> redirects; |
99 scoped_refptr<TabProxy> tab_proxy(GetActiveTab()); | 103 scoped_refptr<TabProxy> tab_proxy(GetActiveTab()); |
100 ASSERT_TRUE(tab_proxy.get()); | 104 ASSERT_TRUE(tab_proxy.get()); |
101 ASSERT_TRUE(tab_proxy->GetRedirectsFrom(first_url, &redirects)); | 105 ASSERT_TRUE(tab_proxy->GetRedirectsFrom(first_url, &redirects)); |
102 ASSERT_EQ(1U, redirects.size()); | 106 ASSERT_EQ(1U, redirects.size()); |
103 EXPECT_EQ(final_url.spec(), redirects[0].spec()); | 107 EXPECT_EQ(final_url.spec(), redirects[0].spec()); |
104 } | 108 } |
105 | 109 |
106 // Tests to make sure a location change when a pending redirect exists isn't | 110 // Tests to make sure a location change when a pending redirect exists isn't |
107 // flagged as a redirect. | 111 // flagged as a redirect. |
| 112 #if defined(OS_WIN) || defined(OS_LINUX) |
| 113 // SimulateOSClick is broken on the Mac: http://crbug.com/45162 |
108 TEST_F(RedirectTest, ClientCancelled) { | 114 TEST_F(RedirectTest, ClientCancelled) { |
109 FilePath first_path(test_data_directory_); | 115 FilePath first_path(test_data_directory_); |
110 first_path = first_path.AppendASCII("cancelled_redirect_test.html"); | 116 first_path = first_path.AppendASCII("cancelled_redirect_test.html"); |
111 ASSERT_TRUE(file_util::AbsolutePath(&first_path)); | 117 ASSERT_TRUE(file_util::AbsolutePath(&first_path)); |
112 GURL first_url = net::FilePathToFileURL(first_path); | 118 GURL first_url = net::FilePathToFileURL(first_path); |
113 | 119 |
114 NavigateToURLBlockUntilNavigationsComplete(first_url, 1); | 120 NavigateToURLBlockUntilNavigationsComplete(first_url, 1); |
115 | 121 |
116 NavigateToURL(GURL("javascript:click()")); // User initiated location change. | 122 scoped_refptr<BrowserProxy> browser = automation()->GetBrowserWindow(0); |
117 | 123 ASSERT_TRUE(browser.get()); |
| 124 scoped_refptr<WindowProxy> window = browser->GetWindow(); |
| 125 ASSERT_TRUE(window.get()); |
118 scoped_refptr<TabProxy> tab_proxy(GetActiveTab()); | 126 scoped_refptr<TabProxy> tab_proxy(GetActiveTab()); |
119 ASSERT_TRUE(tab_proxy.get()); | 127 ASSERT_TRUE(tab_proxy.get()); |
| 128 int64 last_nav_time = 0; |
| 129 EXPECT_TRUE(tab_proxy->GetLastNavigationTime(&last_nav_time)); |
| 130 // Simulate a click to force to make a user-initiated location change; |
| 131 // otherwise, a non user-initiated in-page location change will be treated |
| 132 // as client redirect and the redirect will be recoreded, which can cause |
| 133 // this test failed. |
| 134 gfx::Rect tab_view_bounds; |
| 135 ASSERT_TRUE(browser->BringToFront()); |
| 136 ASSERT_TRUE(window->GetViewBounds(VIEW_ID_TAB_CONTAINER, &tab_view_bounds, |
| 137 true)); |
| 138 ASSERT_TRUE( |
| 139 window->SimulateOSClick(tab_view_bounds.CenterPoint(), |
| 140 views::Event::EF_LEFT_BUTTON_DOWN)); |
| 141 EXPECT_TRUE(tab_proxy->WaitForNavigation(last_nav_time)); |
120 | 142 |
121 std::vector<GURL> redirects; | 143 std::vector<GURL> redirects; |
122 ASSERT_TRUE(tab_proxy->GetRedirectsFrom(first_url, &redirects)); | 144 ASSERT_TRUE(tab_proxy->GetRedirectsFrom(first_url, &redirects)); |
123 | 145 |
124 // There should be no redirects from first_url, because the anchor location | 146 // There should be no redirects from first_url, because the anchor location |
125 // change that occurs should not be flagged as a redirect and the meta-refresh | 147 // change that occurs should not be flagged as a redirect and the meta-refresh |
126 // won't have fired yet. | 148 // won't have fired yet. |
127 ASSERT_EQ(0U, redirects.size()); | 149 ASSERT_EQ(0U, redirects.size()); |
128 GURL current_url; | 150 GURL current_url; |
129 ASSERT_TRUE(tab_proxy->GetCurrentURL(¤t_url)); | 151 ASSERT_TRUE(tab_proxy->GetCurrentURL(¤t_url)); |
130 | 152 |
131 // Need to test final path and ref separately since constructing a file url | 153 // Need to test final path and ref separately since constructing a file url |
132 // containing an anchor using FilePathToFileURL will escape the anchor as | 154 // containing an anchor using FilePathToFileURL will escape the anchor as |
133 // %23, but in current_url the anchor will be '#'. | 155 // %23, but in current_url the anchor will be '#'. |
134 std::string final_ref = "myanchor"; | 156 std::string final_ref = "myanchor"; |
135 FilePath current_path; | 157 FilePath current_path; |
136 ASSERT_TRUE(net::FileURLToFilePath(current_url, ¤t_path)); | 158 ASSERT_TRUE(net::FileURLToFilePath(current_url, ¤t_path)); |
137 ASSERT_TRUE(file_util::AbsolutePath(¤t_path)); | 159 ASSERT_TRUE(file_util::AbsolutePath(¤t_path)); |
138 // Path should remain unchanged. | 160 // Path should remain unchanged. |
139 EXPECT_EQ(StringToLowerASCII(first_path.value()), | 161 EXPECT_EQ(StringToLowerASCII(first_path.value()), |
140 StringToLowerASCII(current_path.value())); | 162 StringToLowerASCII(current_path.value())); |
141 EXPECT_EQ(final_ref, current_url.ref()); | 163 EXPECT_EQ(final_ref, current_url.ref()); |
142 } | 164 } |
| 165 #endif |
143 | 166 |
144 // Tests a client->server->server redirect | 167 // Tests a client->server->server redirect |
145 TEST_F(RedirectTest, ClientServerServer) { | 168 TEST_F(RedirectTest, ClientServerServer) { |
146 ASSERT_TRUE(test_server_.Start()); | 169 ASSERT_TRUE(test_server_.Start()); |
147 | 170 |
148 GURL final_url = test_server_.GetURL(std::string()); | 171 GURL final_url = test_server_.GetURL(std::string()); |
149 GURL next_to_last = test_server_.GetURL( | 172 GURL next_to_last = test_server_.GetURL( |
150 "server-redirect?" + final_url.spec()); | 173 "server-redirect?" + final_url.spec()); |
151 GURL second_url = test_server_.GetURL( | 174 GURL second_url = test_server_.GetURL( |
152 "server-redirect?" + next_to_last.spec()); | 175 "server-redirect?" + next_to_last.spec()); |
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
286 it != redirects.end(); ++it) { | 309 it != redirects.end(); ++it) { |
287 if (final_url.spec() == it->spec()) { | 310 if (final_url.spec() == it->spec()) { |
288 final_navigation_not_redirect = false; | 311 final_navigation_not_redirect = false; |
289 break; | 312 break; |
290 } | 313 } |
291 } | 314 } |
292 EXPECT_TRUE(final_navigation_not_redirect); | 315 EXPECT_TRUE(final_navigation_not_redirect); |
293 } | 316 } |
294 | 317 |
295 } // namespace | 318 } // namespace |
OLD | NEW |