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 727 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
738 DCHECK(mode_ & WRITE || mode_ == NONE); | 738 DCHECK(mode_ & WRITE || mode_ == NONE); |
739 DCHECK(!network_trans_.get()); | 739 DCHECK(!network_trans_.get()); |
740 | 740 |
741 send_request_since_ = TimeTicks::Now(); | 741 send_request_since_ = TimeTicks::Now(); |
742 | 742 |
743 // Create a network transaction. | 743 // Create a network transaction. |
744 int rv = cache_->network_layer_->CreateTransaction(&network_trans_, NULL); | 744 int rv = cache_->network_layer_->CreateTransaction(&network_trans_, NULL); |
745 if (rv != OK) | 745 if (rv != OK) |
746 return rv; | 746 return rv; |
747 | 747 |
| 748 ReportNetworkActionStart(); |
748 next_state_ = STATE_SEND_REQUEST_COMPLETE; | 749 next_state_ = STATE_SEND_REQUEST_COMPLETE; |
749 rv = network_trans_->Start(request_, io_callback_, net_log_); | 750 rv = network_trans_->Start(request_, io_callback_, net_log_); |
750 return rv; | 751 return rv; |
751 } | 752 } |
752 | 753 |
753 int HttpCache::Transaction::DoSendRequestComplete(int result) { | 754 int HttpCache::Transaction::DoSendRequestComplete(int result) { |
| 755 ReportNetworkActionFinish(); |
| 756 |
754 if (!cache_) | 757 if (!cache_) |
755 return ERR_UNEXPECTED; | 758 return ERR_UNEXPECTED; |
756 | 759 |
757 if (result == OK) { | 760 if (result == OK) { |
758 next_state_ = STATE_SUCCESSFUL_SEND_REQUEST; | 761 next_state_ = STATE_SUCCESSFUL_SEND_REQUEST; |
759 return OK; | 762 return OK; |
760 } | 763 } |
761 | 764 |
762 // Do not record requests that have network errors or restarts. | 765 // Do not record requests that have network errors or restarts. |
763 UpdateTransactionPattern(PATTERN_NOT_COVERED); | 766 UpdateTransactionPattern(PATTERN_NOT_COVERED); |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
832 } | 835 } |
833 UpdateTransactionPattern(PATTERN_ENTRY_UPDATED); | 836 UpdateTransactionPattern(PATTERN_ENTRY_UPDATED); |
834 mode_ = WRITE; | 837 mode_ = WRITE; |
835 } | 838 } |
836 | 839 |
837 next_state_ = STATE_OVERWRITE_CACHED_RESPONSE; | 840 next_state_ = STATE_OVERWRITE_CACHED_RESPONSE; |
838 return OK; | 841 return OK; |
839 } | 842 } |
840 | 843 |
841 int HttpCache::Transaction::DoNetworkRead() { | 844 int HttpCache::Transaction::DoNetworkRead() { |
| 845 ReportNetworkActionStart(); |
842 next_state_ = STATE_NETWORK_READ_COMPLETE; | 846 next_state_ = STATE_NETWORK_READ_COMPLETE; |
843 return network_trans_->Read(read_buf_, io_buf_len_, io_callback_); | 847 return network_trans_->Read(read_buf_, io_buf_len_, io_callback_); |
844 } | 848 } |
845 | 849 |
846 int HttpCache::Transaction::DoNetworkReadComplete(int result) { | 850 int HttpCache::Transaction::DoNetworkReadComplete(int result) { |
847 DCHECK(mode_ & WRITE || mode_ == NONE); | 851 DCHECK(mode_ & WRITE || mode_ == NONE); |
848 | 852 |
| 853 ReportNetworkActionFinish(); |
| 854 |
849 if (!cache_) | 855 if (!cache_) |
850 return ERR_UNEXPECTED; | 856 return ERR_UNEXPECTED; |
851 | 857 |
852 if (result > 0) | 858 if (result > 0) |
853 bytes_read_from_network_ += result; | 859 bytes_read_from_network_ += result; |
854 | 860 |
855 // If there is an error or we aren't saving the data, we are done; just wait | 861 // If there is an error or we aren't saving the data, we are done; just wait |
856 // until the destructor runs to see if we can keep the data. | 862 // until the destructor runs to see if we can keep the data. |
857 if (mode_ == NONE || result < 0) | 863 if (mode_ == NONE || result < 0) |
858 return result; | 864 return result; |
(...skipping 907 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1766 | 1772 |
1767 next_state_ = STATE_SEND_REQUEST; | 1773 next_state_ = STATE_SEND_REQUEST; |
1768 return OK; | 1774 return OK; |
1769 } | 1775 } |
1770 | 1776 |
1771 int HttpCache::Transaction::RestartNetworkRequest() { | 1777 int HttpCache::Transaction::RestartNetworkRequest() { |
1772 DCHECK(mode_ & WRITE || mode_ == NONE); | 1778 DCHECK(mode_ & WRITE || mode_ == NONE); |
1773 DCHECK(network_trans_.get()); | 1779 DCHECK(network_trans_.get()); |
1774 DCHECK_EQ(STATE_NONE, next_state_); | 1780 DCHECK_EQ(STATE_NONE, next_state_); |
1775 | 1781 |
| 1782 ReportNetworkActionStart(); |
1776 next_state_ = STATE_SEND_REQUEST_COMPLETE; | 1783 next_state_ = STATE_SEND_REQUEST_COMPLETE; |
1777 int rv = network_trans_->RestartIgnoringLastError(io_callback_); | 1784 int rv = network_trans_->RestartIgnoringLastError(io_callback_); |
1778 if (rv != ERR_IO_PENDING) | 1785 if (rv != ERR_IO_PENDING) |
1779 return DoLoop(rv); | 1786 return DoLoop(rv); |
1780 return rv; | 1787 return rv; |
1781 } | 1788 } |
1782 | 1789 |
1783 int HttpCache::Transaction::RestartNetworkRequestWithCertificate( | 1790 int HttpCache::Transaction::RestartNetworkRequestWithCertificate( |
1784 X509Certificate* client_cert) { | 1791 X509Certificate* client_cert) { |
1785 DCHECK(mode_ & WRITE || mode_ == NONE); | 1792 DCHECK(mode_ & WRITE || mode_ == NONE); |
1786 DCHECK(network_trans_.get()); | 1793 DCHECK(network_trans_.get()); |
1787 DCHECK_EQ(STATE_NONE, next_state_); | 1794 DCHECK_EQ(STATE_NONE, next_state_); |
1788 | 1795 |
| 1796 ReportNetworkActionStart(); |
1789 next_state_ = STATE_SEND_REQUEST_COMPLETE; | 1797 next_state_ = STATE_SEND_REQUEST_COMPLETE; |
1790 int rv = network_trans_->RestartWithCertificate(client_cert, io_callback_); | 1798 int rv = network_trans_->RestartWithCertificate(client_cert, io_callback_); |
1791 if (rv != ERR_IO_PENDING) | 1799 if (rv != ERR_IO_PENDING) |
1792 return DoLoop(rv); | 1800 return DoLoop(rv); |
1793 return rv; | 1801 return rv; |
1794 } | 1802 } |
1795 | 1803 |
1796 int HttpCache::Transaction::RestartNetworkRequestWithAuth( | 1804 int HttpCache::Transaction::RestartNetworkRequestWithAuth( |
1797 const AuthCredentials& credentials) { | 1805 const AuthCredentials& credentials) { |
1798 DCHECK(mode_ & WRITE || mode_ == NONE); | 1806 DCHECK(mode_ & WRITE || mode_ == NONE); |
1799 DCHECK(network_trans_.get()); | 1807 DCHECK(network_trans_.get()); |
1800 DCHECK_EQ(STATE_NONE, next_state_); | 1808 DCHECK_EQ(STATE_NONE, next_state_); |
1801 | 1809 |
| 1810 ReportNetworkActionStart(); |
1802 next_state_ = STATE_SEND_REQUEST_COMPLETE; | 1811 next_state_ = STATE_SEND_REQUEST_COMPLETE; |
1803 int rv = network_trans_->RestartWithAuth(credentials, io_callback_); | 1812 int rv = network_trans_->RestartWithAuth(credentials, io_callback_); |
1804 if (rv != ERR_IO_PENDING) | 1813 if (rv != ERR_IO_PENDING) |
1805 return DoLoop(rv); | 1814 return DoLoop(rv); |
1806 return rv; | 1815 return rv; |
1807 } | 1816 } |
1808 | 1817 |
1809 bool HttpCache::Transaction::RequiresValidation() { | 1818 bool HttpCache::Transaction::RequiresValidation() { |
1810 // TODO(darin): need to do more work here: | 1819 // TODO(darin): need to do more work here: |
1811 // - make sure we have a matching request method | 1820 // - make sure we have a matching request method |
(...skipping 413 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2225 void HttpCache::Transaction::ReportCacheActionStart() { | 2234 void HttpCache::Transaction::ReportCacheActionStart() { |
2226 if (transaction_delegate_) | 2235 if (transaction_delegate_) |
2227 transaction_delegate_->OnCacheActionStart(); | 2236 transaction_delegate_->OnCacheActionStart(); |
2228 } | 2237 } |
2229 | 2238 |
2230 void HttpCache::Transaction::ReportCacheActionFinish() { | 2239 void HttpCache::Transaction::ReportCacheActionFinish() { |
2231 if (transaction_delegate_) | 2240 if (transaction_delegate_) |
2232 transaction_delegate_->OnCacheActionFinish(); | 2241 transaction_delegate_->OnCacheActionFinish(); |
2233 } | 2242 } |
2234 | 2243 |
| 2244 void HttpCache::Transaction::ReportNetworkActionStart() { |
| 2245 if (transaction_delegate_) |
| 2246 transaction_delegate_->OnNetworkActionStart(); |
| 2247 } |
| 2248 |
| 2249 void HttpCache::Transaction::ReportNetworkActionFinish() { |
| 2250 if (transaction_delegate_) |
| 2251 transaction_delegate_->OnNetworkActionFinish(); |
| 2252 } |
| 2253 |
2235 void HttpCache::Transaction::UpdateTransactionPattern( | 2254 void HttpCache::Transaction::UpdateTransactionPattern( |
2236 TransactionPattern new_transaction_pattern) { | 2255 TransactionPattern new_transaction_pattern) { |
2237 if (transaction_pattern_ == PATTERN_NOT_COVERED) | 2256 if (transaction_pattern_ == PATTERN_NOT_COVERED) |
2238 return; | 2257 return; |
2239 DCHECK(transaction_pattern_ == PATTERN_UNDEFINED || | 2258 DCHECK(transaction_pattern_ == PATTERN_UNDEFINED || |
2240 new_transaction_pattern == PATTERN_NOT_COVERED); | 2259 new_transaction_pattern == PATTERN_NOT_COVERED); |
2241 transaction_pattern_ = new_transaction_pattern; | 2260 transaction_pattern_ = new_transaction_pattern; |
2242 } | 2261 } |
2243 | 2262 |
2244 void HttpCache::Transaction::RecordHistograms() { | 2263 void HttpCache::Transaction::RecordHistograms() { |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2349 before_send_percent); | 2368 before_send_percent); |
2350 } | 2369 } |
2351 break; | 2370 break; |
2352 } | 2371 } |
2353 default: | 2372 default: |
2354 NOTREACHED(); | 2373 NOTREACHED(); |
2355 } | 2374 } |
2356 } | 2375 } |
2357 | 2376 |
2358 } // namespace net | 2377 } // namespace net |
OLD | NEW |