| OLD | NEW |
| 1 // Copyright (c) 2010 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/message_loop_proxy.h" | 5 #include "base/message_loop_proxy.h" |
| 6 #include "base/threading/thread.h" | 6 #include "base/threading/thread.h" |
| 7 #include "base/synchronization/waitable_event.h" | 7 #include "base/synchronization/waitable_event.h" |
| 8 #include "build/build_config.h" | 8 #include "build/build_config.h" |
| 9 #include "chrome/common/chrome_plugin_lib.h" | 9 #include "chrome/common/chrome_plugin_lib.h" |
| 10 #include "chrome/common/net/url_fetcher.h" | 10 #include "chrome/common/net/url_fetcher.h" |
| 11 #include "chrome/common/net/url_request_context_getter.h" | 11 #include "chrome/common/net/url_request_context_getter.h" |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 55 class URLFetcherTest : public testing::Test, public URLFetcher::Delegate { | 55 class URLFetcherTest : public testing::Test, public URLFetcher::Delegate { |
| 56 public: | 56 public: |
| 57 URLFetcherTest() : fetcher_(NULL) { } | 57 URLFetcherTest() : fetcher_(NULL) { } |
| 58 | 58 |
| 59 // Creates a URLFetcher, using the program's main thread to do IO. | 59 // Creates a URLFetcher, using the program's main thread to do IO. |
| 60 virtual void CreateFetcher(const GURL& url); | 60 virtual void CreateFetcher(const GURL& url); |
| 61 | 61 |
| 62 // URLFetcher::Delegate | 62 // URLFetcher::Delegate |
| 63 virtual void OnURLFetchComplete(const URLFetcher* source, | 63 virtual void OnURLFetchComplete(const URLFetcher* source, |
| 64 const GURL& url, | 64 const GURL& url, |
| 65 const URLRequestStatus& status, | 65 const net::URLRequestStatus& status, |
| 66 int response_code, | 66 int response_code, |
| 67 const ResponseCookies& cookies, | 67 const ResponseCookies& cookies, |
| 68 const std::string& data); | 68 const std::string& data); |
| 69 | 69 |
| 70 scoped_refptr<base::MessageLoopProxy> io_message_loop_proxy() { | 70 scoped_refptr<base::MessageLoopProxy> io_message_loop_proxy() { |
| 71 return io_message_loop_proxy_; | 71 return io_message_loop_proxy_; |
| 72 } | 72 } |
| 73 | 73 |
| 74 protected: | 74 protected: |
| 75 virtual void SetUp() { | 75 virtual void SetUp() { |
| (...skipping 25 matching lines...) Expand all Loading... |
| 101 }; | 101 }; |
| 102 | 102 |
| 103 // Version of URLFetcherTest that does a POST instead | 103 // Version of URLFetcherTest that does a POST instead |
| 104 class URLFetcherPostTest : public URLFetcherTest { | 104 class URLFetcherPostTest : public URLFetcherTest { |
| 105 public: | 105 public: |
| 106 virtual void CreateFetcher(const GURL& url); | 106 virtual void CreateFetcher(const GURL& url); |
| 107 | 107 |
| 108 // URLFetcher::Delegate | 108 // URLFetcher::Delegate |
| 109 virtual void OnURLFetchComplete(const URLFetcher* source, | 109 virtual void OnURLFetchComplete(const URLFetcher* source, |
| 110 const GURL& url, | 110 const GURL& url, |
| 111 const URLRequestStatus& status, | 111 const net::URLRequestStatus& status, |
| 112 int response_code, | 112 int response_code, |
| 113 const ResponseCookies& cookies, | 113 const ResponseCookies& cookies, |
| 114 const std::string& data); | 114 const std::string& data); |
| 115 }; | 115 }; |
| 116 | 116 |
| 117 // Version of URLFetcherTest that tests headers. | 117 // Version of URLFetcherTest that tests headers. |
| 118 class URLFetcherHeadersTest : public URLFetcherTest { | 118 class URLFetcherHeadersTest : public URLFetcherTest { |
| 119 public: | 119 public: |
| 120 // URLFetcher::Delegate | 120 // URLFetcher::Delegate |
| 121 virtual void OnURLFetchComplete(const URLFetcher* source, | 121 virtual void OnURLFetchComplete(const URLFetcher* source, |
| 122 const GURL& url, | 122 const GURL& url, |
| 123 const URLRequestStatus& status, | 123 const net::URLRequestStatus& status, |
| 124 int response_code, | 124 int response_code, |
| 125 const ResponseCookies& cookies, | 125 const ResponseCookies& cookies, |
| 126 const std::string& data); | 126 const std::string& data); |
| 127 }; | 127 }; |
| 128 | 128 |
| 129 // Version of URLFetcherTest that tests overload protection. | 129 // Version of URLFetcherTest that tests overload protection. |
| 130 class URLFetcherProtectTest : public URLFetcherTest { | 130 class URLFetcherProtectTest : public URLFetcherTest { |
| 131 public: | 131 public: |
| 132 virtual void CreateFetcher(const GURL& url); | 132 virtual void CreateFetcher(const GURL& url); |
| 133 // URLFetcher::Delegate | 133 // URLFetcher::Delegate |
| 134 virtual void OnURLFetchComplete(const URLFetcher* source, | 134 virtual void OnURLFetchComplete(const URLFetcher* source, |
| 135 const GURL& url, | 135 const GURL& url, |
| 136 const URLRequestStatus& status, | 136 const net::URLRequestStatus& status, |
| 137 int response_code, | 137 int response_code, |
| 138 const ResponseCookies& cookies, | 138 const ResponseCookies& cookies, |
| 139 const std::string& data); | 139 const std::string& data); |
| 140 private: | 140 private: |
| 141 Time start_time_; | 141 Time start_time_; |
| 142 }; | 142 }; |
| 143 | 143 |
| 144 // Version of URLFetcherTest that tests overload protection, when responses | 144 // Version of URLFetcherTest that tests overload protection, when responses |
| 145 // passed through. | 145 // passed through. |
| 146 class URLFetcherProtectTestPassedThrough : public URLFetcherTest { | 146 class URLFetcherProtectTestPassedThrough : public URLFetcherTest { |
| 147 public: | 147 public: |
| 148 virtual void CreateFetcher(const GURL& url); | 148 virtual void CreateFetcher(const GURL& url); |
| 149 // URLFetcher::Delegate | 149 // URLFetcher::Delegate |
| 150 virtual void OnURLFetchComplete(const URLFetcher* source, | 150 virtual void OnURLFetchComplete(const URLFetcher* source, |
| 151 const GURL& url, | 151 const GURL& url, |
| 152 const URLRequestStatus& status, | 152 const net::URLRequestStatus& status, |
| 153 int response_code, | 153 int response_code, |
| 154 const ResponseCookies& cookies, | 154 const ResponseCookies& cookies, |
| 155 const std::string& data); | 155 const std::string& data); |
| 156 private: | 156 private: |
| 157 Time start_time_; | 157 Time start_time_; |
| 158 }; | 158 }; |
| 159 | 159 |
| 160 // Version of URLFetcherTest that tests bad HTTPS requests. | 160 // Version of URLFetcherTest that tests bad HTTPS requests. |
| 161 class URLFetcherBadHTTPSTest : public URLFetcherTest { | 161 class URLFetcherBadHTTPSTest : public URLFetcherTest { |
| 162 public: | 162 public: |
| 163 URLFetcherBadHTTPSTest(); | 163 URLFetcherBadHTTPSTest(); |
| 164 | 164 |
| 165 // URLFetcher::Delegate | 165 // URLFetcher::Delegate |
| 166 virtual void OnURLFetchComplete(const URLFetcher* source, | 166 virtual void OnURLFetchComplete(const URLFetcher* source, |
| 167 const GURL& url, | 167 const GURL& url, |
| 168 const URLRequestStatus& status, | 168 const net::URLRequestStatus& status, |
| 169 int response_code, | 169 int response_code, |
| 170 const ResponseCookies& cookies, | 170 const ResponseCookies& cookies, |
| 171 const std::string& data); | 171 const std::string& data); |
| 172 | 172 |
| 173 private: | 173 private: |
| 174 FilePath cert_dir_; | 174 FilePath cert_dir_; |
| 175 }; | 175 }; |
| 176 | 176 |
| 177 // Version of URLFetcherTest that tests request cancellation on shutdown. | 177 // Version of URLFetcherTest that tests request cancellation on shutdown. |
| 178 class URLFetcherCancelTest : public URLFetcherTest { | 178 class URLFetcherCancelTest : public URLFetcherTest { |
| 179 public: | 179 public: |
| 180 virtual void CreateFetcher(const GURL& url); | 180 virtual void CreateFetcher(const GURL& url); |
| 181 // URLFetcher::Delegate | 181 // URLFetcher::Delegate |
| 182 virtual void OnURLFetchComplete(const URLFetcher* source, | 182 virtual void OnURLFetchComplete(const URLFetcher* source, |
| 183 const GURL& url, | 183 const GURL& url, |
| 184 const URLRequestStatus& status, | 184 const net::URLRequestStatus& status, |
| 185 int response_code, | 185 int response_code, |
| 186 const ResponseCookies& cookies, | 186 const ResponseCookies& cookies, |
| 187 const std::string& data); | 187 const std::string& data); |
| 188 | 188 |
| 189 void CancelRequest(); | 189 void CancelRequest(); |
| 190 }; | 190 }; |
| 191 | 191 |
| 192 // Version of TestURLRequestContext that posts a Quit task to the IO | 192 // Version of TestURLRequestContext that posts a Quit task to the IO |
| 193 // thread once it is deleted. | 193 // thread once it is deleted. |
| 194 class CancelTestURLRequestContext : public TestURLRequestContext { | 194 class CancelTestURLRequestContext : public TestURLRequestContext { |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 227 base::WaitableEvent context_created_; | 227 base::WaitableEvent context_created_; |
| 228 scoped_refptr<URLRequestContext> context_; | 228 scoped_refptr<URLRequestContext> context_; |
| 229 }; | 229 }; |
| 230 | 230 |
| 231 // Version of URLFetcherTest that tests retying the same request twice. | 231 // Version of URLFetcherTest that tests retying the same request twice. |
| 232 class URLFetcherMultipleAttemptTest : public URLFetcherTest { | 232 class URLFetcherMultipleAttemptTest : public URLFetcherTest { |
| 233 public: | 233 public: |
| 234 // URLFetcher::Delegate | 234 // URLFetcher::Delegate |
| 235 virtual void OnURLFetchComplete(const URLFetcher* source, | 235 virtual void OnURLFetchComplete(const URLFetcher* source, |
| 236 const GURL& url, | 236 const GURL& url, |
| 237 const URLRequestStatus& status, | 237 const net::URLRequestStatus& status, |
| 238 int response_code, | 238 int response_code, |
| 239 const ResponseCookies& cookies, | 239 const ResponseCookies& cookies, |
| 240 const std::string& data); | 240 const std::string& data); |
| 241 private: | 241 private: |
| 242 std::string data_; | 242 std::string data_; |
| 243 }; | 243 }; |
| 244 | 244 |
| 245 // Wrapper that lets us call CreateFetcher() on a thread of our choice. We | 245 // Wrapper that lets us call CreateFetcher() on a thread of our choice. We |
| 246 // could make URLFetcherTest refcounted and use PostTask(FROM_HERE.. ) to call | 246 // could make URLFetcherTest refcounted and use PostTask(FROM_HERE.. ) to call |
| 247 // CreateFetcher() directly, but the ownership of the URLFetcherTest is a bit | 247 // CreateFetcher() directly, but the ownership of the URLFetcherTest is a bit |
| (...skipping 14 matching lines...) Expand all Loading... |
| 262 | 262 |
| 263 void URLFetcherTest::CreateFetcher(const GURL& url) { | 263 void URLFetcherTest::CreateFetcher(const GURL& url) { |
| 264 fetcher_ = new URLFetcher(url, URLFetcher::GET, this); | 264 fetcher_ = new URLFetcher(url, URLFetcher::GET, this); |
| 265 fetcher_->set_request_context(new TestURLRequestContextGetter( | 265 fetcher_->set_request_context(new TestURLRequestContextGetter( |
| 266 io_message_loop_proxy())); | 266 io_message_loop_proxy())); |
| 267 fetcher_->Start(); | 267 fetcher_->Start(); |
| 268 } | 268 } |
| 269 | 269 |
| 270 void URLFetcherTest::OnURLFetchComplete(const URLFetcher* source, | 270 void URLFetcherTest::OnURLFetchComplete(const URLFetcher* source, |
| 271 const GURL& url, | 271 const GURL& url, |
| 272 const URLRequestStatus& status, | 272 const net::URLRequestStatus& status, |
| 273 int response_code, | 273 int response_code, |
| 274 const ResponseCookies& cookies, | 274 const ResponseCookies& cookies, |
| 275 const std::string& data) { | 275 const std::string& data) { |
| 276 EXPECT_TRUE(status.is_success()); | 276 EXPECT_TRUE(status.is_success()); |
| 277 EXPECT_EQ(200, response_code); // HTTP OK | 277 EXPECT_EQ(200, response_code); // HTTP OK |
| 278 EXPECT_FALSE(data.empty()); | 278 EXPECT_FALSE(data.empty()); |
| 279 | 279 |
| 280 delete fetcher_; // Have to delete this here and not in the destructor, | 280 delete fetcher_; // Have to delete this here and not in the destructor, |
| 281 // because the destructor won't necessarily run on the | 281 // because the destructor won't necessarily run on the |
| 282 // same thread that CreateFetcher() did. | 282 // same thread that CreateFetcher() did. |
| 283 | 283 |
| 284 io_message_loop_proxy()->PostTask(FROM_HERE, new MessageLoop::QuitTask()); | 284 io_message_loop_proxy()->PostTask(FROM_HERE, new MessageLoop::QuitTask()); |
| 285 // If the current message loop is not the IO loop, it will be shut down when | 285 // If the current message loop is not the IO loop, it will be shut down when |
| 286 // the main loop returns and this thread subsequently goes out of scope. | 286 // the main loop returns and this thread subsequently goes out of scope. |
| 287 } | 287 } |
| 288 | 288 |
| 289 void URLFetcherPostTest::CreateFetcher(const GURL& url) { | 289 void URLFetcherPostTest::CreateFetcher(const GURL& url) { |
| 290 fetcher_ = new URLFetcher(url, URLFetcher::POST, this); | 290 fetcher_ = new URLFetcher(url, URLFetcher::POST, this); |
| 291 fetcher_->set_request_context(new TestURLRequestContextGetter( | 291 fetcher_->set_request_context(new TestURLRequestContextGetter( |
| 292 io_message_loop_proxy())); | 292 io_message_loop_proxy())); |
| 293 fetcher_->set_upload_data("application/x-www-form-urlencoded", | 293 fetcher_->set_upload_data("application/x-www-form-urlencoded", |
| 294 "bobsyeruncle"); | 294 "bobsyeruncle"); |
| 295 fetcher_->Start(); | 295 fetcher_->Start(); |
| 296 } | 296 } |
| 297 | 297 |
| 298 void URLFetcherPostTest::OnURLFetchComplete(const URLFetcher* source, | 298 void URLFetcherPostTest::OnURLFetchComplete(const URLFetcher* source, |
| 299 const GURL& url, | 299 const GURL& url, |
| 300 const URLRequestStatus& status, | 300 const net::URLRequestStatus& status, |
| 301 int response_code, | 301 int response_code, |
| 302 const ResponseCookies& cookies, | 302 const ResponseCookies& cookies, |
| 303 const std::string& data) { | 303 const std::string& data) { |
| 304 EXPECT_EQ(std::string("bobsyeruncle"), data); | 304 EXPECT_EQ(std::string("bobsyeruncle"), data); |
| 305 URLFetcherTest::OnURLFetchComplete(source, url, status, response_code, | 305 URLFetcherTest::OnURLFetchComplete(source, url, status, response_code, |
| 306 cookies, data); | 306 cookies, data); |
| 307 } | 307 } |
| 308 | 308 |
| 309 void URLFetcherHeadersTest::OnURLFetchComplete( | 309 void URLFetcherHeadersTest::OnURLFetchComplete( |
| 310 const URLFetcher* source, | 310 const URLFetcher* source, |
| 311 const GURL& url, | 311 const GURL& url, |
| 312 const URLRequestStatus& status, | 312 const net::URLRequestStatus& status, |
| 313 int response_code, | 313 int response_code, |
| 314 const ResponseCookies& cookies, | 314 const ResponseCookies& cookies, |
| 315 const std::string& data) { | 315 const std::string& data) { |
| 316 std::string header; | 316 std::string header; |
| 317 EXPECT_TRUE(source->response_headers()->GetNormalizedHeader("cache-control", | 317 EXPECT_TRUE(source->response_headers()->GetNormalizedHeader("cache-control", |
| 318 &header)); | 318 &header)); |
| 319 EXPECT_EQ("private", header); | 319 EXPECT_EQ("private", header); |
| 320 URLFetcherTest::OnURLFetchComplete(source, url, status, response_code, | 320 URLFetcherTest::OnURLFetchComplete(source, url, status, response_code, |
| 321 cookies, data); | 321 cookies, data); |
| 322 } | 322 } |
| 323 | 323 |
| 324 void URLFetcherProtectTest::CreateFetcher(const GURL& url) { | 324 void URLFetcherProtectTest::CreateFetcher(const GURL& url) { |
| 325 fetcher_ = new URLFetcher(url, URLFetcher::GET, this); | 325 fetcher_ = new URLFetcher(url, URLFetcher::GET, this); |
| 326 fetcher_->set_request_context(new TestURLRequestContextGetter( | 326 fetcher_->set_request_context(new TestURLRequestContextGetter( |
| 327 io_message_loop_proxy())); | 327 io_message_loop_proxy())); |
| 328 start_time_ = Time::Now(); | 328 start_time_ = Time::Now(); |
| 329 fetcher_->set_max_retries(11); | 329 fetcher_->set_max_retries(11); |
| 330 fetcher_->Start(); | 330 fetcher_->Start(); |
| 331 } | 331 } |
| 332 | 332 |
| 333 void URLFetcherProtectTest::OnURLFetchComplete(const URLFetcher* source, | 333 void URLFetcherProtectTest::OnURLFetchComplete( |
| 334 const GURL& url, | 334 const URLFetcher* source, |
| 335 const URLRequestStatus& status, | 335 const GURL& url, |
| 336 int response_code, | 336 const net::URLRequestStatus& status, |
| 337 const ResponseCookies& cookies, | 337 int response_code, |
| 338 const std::string& data) { | 338 const ResponseCookies& cookies, |
| 339 const std::string& data) { |
| 339 const TimeDelta one_second = TimeDelta::FromMilliseconds(1000); | 340 const TimeDelta one_second = TimeDelta::FromMilliseconds(1000); |
| 340 if (response_code >= 500) { | 341 if (response_code >= 500) { |
| 341 // Now running ServerUnavailable test. | 342 // Now running ServerUnavailable test. |
| 342 // It takes more than 1 second to finish all 11 requests. | 343 // It takes more than 1 second to finish all 11 requests. |
| 343 EXPECT_TRUE(Time::Now() - start_time_ >= one_second); | 344 EXPECT_TRUE(Time::Now() - start_time_ >= one_second); |
| 344 EXPECT_TRUE(status.is_success()); | 345 EXPECT_TRUE(status.is_success()); |
| 345 EXPECT_FALSE(data.empty()); | 346 EXPECT_FALSE(data.empty()); |
| 346 delete fetcher_; | 347 delete fetcher_; |
| 347 io_message_loop_proxy()->PostTask(FROM_HERE, new MessageLoop::QuitTask()); | 348 io_message_loop_proxy()->PostTask(FROM_HERE, new MessageLoop::QuitTask()); |
| 348 } else { | 349 } else { |
| (...skipping 18 matching lines...) Expand all Loading... |
| 367 io_message_loop_proxy())); | 368 io_message_loop_proxy())); |
| 368 fetcher_->set_automatically_retry_on_5xx(false); | 369 fetcher_->set_automatically_retry_on_5xx(false); |
| 369 start_time_ = Time::Now(); | 370 start_time_ = Time::Now(); |
| 370 fetcher_->set_max_retries(11); | 371 fetcher_->set_max_retries(11); |
| 371 fetcher_->Start(); | 372 fetcher_->Start(); |
| 372 } | 373 } |
| 373 | 374 |
| 374 void URLFetcherProtectTestPassedThrough::OnURLFetchComplete( | 375 void URLFetcherProtectTestPassedThrough::OnURLFetchComplete( |
| 375 const URLFetcher* source, | 376 const URLFetcher* source, |
| 376 const GURL& url, | 377 const GURL& url, |
| 377 const URLRequestStatus& status, | 378 const net::URLRequestStatus& status, |
| 378 int response_code, | 379 int response_code, |
| 379 const ResponseCookies& cookies, | 380 const ResponseCookies& cookies, |
| 380 const std::string& data) { | 381 const std::string& data) { |
| 381 const TimeDelta one_minute = TimeDelta::FromMilliseconds(60000); | 382 const TimeDelta one_minute = TimeDelta::FromMilliseconds(60000); |
| 382 if (response_code >= 500) { | 383 if (response_code >= 500) { |
| 383 // Now running ServerUnavailable test. | 384 // Now running ServerUnavailable test. |
| 384 // It should get here on the first attempt, so almost immediately and | 385 // It should get here on the first attempt, so almost immediately and |
| 385 // *not* to attempt to execute all 11 requests (2.5 minutes). | 386 // *not* to attempt to execute all 11 requests (2.5 minutes). |
| 386 EXPECT_TRUE(Time::Now() - start_time_ < one_minute); | 387 EXPECT_TRUE(Time::Now() - start_time_ < one_minute); |
| 387 EXPECT_TRUE(status.is_success()); | 388 EXPECT_TRUE(status.is_success()); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 406 cert_dir_ = cert_dir_.AppendASCII("ssl"); | 407 cert_dir_ = cert_dir_.AppendASCII("ssl"); |
| 407 cert_dir_ = cert_dir_.AppendASCII("certificates"); | 408 cert_dir_ = cert_dir_.AppendASCII("certificates"); |
| 408 } | 409 } |
| 409 | 410 |
| 410 // The "server certificate expired" error should result in automatic | 411 // The "server certificate expired" error should result in automatic |
| 411 // cancellation of the request by | 412 // cancellation of the request by |
| 412 // net::URLRequest::Delegate::OnSSLCertificateError. | 413 // net::URLRequest::Delegate::OnSSLCertificateError. |
| 413 void URLFetcherBadHTTPSTest::OnURLFetchComplete( | 414 void URLFetcherBadHTTPSTest::OnURLFetchComplete( |
| 414 const URLFetcher* source, | 415 const URLFetcher* source, |
| 415 const GURL& url, | 416 const GURL& url, |
| 416 const URLRequestStatus& status, | 417 const net::URLRequestStatus& status, |
| 417 int response_code, | 418 int response_code, |
| 418 const ResponseCookies& cookies, | 419 const ResponseCookies& cookies, |
| 419 const std::string& data) { | 420 const std::string& data) { |
| 420 // This part is different from URLFetcherTest::OnURLFetchComplete | 421 // This part is different from URLFetcherTest::OnURLFetchComplete |
| 421 // because this test expects the request to be cancelled. | 422 // because this test expects the request to be cancelled. |
| 422 EXPECT_EQ(URLRequestStatus::CANCELED, status.status()); | 423 EXPECT_EQ(net::URLRequestStatus::CANCELED, status.status()); |
| 423 EXPECT_EQ(net::ERR_ABORTED, status.os_error()); | 424 EXPECT_EQ(net::ERR_ABORTED, status.os_error()); |
| 424 EXPECT_EQ(-1, response_code); | 425 EXPECT_EQ(-1, response_code); |
| 425 EXPECT_TRUE(cookies.empty()); | 426 EXPECT_TRUE(cookies.empty()); |
| 426 EXPECT_TRUE(data.empty()); | 427 EXPECT_TRUE(data.empty()); |
| 427 | 428 |
| 428 // The rest is the same as URLFetcherTest::OnURLFetchComplete. | 429 // The rest is the same as URLFetcherTest::OnURLFetchComplete. |
| 429 delete fetcher_; | 430 delete fetcher_; |
| 430 io_message_loop_proxy()->PostTask(FROM_HERE, new MessageLoop::QuitTask()); | 431 io_message_loop_proxy()->PostTask(FROM_HERE, new MessageLoop::QuitTask()); |
| 431 } | 432 } |
| 432 | 433 |
| 433 void URLFetcherCancelTest::CreateFetcher(const GURL& url) { | 434 void URLFetcherCancelTest::CreateFetcher(const GURL& url) { |
| 434 fetcher_ = new URLFetcher(url, URLFetcher::GET, this); | 435 fetcher_ = new URLFetcher(url, URLFetcher::GET, this); |
| 435 CancelTestURLRequestContextGetter* context_getter = | 436 CancelTestURLRequestContextGetter* context_getter = |
| 436 new CancelTestURLRequestContextGetter(io_message_loop_proxy()); | 437 new CancelTestURLRequestContextGetter(io_message_loop_proxy()); |
| 437 fetcher_->set_request_context(context_getter); | 438 fetcher_->set_request_context(context_getter); |
| 438 fetcher_->set_max_retries(2); | 439 fetcher_->set_max_retries(2); |
| 439 fetcher_->Start(); | 440 fetcher_->Start(); |
| 440 // We need to wait for the creation of the URLRequestContext, since we | 441 // We need to wait for the creation of the URLRequestContext, since we |
| 441 // rely on it being destroyed as a signal to end the test. | 442 // rely on it being destroyed as a signal to end the test. |
| 442 context_getter->WaitForContextCreation(); | 443 context_getter->WaitForContextCreation(); |
| 443 CancelRequest(); | 444 CancelRequest(); |
| 444 } | 445 } |
| 445 | 446 |
| 446 void URLFetcherCancelTest::OnURLFetchComplete(const URLFetcher* source, | 447 void URLFetcherCancelTest::OnURLFetchComplete( |
| 447 const GURL& url, | 448 const URLFetcher* source, |
| 448 const URLRequestStatus& status, | 449 const GURL& url, |
| 449 int response_code, | 450 const net::URLRequestStatus& status, |
| 450 const ResponseCookies& cookies, | 451 int response_code, |
| 451 const std::string& data) { | 452 const ResponseCookies& cookies, |
| 453 const std::string& data) { |
| 452 // We should have cancelled the request before completion. | 454 // We should have cancelled the request before completion. |
| 453 ADD_FAILURE(); | 455 ADD_FAILURE(); |
| 454 delete fetcher_; | 456 delete fetcher_; |
| 455 io_message_loop_proxy()->PostTask(FROM_HERE, new MessageLoop::QuitTask()); | 457 io_message_loop_proxy()->PostTask(FROM_HERE, new MessageLoop::QuitTask()); |
| 456 } | 458 } |
| 457 | 459 |
| 458 void URLFetcherCancelTest::CancelRequest() { | 460 void URLFetcherCancelTest::CancelRequest() { |
| 459 delete fetcher_; | 461 delete fetcher_; |
| 460 // The URLFetcher's test context will post a Quit task once it is | 462 // The URLFetcher's test context will post a Quit task once it is |
| 461 // deleted. So if this test simply hangs, it means cancellation | 463 // deleted. So if this test simply hangs, it means cancellation |
| 462 // did not work. | 464 // did not work. |
| 463 } | 465 } |
| 464 | 466 |
| 465 void URLFetcherMultipleAttemptTest::OnURLFetchComplete( | 467 void URLFetcherMultipleAttemptTest::OnURLFetchComplete( |
| 466 const URLFetcher* source, | 468 const URLFetcher* source, |
| 467 const GURL& url, | 469 const GURL& url, |
| 468 const URLRequestStatus& status, | 470 const net::URLRequestStatus& status, |
| 469 int response_code, | 471 int response_code, |
| 470 const ResponseCookies& cookies, | 472 const ResponseCookies& cookies, |
| 471 const std::string& data) { | 473 const std::string& data) { |
| 472 EXPECT_TRUE(status.is_success()); | 474 EXPECT_TRUE(status.is_success()); |
| 473 EXPECT_EQ(200, response_code); // HTTP OK | 475 EXPECT_EQ(200, response_code); // HTTP OK |
| 474 EXPECT_FALSE(data.empty()); | 476 EXPECT_FALSE(data.empty()); |
| 475 if (!data.empty() && data_.empty()) { | 477 if (!data.empty() && data_.empty()) { |
| 476 data_ = data; | 478 data_ = data; |
| 477 fetcher_->Start(); | 479 fetcher_->Start(); |
| 478 } else { | 480 } else { |
| (...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 674 | 676 |
| 675 // Create the fetcher on the main thread. Since IO will happen on the main | 677 // Create the fetcher on the main thread. Since IO will happen on the main |
| 676 // thread, this will test URLFetcher's ability to do everything on one | 678 // thread, this will test URLFetcher's ability to do everything on one |
| 677 // thread. | 679 // thread. |
| 678 CreateFetcher(test_server.GetURL("defaultresponse")); | 680 CreateFetcher(test_server.GetURL("defaultresponse")); |
| 679 | 681 |
| 680 MessageLoop::current()->Run(); | 682 MessageLoop::current()->Run(); |
| 681 } | 683 } |
| 682 | 684 |
| 683 } // namespace. | 685 } // namespace. |
| OLD | NEW |