| 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 "net/http/http_cache_transaction.h" | 5 #include "net/http/http_cache_transaction.h" |
| 6 | 6 |
| 7 #include "build/build_config.h" | 7 #include "build/build_config.h" |
| 8 | 8 |
| 9 #if defined(OS_POSIX) | 9 #if defined(OS_POSIX) |
| 10 #include <unistd.h> | 10 #include <unistd.h> |
| (...skipping 423 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 434 return ERR_UNEXPECTED; | 434 return ERR_UNEXPECTED; |
| 435 | 435 |
| 436 SetRequest(net_log, request); | 436 SetRequest(net_log, request); |
| 437 | 437 |
| 438 // We have to wait until the backend is initialized so we start the SM. | 438 // We have to wait until the backend is initialized so we start the SM. |
| 439 next_state_ = STATE_GET_BACKEND; | 439 next_state_ = STATE_GET_BACKEND; |
| 440 int rv = DoLoop(OK); | 440 int rv = DoLoop(OK); |
| 441 | 441 |
| 442 // Setting this here allows us to check for the existence of a callback_ to | 442 // Setting this here allows us to check for the existence of a callback_ to |
| 443 // determine if we are still inside Start. | 443 // determine if we are still inside Start. |
| 444 if (rv == ERR_IO_PENDING) | 444 if (rv == ERR_IO_PENDING) { |
| 445 callback_ = callback; | 445 callback_ = tracked_objects::ScopedTracker::TrackCallback( |
| 446 FROM_HERE_WITH_EXPLICIT_FUNCTION( |
| 447 "422516 HttpCache::Transaction::Start"), |
| 448 callback); |
| 449 } |
| 446 | 450 |
| 447 return rv; | 451 return rv; |
| 448 } | 452 } |
| 449 | 453 |
| 450 int HttpCache::Transaction::RestartIgnoringLastError( | 454 int HttpCache::Transaction::RestartIgnoringLastError( |
| 451 const CompletionCallback& callback) { | 455 const CompletionCallback& callback) { |
| 452 DCHECK(!callback.is_null()); | 456 DCHECK(!callback.is_null()); |
| 453 | 457 |
| 454 // Ensure that we only have one asynchronous call at a time. | 458 // Ensure that we only have one asynchronous call at a time. |
| 455 DCHECK(callback_.is_null()); | 459 DCHECK(callback_.is_null()); |
| 456 | 460 |
| 457 if (!cache_.get()) | 461 if (!cache_.get()) |
| 458 return ERR_UNEXPECTED; | 462 return ERR_UNEXPECTED; |
| 459 | 463 |
| 460 int rv = RestartNetworkRequest(); | 464 int rv = RestartNetworkRequest(); |
| 461 | 465 |
| 462 if (rv == ERR_IO_PENDING) | 466 if (rv == ERR_IO_PENDING) { |
| 463 callback_ = callback; | 467 callback_ = tracked_objects::ScopedTracker::TrackCallback( |
| 468 FROM_HERE_WITH_EXPLICIT_FUNCTION( |
| 469 "422516 HttpCache::Transaction::RestartIgnoringLastError"), |
| 470 callback); |
| 471 } |
| 464 | 472 |
| 465 return rv; | 473 return rv; |
| 466 } | 474 } |
| 467 | 475 |
| 468 int HttpCache::Transaction::RestartWithCertificate( | 476 int HttpCache::Transaction::RestartWithCertificate( |
| 469 X509Certificate* client_cert, | 477 X509Certificate* client_cert, |
| 470 const CompletionCallback& callback) { | 478 const CompletionCallback& callback) { |
| 471 DCHECK(!callback.is_null()); | 479 DCHECK(!callback.is_null()); |
| 472 | 480 |
| 473 // Ensure that we only have one asynchronous call at a time. | 481 // Ensure that we only have one asynchronous call at a time. |
| 474 DCHECK(callback_.is_null()); | 482 DCHECK(callback_.is_null()); |
| 475 | 483 |
| 476 if (!cache_.get()) | 484 if (!cache_.get()) |
| 477 return ERR_UNEXPECTED; | 485 return ERR_UNEXPECTED; |
| 478 | 486 |
| 479 int rv = RestartNetworkRequestWithCertificate(client_cert); | 487 int rv = RestartNetworkRequestWithCertificate(client_cert); |
| 480 | 488 |
| 481 if (rv == ERR_IO_PENDING) | 489 if (rv == ERR_IO_PENDING) { |
| 482 callback_ = callback; | 490 callback_ = tracked_objects::ScopedTracker::TrackCallback( |
| 491 FROM_HERE_WITH_EXPLICIT_FUNCTION( |
| 492 "422516 HttpCache::Transaction::RestartWithCertificate"), |
| 493 callback); |
| 494 } |
| 483 | 495 |
| 484 return rv; | 496 return rv; |
| 485 } | 497 } |
| 486 | 498 |
| 487 int HttpCache::Transaction::RestartWithAuth( | 499 int HttpCache::Transaction::RestartWithAuth( |
| 488 const AuthCredentials& credentials, | 500 const AuthCredentials& credentials, |
| 489 const CompletionCallback& callback) { | 501 const CompletionCallback& callback) { |
| 490 DCHECK(auth_response_.headers.get()); | 502 DCHECK(auth_response_.headers.get()); |
| 491 DCHECK(!callback.is_null()); | 503 DCHECK(!callback.is_null()); |
| 492 | 504 |
| 493 // Ensure that we only have one asynchronous call at a time. | 505 // Ensure that we only have one asynchronous call at a time. |
| 494 DCHECK(callback_.is_null()); | 506 DCHECK(callback_.is_null()); |
| 495 | 507 |
| 496 if (!cache_.get()) | 508 if (!cache_.get()) |
| 497 return ERR_UNEXPECTED; | 509 return ERR_UNEXPECTED; |
| 498 | 510 |
| 499 // Clear the intermediate response since we are going to start over. | 511 // Clear the intermediate response since we are going to start over. |
| 500 auth_response_ = HttpResponseInfo(); | 512 auth_response_ = HttpResponseInfo(); |
| 501 | 513 |
| 502 int rv = RestartNetworkRequestWithAuth(credentials); | 514 int rv = RestartNetworkRequestWithAuth(credentials); |
| 503 | 515 |
| 504 if (rv == ERR_IO_PENDING) | 516 if (rv == ERR_IO_PENDING) { |
| 505 callback_ = callback; | 517 callback_ = tracked_objects::ScopedTracker::TrackCallback( |
| 518 FROM_HERE_WITH_EXPLICIT_FUNCTION( |
| 519 "422516 HttpCache::Transaction::RestartWithAuth"), |
| 520 callback); |
| 521 } |
| 506 | 522 |
| 507 return rv; | 523 return rv; |
| 508 } | 524 } |
| 509 | 525 |
| 510 bool HttpCache::Transaction::IsReadyToRestartForAuth() { | 526 bool HttpCache::Transaction::IsReadyToRestartForAuth() { |
| 511 if (!network_trans_.get()) | 527 if (!network_trans_.get()) |
| 512 return false; | 528 return false; |
| 513 return network_trans_->IsReadyToRestartForAuth(); | 529 return network_trans_->IsReadyToRestartForAuth(); |
| 514 } | 530 } |
| 515 | 531 |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 553 case READ: | 569 case READ: |
| 554 rv = ReadFromEntry(buf, buf_len); | 570 rv = ReadFromEntry(buf, buf_len); |
| 555 break; | 571 break; |
| 556 default: | 572 default: |
| 557 NOTREACHED(); | 573 NOTREACHED(); |
| 558 rv = ERR_FAILED; | 574 rv = ERR_FAILED; |
| 559 } | 575 } |
| 560 | 576 |
| 561 if (rv == ERR_IO_PENDING) { | 577 if (rv == ERR_IO_PENDING) { |
| 562 DCHECK(callback_.is_null()); | 578 DCHECK(callback_.is_null()); |
| 563 callback_ = callback; | 579 callback_ = tracked_objects::ScopedTracker::TrackCallback( |
| 580 FROM_HERE_WITH_EXPLICIT_FUNCTION("422516 HttpCache::Transaction::Read"), |
| 581 callback); |
| 564 } | 582 } |
| 565 return rv; | 583 return rv; |
| 566 } | 584 } |
| 567 | 585 |
| 568 void HttpCache::Transaction::StopCaching() { | 586 void HttpCache::Transaction::StopCaching() { |
| 569 // We really don't know where we are now. Hopefully there is no operation in | 587 // We really don't know where we are now. Hopefully there is no operation in |
| 570 // progress, but nothing really prevents this method to be called after we | 588 // progress, but nothing really prevents this method to be called after we |
| 571 // returned ERR_IO_PENDING. We cannot attempt to truncate the entry at this | 589 // returned ERR_IO_PENDING. We cannot attempt to truncate the entry at this |
| 572 // point because we need the state machine for that (and even if we are really | 590 // point because we need the state machine for that (and even if we are really |
| 573 // free, that would be an asynchronous operation). In other words, keep the | 591 // free, that would be an asynchronous operation). In other words, keep the |
| (...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 692 | 710 |
| 693 int HttpCache::Transaction::ResumeNetworkStart() { | 711 int HttpCache::Transaction::ResumeNetworkStart() { |
| 694 if (network_trans_) | 712 if (network_trans_) |
| 695 return network_trans_->ResumeNetworkStart(); | 713 return network_trans_->ResumeNetworkStart(); |
| 696 return ERR_UNEXPECTED; | 714 return ERR_UNEXPECTED; |
| 697 } | 715 } |
| 698 | 716 |
| 699 //----------------------------------------------------------------------------- | 717 //----------------------------------------------------------------------------- |
| 700 | 718 |
| 701 void HttpCache::Transaction::DoCallback(int rv) { | 719 void HttpCache::Transaction::DoCallback(int rv) { |
| 720 // TODO(vadimt): Remove ScopedTracker below once crbug.com/422516 is fixed. |
| 721 tracked_objects::ScopedTracker tracking_profile( |
| 722 FROM_HERE_WITH_EXPLICIT_FUNCTION( |
| 723 "422516 HttpCache::Transaction::DoCallback")); |
| 724 |
| 702 DCHECK(rv != ERR_IO_PENDING); | 725 DCHECK(rv != ERR_IO_PENDING); |
| 703 DCHECK(!callback_.is_null()); | 726 DCHECK(!callback_.is_null()); |
| 704 | 727 |
| 705 read_buf_ = NULL; // Release the buffer before invoking the callback. | 728 read_buf_ = NULL; // Release the buffer before invoking the callback. |
| 706 | 729 |
| 707 // Since Run may result in Read being called, clear callback_ up front. | 730 // Since Run may result in Read being called, clear callback_ up front. |
| 708 CompletionCallback c = callback_; | 731 CompletionCallback c = callback_; |
| 709 callback_.Reset(); | 732 callback_.Reset(); |
| 710 c.Run(rv); | 733 c.Run(rv); |
| 711 } | 734 } |
| (...skipping 2217 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2929 | 2952 |
| 2930 void HttpCache::Transaction::OnIOComplete(int result) { | 2953 void HttpCache::Transaction::OnIOComplete(int result) { |
| 2931 // TODO(vadimt): Remove ScopedTracker below once crbug.com/422516 is fixed. | 2954 // TODO(vadimt): Remove ScopedTracker below once crbug.com/422516 is fixed. |
| 2932 tracked_objects::ScopedTracker tracking_profile( | 2955 tracked_objects::ScopedTracker tracking_profile( |
| 2933 FROM_HERE_WITH_EXPLICIT_FUNCTION("422516 Transaction::OnIOComplete")); | 2956 FROM_HERE_WITH_EXPLICIT_FUNCTION("422516 Transaction::OnIOComplete")); |
| 2934 | 2957 |
| 2935 DoLoop(result); | 2958 DoLoop(result); |
| 2936 } | 2959 } |
| 2937 | 2960 |
| 2938 } // namespace net | 2961 } // namespace net |
| OLD | NEW |