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 <map> | 5 #include <map> |
6 #include <set> | 6 #include <set> |
7 | 7 |
8 #include "base/basictypes.h" | 8 #include "base/basictypes.h" |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
127 | 127 |
128 private: | 128 private: |
129 friend class URLRequestMockCaptivePortalJobFactory; | 129 friend class URLRequestMockCaptivePortalJobFactory; |
130 | 130 |
131 // Operation to perform on jobs when removing them from |job_list_|. | 131 // Operation to perform on jobs when removing them from |job_list_|. |
132 enum EndJobOperation { | 132 enum EndJobOperation { |
133 FAIL_JOBS, | 133 FAIL_JOBS, |
134 ABANDON_JOBS, | 134 ABANDON_JOBS, |
135 }; | 135 }; |
136 | 136 |
137 explicit URLRequestTimeoutOnDemandJob(net::URLRequest* request); | 137 URLRequestTimeoutOnDemandJob(net::URLRequest* request, |
| 138 net::NetworkDelegate* network_delegate); |
138 virtual ~URLRequestTimeoutOnDemandJob(); | 139 virtual ~URLRequestTimeoutOnDemandJob(); |
139 | 140 |
140 // Attempts to removes |this| from |jobs_|. Returns true if it was removed | 141 // Attempts to removes |this| from |jobs_|. Returns true if it was removed |
141 // from the list. | 142 // from the list. |
142 bool RemoveFromList(); | 143 bool RemoveFromList(); |
143 | 144 |
144 static void WaitForJobsOnIOThread(int num_jobs); | 145 static void WaitForJobsOnIOThread(int num_jobs); |
145 static void FailOrAbandonJobsOnIOThread( | 146 static void FailOrAbandonJobsOnIOThread( |
146 int expected_num_jobs, | 147 int expected_num_jobs, |
147 EndJobOperation end_job_operation); | 148 EndJobOperation end_job_operation); |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
219 // static | 220 // static |
220 void URLRequestTimeoutOnDemandJob::AbandonJobs(int expected_num_jobs) { | 221 void URLRequestTimeoutOnDemandJob::AbandonJobs(int expected_num_jobs) { |
221 content::BrowserThread::PostTask( | 222 content::BrowserThread::PostTask( |
222 content::BrowserThread::IO, FROM_HERE, | 223 content::BrowserThread::IO, FROM_HERE, |
223 base::Bind(&URLRequestTimeoutOnDemandJob::FailOrAbandonJobsOnIOThread, | 224 base::Bind(&URLRequestTimeoutOnDemandJob::FailOrAbandonJobsOnIOThread, |
224 expected_num_jobs, | 225 expected_num_jobs, |
225 ABANDON_JOBS)); | 226 ABANDON_JOBS)); |
226 } | 227 } |
227 | 228 |
228 URLRequestTimeoutOnDemandJob::URLRequestTimeoutOnDemandJob( | 229 URLRequestTimeoutOnDemandJob::URLRequestTimeoutOnDemandJob( |
229 net::URLRequest* request) | 230 net::URLRequest* request, net::NetworkDelegate* network_delegate) |
230 : net::URLRequestJob(request, request->context()->network_delegate()), | 231 : net::URLRequestJob(request, network_delegate), |
231 next_job_(NULL) { | 232 next_job_(NULL) { |
232 } | 233 } |
233 | 234 |
234 URLRequestTimeoutOnDemandJob::~URLRequestTimeoutOnDemandJob() { | 235 URLRequestTimeoutOnDemandJob::~URLRequestTimeoutOnDemandJob() { |
235 // All hanging jobs should have failed or been abandoned before being | 236 // All hanging jobs should have failed or been abandoned before being |
236 // destroyed. | 237 // destroyed. |
237 EXPECT_FALSE(RemoveFromList()); | 238 EXPECT_FALSE(RemoveFromList()); |
238 } | 239 } |
239 | 240 |
240 bool URLRequestTimeoutOnDemandJob::RemoveFromList() { | 241 bool URLRequestTimeoutOnDemandJob::RemoveFromList() { |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
336 // These do all the work of the corresponding public functions, with the only | 337 // These do all the work of the corresponding public functions, with the only |
337 // difference being that they must be called on the IO thread. | 338 // difference being that they must be called on the IO thread. |
338 static void AddUrlHandlersOnIOThread(); | 339 static void AddUrlHandlersOnIOThread(); |
339 static void SetBehindCaptivePortalOnIOThread(bool behind_captive_portal); | 340 static void SetBehindCaptivePortalOnIOThread(bool behind_captive_portal); |
340 | 341 |
341 // Returns a URLRequestJob that reflects the current captive portal state | 342 // Returns a URLRequestJob that reflects the current captive portal state |
342 // for the URLs: kMockCaptivePortalTestUrl, kMockHttpsUrl, and | 343 // for the URLs: kMockCaptivePortalTestUrl, kMockHttpsUrl, and |
343 // kMockHttpsQuickTimeoutUrl. See documentation of individual URLs for | 344 // kMockHttpsQuickTimeoutUrl. See documentation of individual URLs for |
344 // actual behavior. | 345 // actual behavior. |
345 static net::URLRequestJob* Factory(net::URLRequest* request, | 346 static net::URLRequestJob* Factory(net::URLRequest* request, |
| 347 net::NetworkDelegate* network_delegate, |
346 const std::string& scheme); | 348 const std::string& scheme); |
347 | 349 |
348 static bool behind_captive_portal_; | 350 static bool behind_captive_portal_; |
349 | 351 |
350 DISALLOW_IMPLICIT_CONSTRUCTORS(URLRequestMockCaptivePortalJobFactory); | 352 DISALLOW_IMPLICIT_CONSTRUCTORS(URLRequestMockCaptivePortalJobFactory); |
351 }; | 353 }; |
352 | 354 |
353 bool URLRequestMockCaptivePortalJobFactory::behind_captive_portal_ = true; | 355 bool URLRequestMockCaptivePortalJobFactory::behind_captive_portal_ = true; |
354 | 356 |
355 // static | 357 // static |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
391 // static | 393 // static |
392 void URLRequestMockCaptivePortalJobFactory::SetBehindCaptivePortalOnIOThread( | 394 void URLRequestMockCaptivePortalJobFactory::SetBehindCaptivePortalOnIOThread( |
393 bool behind_captive_portal) { | 395 bool behind_captive_portal) { |
394 EXPECT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 396 EXPECT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
395 behind_captive_portal_ = behind_captive_portal; | 397 behind_captive_portal_ = behind_captive_portal; |
396 } | 398 } |
397 | 399 |
398 // static | 400 // static |
399 net::URLRequestJob* URLRequestMockCaptivePortalJobFactory::Factory( | 401 net::URLRequestJob* URLRequestMockCaptivePortalJobFactory::Factory( |
400 net::URLRequest* request, | 402 net::URLRequest* request, |
| 403 net::NetworkDelegate* network_delegate, |
401 const std::string& scheme) { | 404 const std::string& scheme) { |
402 EXPECT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 405 EXPECT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
403 | 406 |
404 // The PathService is threadsafe. | 407 // The PathService is threadsafe. |
405 FilePath root_http; | 408 FilePath root_http; |
406 PathService::Get(chrome::DIR_TEST_DATA, &root_http); | 409 PathService::Get(chrome::DIR_TEST_DATA, &root_http); |
407 | 410 |
408 if (request->url() == GURL(kMockHttpsUrl) || | 411 if (request->url() == GURL(kMockHttpsUrl) || |
409 request->url() == GURL(kMockHttpsUrl2)) { | 412 request->url() == GURL(kMockHttpsUrl2)) { |
410 if (behind_captive_portal_) | 413 if (behind_captive_portal_) |
411 return new URLRequestTimeoutOnDemandJob(request); | 414 return new URLRequestTimeoutOnDemandJob(request, network_delegate); |
412 // Once logged in to the portal, HTTPS requests return the page that was | 415 // Once logged in to the portal, HTTPS requests return the page that was |
413 // actually requested. | 416 // actually requested. |
414 return new URLRequestMockHTTPJob( | 417 return new URLRequestMockHTTPJob( |
415 request, | 418 request, |
| 419 network_delegate, |
416 root_http.Append(FILE_PATH_LITERAL("title2.html"))); | 420 root_http.Append(FILE_PATH_LITERAL("title2.html"))); |
417 } else if (request->url() == GURL(kMockHttpsQuickTimeoutUrl)) { | 421 } else if (request->url() == GURL(kMockHttpsQuickTimeoutUrl)) { |
418 if (behind_captive_portal_) | 422 if (behind_captive_portal_) |
419 return new URLRequestFailedJob(request, net::ERR_CONNECTION_TIMED_OUT); | 423 return new URLRequestFailedJob( |
| 424 request, network_delegate, net::ERR_CONNECTION_TIMED_OUT); |
420 // Once logged in to the portal, HTTPS requests return the page that was | 425 // Once logged in to the portal, HTTPS requests return the page that was |
421 // actually requested. | 426 // actually requested. |
422 return new URLRequestMockHTTPJob( | 427 return new URLRequestMockHTTPJob( |
423 request, | 428 request, |
| 429 network_delegate, |
424 root_http.Append(FILE_PATH_LITERAL("title2.html"))); | 430 root_http.Append(FILE_PATH_LITERAL("title2.html"))); |
425 } else { | 431 } else { |
426 // The URL should be the captive portal test URL. | 432 // The URL should be the captive portal test URL. |
427 EXPECT_EQ(GURL(kMockCaptivePortalTestUrl), request->url()); | 433 EXPECT_EQ(GURL(kMockCaptivePortalTestUrl), request->url()); |
428 | 434 |
429 if (behind_captive_portal_) { | 435 if (behind_captive_portal_) { |
430 // Prior to logging in to the portal, HTTP requests go to the login page. | 436 // Prior to logging in to the portal, HTTP requests go to the login page. |
431 return new URLRequestMockHTTPJob( | 437 return new URLRequestMockHTTPJob( |
432 request, | 438 request, |
| 439 network_delegate, |
433 root_http.Append(FILE_PATH_LITERAL("captive_portal/login.html"))); | 440 root_http.Append(FILE_PATH_LITERAL("captive_portal/login.html"))); |
434 } | 441 } |
435 | 442 |
436 // After logging in to the portal, the test URL returns a 204 response. | 443 // After logging in to the portal, the test URL returns a 204 response. |
437 return new URLRequestMockHTTPJob( | 444 return new URLRequestMockHTTPJob( |
438 request, | 445 request, |
| 446 network_delegate, |
439 root_http.Append(FILE_PATH_LITERAL("captive_portal/page204.html"))); | 447 root_http.Append(FILE_PATH_LITERAL("captive_portal/page204.html"))); |
440 } | 448 } |
441 } | 449 } |
442 | 450 |
443 // Creates a server-side redirect for use with the TestServer. | 451 // Creates a server-side redirect for use with the TestServer. |
444 std::string CreateServerRedirect(const std::string& dest_url) { | 452 std::string CreateServerRedirect(const std::string& dest_url) { |
445 const char* const kServerRedirectBase = "server-redirect?"; | 453 const char* const kServerRedirectBase = "server-redirect?"; |
446 return kServerRedirectBase + dest_url; | 454 return kServerRedirectBase + dest_url; |
447 } | 455 } |
448 | 456 |
(...skipping 1620 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2069 base::Bind(&AddHstsHost, | 2077 base::Bind(&AddHstsHost, |
2070 make_scoped_refptr(browser()->profile()->GetRequestContext()), | 2078 make_scoped_refptr(browser()->profile()->GetRequestContext()), |
2071 http_timeout_url.host())); | 2079 http_timeout_url.host())); |
2072 | 2080 |
2073 SlowLoadBehindCaptivePortal(browser(), true, http_timeout_url); | 2081 SlowLoadBehindCaptivePortal(browser(), true, http_timeout_url); |
2074 Login(browser(), 1, 0); | 2082 Login(browser(), 1, 0); |
2075 FailLoadsAfterLogin(browser(), 1); | 2083 FailLoadsAfterLogin(browser(), 1); |
2076 } | 2084 } |
2077 | 2085 |
2078 } // namespace captive_portal | 2086 } // namespace captive_portal |
OLD | NEW |