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

Side by Side Diff: chrome/browser/history/redirect_browsertest.cc

Issue 1378123003: Adding SSL ETS Tests (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@ets
Patch Set: Rebase. Created 5 years, 1 month 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 unified diff | Download patch
OLDNEW
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 // 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/bind.h" 10 #include "base/bind.h"
(...skipping 15 matching lines...) Expand all
26 #include "chrome/browser/ui/browser.h" 26 #include "chrome/browser/ui/browser.h"
27 #include "chrome/browser/ui/tabs/tab_strip_model.h" 27 #include "chrome/browser/ui/tabs/tab_strip_model.h"
28 #include "chrome/browser/ui/view_ids.h" 28 #include "chrome/browser/ui/view_ids.h"
29 #include "chrome/test/base/in_process_browser_test.h" 29 #include "chrome/test/base/in_process_browser_test.h"
30 #include "chrome/test/base/ui_test_utils.h" 30 #include "chrome/test/base/ui_test_utils.h"
31 #include "components/history/core/browser/history_service.h" 31 #include "components/history/core/browser/history_service.h"
32 #include "content/public/browser/web_contents.h" 32 #include "content/public/browser/web_contents.h"
33 #include "content/public/test/browser_test_utils.h" 33 #include "content/public/test/browser_test_utils.h"
34 #include "content/public/test/test_navigation_observer.h" 34 #include "content/public/test/test_navigation_observer.h"
35 #include "net/base/filename_util.h" 35 #include "net/base/filename_util.h"
36 #include "net/test/spawned_test_server/spawned_test_server.h"
37 #include "ui/events/event_constants.h" 36 #include "ui/events/event_constants.h"
38 37
39 class RedirectTest : public InProcessBrowserTest { 38 class RedirectTest : public InProcessBrowserTest {
40 public: 39 public:
41 RedirectTest() {} 40 RedirectTest() {}
42 41
43 std::vector<GURL> GetRedirects(const GURL& url) { 42 std::vector<GURL> GetRedirects(const GURL& url) {
44 history::HistoryService* history_service = 43 history::HistoryService* history_service =
45 HistoryServiceFactory::GetForProfile( 44 HistoryServiceFactory::GetForProfile(
46 browser()->profile(), ServiceAccessType::EXPLICIT_ACCESS); 45 browser()->profile(), ServiceAccessType::EXPLICIT_ACCESS);
(...skipping 19 matching lines...) Expand all
66 base::ThreadTaskRunnerHandle::Get()->PostTask( 65 base::ThreadTaskRunnerHandle::Get()->PostTask(
67 FROM_HERE, base::MessageLoop::QuitWhenIdleClosure()); 66 FROM_HERE, base::MessageLoop::QuitWhenIdleClosure());
68 } 67 }
69 68
70 // Tracker for asynchronous history queries. 69 // Tracker for asynchronous history queries.
71 base::CancelableTaskTracker tracker_; 70 base::CancelableTaskTracker tracker_;
72 }; 71 };
73 72
74 // Tests a single server redirect 73 // Tests a single server redirect
75 IN_PROC_BROWSER_TEST_F(RedirectTest, Server) { 74 IN_PROC_BROWSER_TEST_F(RedirectTest, Server) {
76 ASSERT_TRUE(test_server()->Start()); 75 ASSERT_TRUE(embedded_test_server()->Start());
77 GURL final_url = test_server()->GetURL(std::string()); 76 GURL final_url = embedded_test_server()->GetURL("/defaultresponse");
78 GURL first_url = test_server()->GetURL( 77 GURL first_url =
79 "server-redirect?" + final_url.spec()); 78 embedded_test_server()->GetURL("/server-redirect?" + final_url.spec());
80 79
81 ui_test_utils::NavigateToURL(browser(), first_url); 80 ui_test_utils::NavigateToURL(browser(), first_url);
82 81
83 std::vector<GURL> redirects = GetRedirects(first_url); 82 std::vector<GURL> redirects = GetRedirects(first_url);
84 83
85 ASSERT_EQ(1U, redirects.size()); 84 ASSERT_EQ(1U, redirects.size());
86 EXPECT_EQ(final_url.spec(), redirects[0].spec()); 85 EXPECT_EQ(final_url.spec(), redirects[0].spec());
87 } 86 }
88 87
89 // Tests a single client redirect. 88 // Tests a single client redirect.
90 IN_PROC_BROWSER_TEST_F(RedirectTest, Client) { 89 IN_PROC_BROWSER_TEST_F(RedirectTest, Client) {
91 ASSERT_TRUE(test_server()->Start()); 90 ASSERT_TRUE(embedded_test_server()->Start());
92 91
93 GURL final_url = test_server()->GetURL(std::string()); 92 GURL final_url = embedded_test_server()->GetURL("/defaultresponse");
94 GURL first_url = test_server()->GetURL( 93 GURL first_url =
95 "client-redirect?" + final_url.spec()); 94 embedded_test_server()->GetURL("/client-redirect?" + final_url.spec());
96 95
97 // The client redirect appears as two page visits in the browser. 96 // The client redirect appears as two page visits in the browser.
98 ui_test_utils::NavigateToURLBlockUntilNavigationsComplete( 97 ui_test_utils::NavigateToURLBlockUntilNavigationsComplete(
99 browser(), first_url, 2); 98 browser(), first_url, 2);
100 99
101 std::vector<GURL> redirects = GetRedirects(first_url); 100 std::vector<GURL> redirects = GetRedirects(first_url);
102 101
103 ASSERT_EQ(1U, redirects.size()); 102 ASSERT_EQ(1U, redirects.size());
104 EXPECT_EQ(final_url.spec(), redirects[0].spec()); 103 EXPECT_EQ(final_url.spec(), redirects[0].spec());
105 104
106 // The address bar should display the final URL. 105 // The address bar should display the final URL.
107 EXPECT_EQ(final_url, 106 EXPECT_EQ(final_url,
108 browser()->tab_strip_model()->GetActiveWebContents()->GetURL()); 107 browser()->tab_strip_model()->GetActiveWebContents()->GetURL());
109 108
110 // Navigate one more time. 109 // Navigate one more time.
111 ui_test_utils::NavigateToURLBlockUntilNavigationsComplete( 110 ui_test_utils::NavigateToURLBlockUntilNavigationsComplete(
112 browser(), first_url, 2); 111 browser(), first_url, 2);
113 112
114 // The address bar should still display the final URL. 113 // The address bar should still display the final URL.
115 EXPECT_EQ(final_url, 114 EXPECT_EQ(final_url,
116 browser()->tab_strip_model()->GetActiveWebContents()->GetURL()); 115 browser()->tab_strip_model()->GetActiveWebContents()->GetURL());
117 } 116 }
118 117
119 // http://code.google.com/p/chromium/issues/detail?id=62772 118 // http://code.google.com/p/chromium/issues/detail?id=62772
120 IN_PROC_BROWSER_TEST_F(RedirectTest, ClientEmptyReferer) { 119 IN_PROC_BROWSER_TEST_F(RedirectTest, ClientEmptyReferer) {
121 ASSERT_TRUE(test_server()->Start()); 120 ASSERT_TRUE(embedded_test_server()->Start());
122 121
123 // Create the file contents, which will do a redirect to the 122 // Create the file contents, which will do a redirect to the
124 // test server. 123 // test server.
125 GURL final_url = test_server()->GetURL(std::string()); 124 GURL final_url = embedded_test_server()->GetURL("/defaultresponse");
126 ASSERT_TRUE(final_url.is_valid()); 125 ASSERT_TRUE(final_url.is_valid());
127 std::string file_redirect_contents = base::StringPrintf( 126 std::string file_redirect_contents = base::StringPrintf(
128 "<html>" 127 "<html>"
129 "<head></head>" 128 "<head></head>"
130 "<body onload=\"document.location='%s'\"></body>" 129 "<body onload=\"document.location='%s'\"></body>"
131 "</html>", 130 "</html>",
132 final_url.spec().c_str()); 131 final_url.spec().c_str());
133 132
134 // Write the contents to a temporary file. 133 // Write the contents to a temporary file.
135 base::ScopedTempDir temp_directory; 134 base::ScopedTempDir temp_directory;
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
177 176
178 // There should be no redirects from first_url, because the anchor location 177 // There should be no redirects from first_url, because the anchor location
179 // change that occurs should not be flagged as a redirect and the meta-refresh 178 // change that occurs should not be flagged as a redirect and the meta-refresh
180 // won't have fired yet. 179 // won't have fired yet.
181 ASSERT_EQ(0U, redirects.size()); 180 ASSERT_EQ(0U, redirects.size());
182 EXPECT_EQ("myanchor", web_contents->GetURL().ref()); 181 EXPECT_EQ("myanchor", web_contents->GetURL().ref());
183 } 182 }
184 183
185 // Tests a client->server->server redirect 184 // Tests a client->server->server redirect
186 IN_PROC_BROWSER_TEST_F(RedirectTest, ClientServerServer) { 185 IN_PROC_BROWSER_TEST_F(RedirectTest, ClientServerServer) {
187 ASSERT_TRUE(test_server()->Start()); 186 ASSERT_TRUE(embedded_test_server()->Start());
188 187
189 GURL final_url = test_server()->GetURL(std::string()); 188 GURL final_url = embedded_test_server()->GetURL("/defaultresponse");
190 GURL next_to_last = test_server()->GetURL( 189 GURL next_to_last =
191 "server-redirect?" + final_url.spec()); 190 embedded_test_server()->GetURL("/server-redirect?" + final_url.spec());
192 GURL second_url = test_server()->GetURL( 191 GURL second_url =
193 "server-redirect?" + next_to_last.spec()); 192 embedded_test_server()->GetURL("/server-redirect?" + next_to_last.spec());
194 GURL first_url = test_server()->GetURL( 193 GURL first_url =
195 "client-redirect?" + second_url.spec()); 194 embedded_test_server()->GetURL("/client-redirect?" + second_url.spec());
196 195
197 ui_test_utils::NavigateToURLBlockUntilNavigationsComplete( 196 ui_test_utils::NavigateToURLBlockUntilNavigationsComplete(
198 browser(), first_url, 2); 197 browser(), first_url, 2);
199 198
200 std::vector<GURL> redirects = GetRedirects(first_url); 199 std::vector<GURL> redirects = GetRedirects(first_url);
201 ASSERT_EQ(3U, redirects.size()); 200 ASSERT_EQ(3U, redirects.size());
202 EXPECT_EQ(second_url.spec(), redirects[0].spec()); 201 EXPECT_EQ(second_url.spec(), redirects[0].spec());
203 EXPECT_EQ(next_to_last.spec(), redirects[1].spec()); 202 EXPECT_EQ(next_to_last.spec(), redirects[1].spec());
204 EXPECT_EQ(final_url.spec(), redirects[2].spec()); 203 EXPECT_EQ(final_url.spec(), redirects[2].spec());
205 } 204 }
206 205
207 // Tests that the "#reference" gets preserved across server redirects. 206 // Tests that the "#reference" gets preserved across server redirects.
208 IN_PROC_BROWSER_TEST_F(RedirectTest, ServerReference) { 207 IN_PROC_BROWSER_TEST_F(RedirectTest, ServerReference) {
209 ASSERT_TRUE(test_server()->Start()); 208 ASSERT_TRUE(embedded_test_server()->Start());
210 209
211 const std::string ref("reference"); 210 const std::string ref("reference");
212 211
213 GURL final_url = test_server()->GetURL(std::string()); 212 GURL final_url = embedded_test_server()->GetURL("/defaultresponse");
214 GURL initial_url = test_server()->GetURL( 213 GURL initial_url = embedded_test_server()->GetURL(
215 "server-redirect?" + final_url.spec() + "#" + ref); 214 "/server-redirect?" + final_url.spec() + "#" + ref);
216 215
217 ui_test_utils::NavigateToURL(browser(), initial_url); 216 ui_test_utils::NavigateToURL(browser(), initial_url);
218 217
219 EXPECT_EQ(ref, 218 EXPECT_EQ(ref,
220 browser()->tab_strip_model()->GetActiveWebContents()-> 219 browser()->tab_strip_model()->GetActiveWebContents()->
221 GetURL().ref()); 220 GetURL().ref());
222 } 221 }
223 222
224 // Test that redirect from http:// to file:// : 223 // Test that redirect from http:// to file:// :
225 // A) does not crash the browser or confuse the redirect chain, see bug 1080873 224 // A) does not crash the browser or confuse the redirect chain, see bug 1080873
226 // B) does not take place. 225 // B) does not take place.
227 // 226 //
228 // Flaky on XP and Vista, http://crbug.com/69390. 227 // Flaky on XP and Vista, http://crbug.com/69390.
229 IN_PROC_BROWSER_TEST_F(RedirectTest, NoHttpToFile) { 228 IN_PROC_BROWSER_TEST_F(RedirectTest, NoHttpToFile) {
230 ASSERT_TRUE(test_server()->Start()); 229 ASSERT_TRUE(embedded_test_server()->Start());
231 GURL file_url = ui_test_utils::GetTestUrl( 230 GURL file_url = ui_test_utils::GetTestUrl(
232 base::FilePath(), base::FilePath().AppendASCII("http_to_file.html")); 231 base::FilePath(), base::FilePath().AppendASCII("http_to_file.html"));
233 232
234 GURL initial_url = test_server()->GetURL( 233 GURL initial_url =
235 "client-redirect?" + file_url.spec()); 234 embedded_test_server()->GetURL("/client-redirect?" + file_url.spec());
236 235
237 ui_test_utils::NavigateToURL(browser(), initial_url); 236 ui_test_utils::NavigateToURL(browser(), initial_url);
238 // We make sure the title doesn't match the title from the file, because the 237 // We make sure the title doesn't match the title from the file, because the
239 // nav should not have taken place. 238 // nav should not have taken place.
240 EXPECT_NE(base::ASCIIToUTF16("File!"), 239 EXPECT_NE(base::ASCIIToUTF16("File!"),
241 browser()->tab_strip_model()->GetActiveWebContents()->GetTitle()); 240 browser()->tab_strip_model()->GetActiveWebContents()->GetTitle());
242 } 241 }
243 242
244 // Ensures that non-user initiated location changes (within page) are 243 // Ensures that non-user initiated location changes (within page) are
245 // flagged as client redirects. See bug 1139823. 244 // flagged as client redirects. See bug 1139823.
246 IN_PROC_BROWSER_TEST_F(RedirectTest, ClientFragments) { 245 IN_PROC_BROWSER_TEST_F(RedirectTest, ClientFragments) {
247 ASSERT_TRUE(test_server()->Start()); 246 ASSERT_TRUE(embedded_test_server()->Start());
248 GURL first_url = ui_test_utils::GetTestUrl( 247 GURL first_url = ui_test_utils::GetTestUrl(
249 base::FilePath(), base::FilePath().AppendASCII("ref_redirect.html")); 248 base::FilePath(), base::FilePath().AppendASCII("ref_redirect.html"));
250 ui_test_utils::NavigateToURL(browser(), first_url); 249 ui_test_utils::NavigateToURL(browser(), first_url);
251 std::vector<GURL> redirects = GetRedirects(first_url); 250 std::vector<GURL> redirects = GetRedirects(first_url);
252 EXPECT_EQ(1U, redirects.size()); 251 EXPECT_EQ(1U, redirects.size());
253 EXPECT_EQ(first_url.spec() + "#myanchor", redirects[0].spec()); 252 EXPECT_EQ(first_url.spec() + "#myanchor", redirects[0].spec());
254 } 253 }
255 254
256 // TODO(timsteele): This is disabled because our current testserver can't 255 // TODO(timsteele): This is disabled because our current testserver can't
257 // handle multiple requests in parallel, making it hang on the first request 256 // handle multiple requests in parallel, making it hang on the first request
258 // to /slow?60. It's unable to serve our second request for files/title2.html 257 // to /slow?60. It's unable to serve our second request for /title2.html
259 // until /slow? completes, which doesn't give the desired behavior. We could 258 // until /slow? completes, which doesn't give the desired behavior. We could
260 // alternatively load the second page from disk, but we would need to start 259 // alternatively load the second page from disk, but we would need to start
261 // the browser for this testcase with --process-per-tab, and I don't think 260 // the browser for this testcase with --process-per-tab, and I don't think
262 // we can do this at test-case-level granularity at the moment. 261 // we can do this at test-case-level granularity at the moment.
263 // http://crbug.com/45056 262 // http://crbug.com/45056
264 IN_PROC_BROWSER_TEST_F(RedirectTest, 263 IN_PROC_BROWSER_TEST_F(RedirectTest,
265 DISABLED_ClientCancelledByNewNavigationAfterProvisionalLoad) { 264 DISABLED_ClientCancelledByNewNavigationAfterProvisionalLoad) {
266 // We want to initiate a second navigation after the provisional load for 265 // We want to initiate a second navigation after the provisional load for
267 // the client redirect destination has started, but before this load is 266 // the client redirect destination has started, but before this load is
268 // committed. To achieve this, we tell the browser to load a slow page, 267 // committed. To achieve this, we tell the browser to load a slow page,
269 // which causes it to start a provisional load, and while it is waiting 268 // which causes it to start a provisional load, and while it is waiting
270 // for the response (which means it hasn't committed the load for the client 269 // for the response (which means it hasn't committed the load for the client
271 // redirect destination page yet), we issue a new navigation request. 270 // redirect destination page yet), we issue a new navigation request.
272 ASSERT_TRUE(test_server()->Start()); 271 ASSERT_TRUE(embedded_test_server()->Start());
273 272
274 GURL final_url = test_server()->GetURL("files/title2.html"); 273 GURL final_url = embedded_test_server()->GetURL("/title2.html");
275 GURL slow = test_server()->GetURL("slow?60"); 274 GURL slow = embedded_test_server()->GetURL("/slow?60");
276 GURL first_url = test_server()->GetURL( 275 GURL first_url =
277 "client-redirect?" + slow.spec()); 276 embedded_test_server()->GetURL("/client-redirect?" + slow.spec());
278 277
279 content::WebContents* web_contents = 278 content::WebContents* web_contents =
280 browser()->tab_strip_model()->GetActiveWebContents(); 279 browser()->tab_strip_model()->GetActiveWebContents();
281 content::TestNavigationObserver observer(web_contents, 2); 280 content::TestNavigationObserver observer(web_contents, 2);
282 281
283 ui_test_utils::NavigateToURLWithDisposition( 282 ui_test_utils::NavigateToURLWithDisposition(
284 browser(), first_url, CURRENT_TAB, ui_test_utils::BROWSER_TEST_NONE); 283 browser(), first_url, CURRENT_TAB, ui_test_utils::BROWSER_TEST_NONE);
285 // We don't sleep here - the first navigation won't have been committed yet 284 // We don't sleep here - the first navigation won't have been committed yet
286 // because we told the server to wait a minute. This means the browser has 285 // because we told the server to wait a minute. This means the browser has
287 // started it's provisional load for the client redirect destination page but 286 // started it's provisional load for the client redirect destination page but
288 // hasn't completed. Our time is now! 287 // hasn't completed. Our time is now!
289 ui_test_utils::NavigateToURLWithDisposition( 288 ui_test_utils::NavigateToURLWithDisposition(
290 browser(), final_url, CURRENT_TAB, ui_test_utils::BROWSER_TEST_NONE); 289 browser(), final_url, CURRENT_TAB, ui_test_utils::BROWSER_TEST_NONE);
291 observer.Wait(); 290 observer.Wait();
292 291
293 // Check to make sure the navigation did in fact take place and we are 292 // Check to make sure the navigation did in fact take place and we are
294 // at the expected page. 293 // at the expected page.
295 EXPECT_EQ(base::ASCIIToUTF16("Title Of Awesomeness"), 294 EXPECT_EQ(base::ASCIIToUTF16("Title Of Awesomeness"),
296 browser()->tab_strip_model()->GetActiveWebContents()->GetTitle()); 295 browser()->tab_strip_model()->GetActiveWebContents()->GetTitle());
297 296
298 bool final_navigation_not_redirect = true; 297 bool final_navigation_not_redirect = true;
299 std::vector<GURL> redirects = GetRedirects(first_url); 298 std::vector<GURL> redirects = GetRedirects(first_url);
300 // Check to make sure our request for files/title2.html doesn't get flagged 299 // Check to make sure our request for /title2.html doesn't get flagged
301 // as a client redirect from the first (/client-redirect?) page. 300 // as a client redirect from the first (/client-redirect?) page.
302 for (std::vector<GURL>::iterator it = redirects.begin(); 301 for (std::vector<GURL>::iterator it = redirects.begin();
303 it != redirects.end(); ++it) { 302 it != redirects.end(); ++it) {
304 if (final_url.spec() == it->spec()) { 303 if (final_url.spec() == it->spec()) {
305 final_navigation_not_redirect = false; 304 final_navigation_not_redirect = false;
306 break; 305 break;
307 } 306 }
308 } 307 }
309 EXPECT_TRUE(final_navigation_not_redirect); 308 EXPECT_TRUE(final_navigation_not_redirect);
310 } 309 }
OLDNEW
« no previous file with comments | « chrome/browser/history/history_browsertest.cc ('k') | chrome/browser/infobars/infobars_browsertest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698