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

Side by Side Diff: net/http/http_cache_transaction.cc

Issue 4067002: First pass at adding http/backend cache to NetLog (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Lint fixes Created 9 years, 11 months 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 | Annotate | Revision Log
« no previous file with comments | « net/http/http_cache_transaction.h ('k') | net/http/http_cache_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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 380 matching lines...) Expand 10 before | Expand all | Expand 10 after
391 } 391 }
392 392
393 LoadState HttpCache::Transaction::GetWriterLoadState() const { 393 LoadState HttpCache::Transaction::GetWriterLoadState() const {
394 if (network_trans_.get()) 394 if (network_trans_.get())
395 return network_trans_->GetLoadState(); 395 return network_trans_->GetLoadState();
396 if (entry_ || !request_) 396 if (entry_ || !request_)
397 return LOAD_STATE_IDLE; 397 return LOAD_STATE_IDLE;
398 return LOAD_STATE_WAITING_FOR_CACHE; 398 return LOAD_STATE_WAITING_FOR_CACHE;
399 } 399 }
400 400
401 const BoundNetLog& HttpCache::Transaction::net_log() const {
402 return net_log_;
403 }
404
401 //----------------------------------------------------------------------------- 405 //-----------------------------------------------------------------------------
402 406
403 void HttpCache::Transaction::DoCallback(int rv) { 407 void HttpCache::Transaction::DoCallback(int rv) {
404 DCHECK(rv != ERR_IO_PENDING); 408 DCHECK(rv != ERR_IO_PENDING);
405 DCHECK(callback_); 409 DCHECK(callback_);
406 410
407 // Since Run may result in Read being called, clear callback_ up front. 411 // Since Run may result in Read being called, clear callback_ up front.
408 CompletionCallback* c = callback_; 412 CompletionCallback* c = callback_;
409 callback_ = NULL; 413 callback_ = NULL;
410 c->Run(rv); 414 c->Run(rv);
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after
572 576
573 if (rv != ERR_IO_PENDING) 577 if (rv != ERR_IO_PENDING)
574 HandleResult(rv); 578 HandleResult(rv);
575 579
576 return rv; 580 return rv;
577 } 581 }
578 582
579 int HttpCache::Transaction::DoGetBackend() { 583 int HttpCache::Transaction::DoGetBackend() {
580 cache_pending_ = true; 584 cache_pending_ = true;
581 next_state_ = STATE_GET_BACKEND_COMPLETE; 585 next_state_ = STATE_GET_BACKEND_COMPLETE;
582 net_log_.BeginEvent(NetLog::TYPE_HTTP_CACHE_WAITING, NULL); 586 net_log_.BeginEvent(NetLog::TYPE_HTTP_CACHE_GET_BACKEND, NULL);
583 return cache_->GetBackendForTransaction(this); 587 return cache_->GetBackendForTransaction(this);
584 } 588 }
585 589
586 int HttpCache::Transaction::DoGetBackendComplete(int result) { 590 int HttpCache::Transaction::DoGetBackendComplete(int result) {
587 DCHECK(result == OK || result == ERR_FAILED); 591 DCHECK(result == OK || result == ERR_FAILED);
588 net_log_.EndEvent(NetLog::TYPE_HTTP_CACHE_WAITING, NULL); 592 net_log_.EndEventWithNetErrorCode(NetLog::TYPE_HTTP_CACHE_GET_BACKEND,
593 result);
589 cache_pending_ = false; 594 cache_pending_ = false;
590 595
591 if (!ShouldPassThrough()) { 596 if (!ShouldPassThrough()) {
592 cache_key_ = cache_->GenerateCacheKey(request_); 597 cache_key_ = cache_->GenerateCacheKey(request_);
593 598
594 // Requested cache access mode. 599 // Requested cache access mode.
595 if (effective_load_flags_ & LOAD_ONLY_FROM_CACHE) { 600 if (effective_load_flags_ & LOAD_ONLY_FROM_CACHE) {
596 mode_ = READ; 601 mode_ = READ;
597 } else if (effective_load_flags_ & LOAD_BYPASS_CACHE) { 602 } else if (effective_load_flags_ & LOAD_BYPASS_CACHE) {
598 mode_ = WRITE; 603 mode_ = WRITE;
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after
750 next_state_ = STATE_OPEN_ENTRY_COMPLETE; 755 next_state_ = STATE_OPEN_ENTRY_COMPLETE;
751 cache_pending_ = true; 756 cache_pending_ = true;
752 net_log_.BeginEvent(NetLog::TYPE_HTTP_CACHE_OPEN_ENTRY, NULL); 757 net_log_.BeginEvent(NetLog::TYPE_HTTP_CACHE_OPEN_ENTRY, NULL);
753 return cache_->OpenEntry(cache_key_, &new_entry_, this); 758 return cache_->OpenEntry(cache_key_, &new_entry_, this);
754 } 759 }
755 760
756 int HttpCache::Transaction::DoOpenEntryComplete(int result) { 761 int HttpCache::Transaction::DoOpenEntryComplete(int result) {
757 // It is important that we go to STATE_ADD_TO_ENTRY whenever the result is 762 // It is important that we go to STATE_ADD_TO_ENTRY whenever the result is
758 // OK, otherwise the cache will end up with an active entry without any 763 // OK, otherwise the cache will end up with an active entry without any
759 // transaction attached. 764 // transaction attached.
760 net_log_.EndEvent(NetLog::TYPE_HTTP_CACHE_OPEN_ENTRY, NULL); 765 net_log_.EndEventWithNetErrorCode(NetLog::TYPE_HTTP_CACHE_OPEN_ENTRY, result);
761 cache_pending_ = false; 766 cache_pending_ = false;
762 if (result == OK) { 767 if (result == OK) {
763 next_state_ = STATE_ADD_TO_ENTRY; 768 next_state_ = STATE_ADD_TO_ENTRY;
764 return OK; 769 return OK;
765 } 770 }
766 771
767 if (result == ERR_CACHE_RACE) { 772 if (result == ERR_CACHE_RACE) {
768 next_state_ = STATE_INIT_ENTRY; 773 next_state_ = STATE_INIT_ENTRY;
769 return OK; 774 return OK;
770 } 775 }
(...skipping 22 matching lines...) Expand all
793 next_state_ = STATE_CREATE_ENTRY_COMPLETE; 798 next_state_ = STATE_CREATE_ENTRY_COMPLETE;
794 cache_pending_ = true; 799 cache_pending_ = true;
795 net_log_.BeginEvent(NetLog::TYPE_HTTP_CACHE_CREATE_ENTRY, NULL); 800 net_log_.BeginEvent(NetLog::TYPE_HTTP_CACHE_CREATE_ENTRY, NULL);
796 return cache_->CreateEntry(cache_key_, &new_entry_, this); 801 return cache_->CreateEntry(cache_key_, &new_entry_, this);
797 } 802 }
798 803
799 int HttpCache::Transaction::DoCreateEntryComplete(int result) { 804 int HttpCache::Transaction::DoCreateEntryComplete(int result) {
800 // It is important that we go to STATE_ADD_TO_ENTRY whenever the result is 805 // It is important that we go to STATE_ADD_TO_ENTRY whenever the result is
801 // OK, otherwise the cache will end up with an active entry without any 806 // OK, otherwise the cache will end up with an active entry without any
802 // transaction attached. 807 // transaction attached.
803 net_log_.EndEvent(NetLog::TYPE_HTTP_CACHE_CREATE_ENTRY, NULL); 808 net_log_.EndEventWithNetErrorCode(NetLog::TYPE_HTTP_CACHE_CREATE_ENTRY,
809 result);
804 cache_pending_ = false; 810 cache_pending_ = false;
805 next_state_ = STATE_ADD_TO_ENTRY; 811 next_state_ = STATE_ADD_TO_ENTRY;
806 812
807 if (result == ERR_CACHE_RACE) { 813 if (result == ERR_CACHE_RACE) {
808 next_state_ = STATE_INIT_ENTRY; 814 next_state_ = STATE_INIT_ENTRY;
809 return OK; 815 return OK;
810 } 816 }
811 817
812 if (result != OK) { 818 if (result != OK) {
813 // We have a race here: Maybe we failed to open the entry and decided to 819 // We have a race here: Maybe we failed to open the entry and decided to
(...skipping 10 matching lines...) Expand all
824 } 830 }
825 831
826 int HttpCache::Transaction::DoDoomEntry() { 832 int HttpCache::Transaction::DoDoomEntry() {
827 next_state_ = STATE_DOOM_ENTRY_COMPLETE; 833 next_state_ = STATE_DOOM_ENTRY_COMPLETE;
828 cache_pending_ = true; 834 cache_pending_ = true;
829 net_log_.BeginEvent(NetLog::TYPE_HTTP_CACHE_DOOM_ENTRY, NULL); 835 net_log_.BeginEvent(NetLog::TYPE_HTTP_CACHE_DOOM_ENTRY, NULL);
830 return cache_->DoomEntry(cache_key_, this); 836 return cache_->DoomEntry(cache_key_, this);
831 } 837 }
832 838
833 int HttpCache::Transaction::DoDoomEntryComplete(int result) { 839 int HttpCache::Transaction::DoDoomEntryComplete(int result) {
834 net_log_.EndEvent(NetLog::TYPE_HTTP_CACHE_DOOM_ENTRY, NULL); 840 net_log_.EndEventWithNetErrorCode(NetLog::TYPE_HTTP_CACHE_DOOM_ENTRY, result);
835 next_state_ = STATE_CREATE_ENTRY; 841 next_state_ = STATE_CREATE_ENTRY;
836 cache_pending_ = false; 842 cache_pending_ = false;
837 if (result == ERR_CACHE_RACE) 843 if (result == ERR_CACHE_RACE)
838 next_state_ = STATE_INIT_ENTRY; 844 next_state_ = STATE_INIT_ENTRY;
839 845
840 return OK; 846 return OK;
841 } 847 }
842 848
843 int HttpCache::Transaction::DoAddToEntry() { 849 int HttpCache::Transaction::DoAddToEntry() {
844 DCHECK(new_entry_); 850 DCHECK(new_entry_);
845 cache_pending_ = true; 851 cache_pending_ = true;
846 next_state_ = STATE_ADD_TO_ENTRY_COMPLETE; 852 next_state_ = STATE_ADD_TO_ENTRY_COMPLETE;
847 net_log_.BeginEvent(NetLog::TYPE_HTTP_CACHE_WAITING, NULL); 853 net_log_.BeginEvent(NetLog::TYPE_HTTP_CACHE_ADD_TO_ENTRY, NULL);
848 DCHECK(entry_lock_waiting_since_.is_null()); 854 DCHECK(entry_lock_waiting_since_.is_null());
849 entry_lock_waiting_since_ = base::TimeTicks::Now(); 855 entry_lock_waiting_since_ = base::TimeTicks::Now();
850 return cache_->AddTransactionToEntry(new_entry_, this); 856 return cache_->AddTransactionToEntry(new_entry_, this);
851 } 857 }
852 858
853 int HttpCache::Transaction::DoAddToEntryComplete(int result) { 859 int HttpCache::Transaction::DoAddToEntryComplete(int result) {
854 net_log_.EndEvent(NetLog::TYPE_HTTP_CACHE_WAITING, NULL); 860 net_log_.EndEventWithNetErrorCode(NetLog::TYPE_HTTP_CACHE_ADD_TO_ENTRY,
861 result);
855 862
856 const base::TimeDelta entry_lock_wait = 863 const base::TimeDelta entry_lock_wait =
857 base::TimeTicks::Now() - entry_lock_waiting_since_; 864 base::TimeTicks::Now() - entry_lock_waiting_since_;
858 UMA_HISTOGRAM_TIMES("HttpCache.EntryLockWait", entry_lock_wait); 865 UMA_HISTOGRAM_TIMES("HttpCache.EntryLockWait", entry_lock_wait);
859 static const bool prefetching_fieldtrial = 866 static const bool prefetching_fieldtrial =
860 base::FieldTrialList::Find("Prefetch") && 867 base::FieldTrialList::Find("Prefetch") &&
861 !base::FieldTrialList::Find("Prefetch")->group_name().empty(); 868 !base::FieldTrialList::Find("Prefetch")->group_name().empty();
862 if (prefetching_fieldtrial) { 869 if (prefetching_fieldtrial) {
863 UMA_HISTOGRAM_TIMES( 870 UMA_HISTOGRAM_TIMES(
864 base::FieldTrial::MakeName("HttpCache.EntryLockWait", "Prefetch"), 871 base::FieldTrial::MakeName("HttpCache.EntryLockWait", "Prefetch"),
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
995 next_state_ = truncated_ ? STATE_CACHE_WRITE_TRUNCATED_RESPONSE : 1002 next_state_ = truncated_ ? STATE_CACHE_WRITE_TRUNCATED_RESPONSE :
996 STATE_CACHE_WRITE_RESPONSE; 1003 STATE_CACHE_WRITE_RESPONSE;
997 return OK; 1004 return OK;
998 } 1005 }
999 1006
1000 int HttpCache::Transaction::DoTruncateCachedData() { 1007 int HttpCache::Transaction::DoTruncateCachedData() {
1001 next_state_ = STATE_TRUNCATE_CACHED_DATA_COMPLETE; 1008 next_state_ = STATE_TRUNCATE_CACHED_DATA_COMPLETE;
1002 cache_callback_->AddRef(); // Balanced in DoTruncateCachedDataComplete. 1009 cache_callback_->AddRef(); // Balanced in DoTruncateCachedDataComplete.
1003 if (!entry_) 1010 if (!entry_)
1004 return OK; 1011 return OK;
1012 if (net_log_.IsLoggingAllEvents())
1013 net_log_.BeginEvent(NetLog::TYPE_HTTP_CACHE_WRITE_DATA, NULL);
1005 1014
1006 // Truncate the stream. 1015 // Truncate the stream.
1007 return WriteToEntry(kResponseContentIndex, 0, NULL, 0, cache_callback_); 1016 return WriteToEntry(kResponseContentIndex, 0, NULL, 0, cache_callback_);
1008 } 1017 }
1009 1018
1010 int HttpCache::Transaction::DoTruncateCachedDataComplete(int result) { 1019 int HttpCache::Transaction::DoTruncateCachedDataComplete(int result) {
1020 if (net_log_.IsLoggingAllEvents() && entry_) {
1021 net_log_.EndEventWithNetErrorCode(NetLog::TYPE_HTTP_CACHE_WRITE_DATA,
1022 result);
1023 }
1024
1011 // Balance the AddRef from DoTruncateCachedData. 1025 // Balance the AddRef from DoTruncateCachedData.
1012 cache_callback_->Release(); 1026 cache_callback_->Release();
1013 next_state_ = STATE_TRUNCATE_CACHED_METADATA; 1027 next_state_ = STATE_TRUNCATE_CACHED_METADATA;
1014 return OK; 1028 return OK;
1015 } 1029 }
1016 1030
1017 int HttpCache::Transaction::DoTruncateCachedMetadata() { 1031 int HttpCache::Transaction::DoTruncateCachedMetadata() {
1018 next_state_ = STATE_TRUNCATE_CACHED_METADATA_COMPLETE; 1032 next_state_ = STATE_TRUNCATE_CACHED_METADATA_COMPLETE;
1019 cache_callback_->AddRef(); // Balanced in DoTruncateCachedMetadataComplete. 1033 cache_callback_->AddRef(); // Balanced in DoTruncateCachedMetadataComplete.
1020 if (!entry_) 1034 if (!entry_)
1021 return OK; 1035 return OK;
1022 1036
1037 if (net_log_.IsLoggingAllEvents())
1038 net_log_.BeginEvent(NetLog::TYPE_HTTP_CACHE_WRITE_INFO, NULL);
1023 return WriteToEntry(kMetadataIndex, 0, NULL, 0, cache_callback_); 1039 return WriteToEntry(kMetadataIndex, 0, NULL, 0, cache_callback_);
1024 } 1040 }
1025 1041
1026 int HttpCache::Transaction::DoTruncateCachedMetadataComplete(int result) { 1042 int HttpCache::Transaction::DoTruncateCachedMetadataComplete(int result) {
1043 if (net_log_.IsLoggingAllEvents() && entry_) {
1044 net_log_.EndEventWithNetErrorCode(NetLog::TYPE_HTTP_CACHE_WRITE_INFO,
1045 result);
1046 }
1047
1027 // Balance the AddRef from DoTruncateCachedMetadata. 1048 // Balance the AddRef from DoTruncateCachedMetadata.
1028 cache_callback_->Release(); 1049 cache_callback_->Release();
1029 1050
1030 // If this response is a redirect, then we can stop writing now. (We don't 1051 // If this response is a redirect, then we can stop writing now. (We don't
1031 // need to cache the response body of a redirect.) 1052 // need to cache the response body of a redirect.)
1032 if (response_.headers->IsRedirect(NULL)) 1053 if (response_.headers->IsRedirect(NULL))
1033 DoneWritingToEntry(true); 1054 DoneWritingToEntry(true);
1034 next_state_ = STATE_PARTIAL_HEADERS_RECEIVED; 1055 next_state_ = STATE_PARTIAL_HEADERS_RECEIVED;
1035 return OK; 1056 return OK;
1036 } 1057 }
(...skipping 29 matching lines...) Expand all
1066 read_buf_ = new IOBuffer(io_buf_len_); 1087 read_buf_ = new IOBuffer(io_buf_len_);
1067 1088
1068 net_log_.BeginEvent(NetLog::TYPE_HTTP_CACHE_READ_INFO, NULL); 1089 net_log_.BeginEvent(NetLog::TYPE_HTTP_CACHE_READ_INFO, NULL);
1069 cache_callback_->AddRef(); // Balanced in DoCacheReadResponseComplete. 1090 cache_callback_->AddRef(); // Balanced in DoCacheReadResponseComplete.
1070 return entry_->disk_entry->ReadData(kResponseInfoIndex, 0, read_buf_, 1091 return entry_->disk_entry->ReadData(kResponseInfoIndex, 0, read_buf_,
1071 io_buf_len_, cache_callback_); 1092 io_buf_len_, cache_callback_);
1072 } 1093 }
1073 1094
1074 int HttpCache::Transaction::DoCacheReadResponseComplete(int result) { 1095 int HttpCache::Transaction::DoCacheReadResponseComplete(int result) {
1075 cache_callback_->Release(); // Balance the AddRef from DoCacheReadResponse. 1096 cache_callback_->Release(); // Balance the AddRef from DoCacheReadResponse.
1076 net_log_.EndEvent(NetLog::TYPE_HTTP_CACHE_READ_INFO, NULL); 1097 net_log_.EndEventWithNetErrorCode(NetLog::TYPE_HTTP_CACHE_READ_INFO, result);
1077 if (result != io_buf_len_ || 1098 if (result != io_buf_len_ ||
1078 !HttpCache::ParseResponseInfo(read_buf_->data(), io_buf_len_, 1099 !HttpCache::ParseResponseInfo(read_buf_->data(), io_buf_len_,
1079 &response_, &truncated_)) { 1100 &response_, &truncated_)) {
1080 DLOG(ERROR) << "ReadData failed: " << result; 1101 DLOG(ERROR) << "ReadData failed: " << result;
1081 return ERR_CACHE_READ_FAILURE; 1102 return ERR_CACHE_READ_FAILURE;
1082 } 1103 }
1083 1104
1084 // We now have access to the cache entry. 1105 // We now have access to the cache entry.
1085 // 1106 //
1086 // o if we are a reader for the transaction, then we can start reading the 1107 // o if we are a reader for the transaction, then we can start reading the
(...skipping 19 matching lines...) Expand all
1106 break; 1127 break;
1107 case WRITE: 1128 case WRITE:
1108 default: 1129 default:
1109 NOTREACHED(); 1130 NOTREACHED();
1110 result = ERR_FAILED; 1131 result = ERR_FAILED;
1111 } 1132 }
1112 return result; 1133 return result;
1113 } 1134 }
1114 1135
1115 int HttpCache::Transaction::DoCacheWriteResponse() { 1136 int HttpCache::Transaction::DoCacheWriteResponse() {
1137 if (net_log_.IsLoggingAllEvents() && entry_)
1138 net_log_.BeginEvent(NetLog::TYPE_HTTP_CACHE_WRITE_INFO, NULL);
1116 return WriteResponseInfoToEntry(false); 1139 return WriteResponseInfoToEntry(false);
1117 } 1140 }
1118 1141
1119 int HttpCache::Transaction::DoCacheWriteTruncatedResponse() { 1142 int HttpCache::Transaction::DoCacheWriteTruncatedResponse() {
1143 if (net_log_.IsLoggingAllEvents() && entry_)
1144 net_log_.BeginEvent(NetLog::TYPE_HTTP_CACHE_WRITE_INFO, NULL);
1120 return WriteResponseInfoToEntry(true); 1145 return WriteResponseInfoToEntry(true);
1121 } 1146 }
1122 1147
1123 int HttpCache::Transaction::DoCacheWriteResponseComplete(int result) { 1148 int HttpCache::Transaction::DoCacheWriteResponseComplete(int result) {
1124 next_state_ = target_state_; 1149 next_state_ = target_state_;
1125 target_state_ = STATE_NONE; 1150 target_state_ = STATE_NONE;
1126 if (!entry_) 1151 if (!entry_)
1127 return OK; 1152 return OK;
1153 if (net_log_.IsLoggingAllEvents()) {
1154 net_log_.EndEventWithNetErrorCode(NetLog::TYPE_HTTP_CACHE_WRITE_INFO,
1155 result);
1156 }
1128 1157
1129 // Balance the AddRef from WriteResponseInfoToEntry. 1158 // Balance the AddRef from WriteResponseInfoToEntry.
1130 write_headers_callback_->Release(); 1159 write_headers_callback_->Release();
1131 if (result != io_buf_len_) { 1160 if (result != io_buf_len_) {
1132 DLOG(ERROR) << "failed to write response info to cache"; 1161 DLOG(ERROR) << "failed to write response info to cache";
1133 DoneWritingToEntry(false); 1162 DoneWritingToEntry(false);
1134 } 1163 }
1135 return OK; 1164 return OK;
1136 } 1165 }
1137 1166
1138 int HttpCache::Transaction::DoCacheReadMetadata() { 1167 int HttpCache::Transaction::DoCacheReadMetadata() {
1139 DCHECK(entry_); 1168 DCHECK(entry_);
1140 DCHECK(!response_.metadata); 1169 DCHECK(!response_.metadata);
1141 next_state_ = STATE_CACHE_READ_METADATA_COMPLETE; 1170 next_state_ = STATE_CACHE_READ_METADATA_COMPLETE;
1142 1171
1143 response_.metadata = 1172 response_.metadata =
1144 new IOBufferWithSize(entry_->disk_entry->GetDataSize(kMetadataIndex)); 1173 new IOBufferWithSize(entry_->disk_entry->GetDataSize(kMetadataIndex));
1145 1174
1146 net_log_.BeginEvent(NetLog::TYPE_HTTP_CACHE_READ_INFO, NULL); 1175 net_log_.BeginEvent(NetLog::TYPE_HTTP_CACHE_READ_INFO, NULL);
1147 cache_callback_->AddRef(); // Balanced in DoCacheReadMetadataComplete. 1176 cache_callback_->AddRef(); // Balanced in DoCacheReadMetadataComplete.
1148 return entry_->disk_entry->ReadData(kMetadataIndex, 0, response_.metadata, 1177 return entry_->disk_entry->ReadData(kMetadataIndex, 0, response_.metadata,
1149 response_.metadata->size(), 1178 response_.metadata->size(),
1150 cache_callback_); 1179 cache_callback_);
1151 } 1180 }
1152 1181
1153 int HttpCache::Transaction::DoCacheReadMetadataComplete(int result) { 1182 int HttpCache::Transaction::DoCacheReadMetadataComplete(int result) {
1154 cache_callback_->Release(); // Balance the AddRef from DoCacheReadMetadata. 1183 cache_callback_->Release(); // Balance the AddRef from DoCacheReadMetadata.
1155 net_log_.EndEvent(NetLog::TYPE_HTTP_CACHE_READ_INFO, NULL); 1184 net_log_.EndEventWithNetErrorCode(NetLog::TYPE_HTTP_CACHE_READ_INFO, result);
1156 if (result != response_.metadata->size()) { 1185 if (result != response_.metadata->size()) {
1157 DLOG(ERROR) << "ReadData failed: " << result; 1186 DLOG(ERROR) << "ReadData failed: " << result;
1158 return ERR_CACHE_READ_FAILURE; 1187 return ERR_CACHE_READ_FAILURE;
1159 } 1188 }
1160 1189
1161 return OK; 1190 return OK;
1162 } 1191 }
1163 1192
1164 int HttpCache::Transaction::DoCacheQueryData() { 1193 int HttpCache::Transaction::DoCacheQueryData() {
1165 next_state_ = STATE_CACHE_QUERY_DATA_COMPLETE; 1194 next_state_ = STATE_CACHE_QUERY_DATA_COMPLETE;
(...skipping 10 matching lines...) Expand all
1176 if (!cache_) 1205 if (!cache_)
1177 return ERR_UNEXPECTED; 1206 return ERR_UNEXPECTED;
1178 1207
1179 return ValidateEntryHeadersAndContinue(true); 1208 return ValidateEntryHeadersAndContinue(true);
1180 } 1209 }
1181 1210
1182 int HttpCache::Transaction::DoCacheReadData() { 1211 int HttpCache::Transaction::DoCacheReadData() {
1183 DCHECK(entry_); 1212 DCHECK(entry_);
1184 next_state_ = STATE_CACHE_READ_DATA_COMPLETE; 1213 next_state_ = STATE_CACHE_READ_DATA_COMPLETE;
1185 cache_callback_->AddRef(); // Balanced in DoCacheReadDataComplete. 1214 cache_callback_->AddRef(); // Balanced in DoCacheReadDataComplete.
1215
1216 if (net_log_.IsLoggingAllEvents())
1217 net_log_.BeginEvent(NetLog::TYPE_HTTP_CACHE_READ_DATA, NULL);
1186 if (partial_.get()) { 1218 if (partial_.get()) {
1187 return partial_->CacheRead(entry_->disk_entry, read_buf_, io_buf_len_, 1219 return partial_->CacheRead(entry_->disk_entry, read_buf_, io_buf_len_,
1188 cache_callback_); 1220 cache_callback_);
1189 } 1221 }
1190 1222
1191 return entry_->disk_entry->ReadData(kResponseContentIndex, read_offset_, 1223 return entry_->disk_entry->ReadData(kResponseContentIndex, read_offset_,
1192 read_buf_, io_buf_len_, cache_callback_); 1224 read_buf_, io_buf_len_, cache_callback_);
1193 } 1225 }
1194 1226
1195 int HttpCache::Transaction::DoCacheReadDataComplete(int result) { 1227 int HttpCache::Transaction::DoCacheReadDataComplete(int result) {
1196 cache_callback_->Release(); // Balance the AddRef from DoCacheReadData. 1228 cache_callback_->Release(); // Balance the AddRef from DoCacheReadData.
1229 if (net_log_.IsLoggingAllEvents()) {
1230 net_log_.EndEventWithNetErrorCode(NetLog::TYPE_HTTP_CACHE_READ_DATA,
1231 result);
1232 }
1197 1233
1198 if (!cache_) 1234 if (!cache_)
1199 return ERR_UNEXPECTED; 1235 return ERR_UNEXPECTED;
1200 1236
1201 if (partial_.get()) 1237 if (partial_.get())
1202 return DoPartialCacheReadCompleted(result); 1238 return DoPartialCacheReadCompleted(result);
1203 1239
1204 if (result > 0) { 1240 if (result > 0) {
1205 read_offset_ += result; 1241 read_offset_ += result;
1206 } else if (result == 0) { // End of file. 1242 } else if (result == 0) { // End of file.
1207 cache_->DoneReadingFromEntry(entry_, this); 1243 cache_->DoneReadingFromEntry(entry_, this);
1208 entry_ = NULL; 1244 entry_ = NULL;
1209 } 1245 }
1210 return result; 1246 return result;
1211 } 1247 }
1212 1248
1213 int HttpCache::Transaction::DoCacheWriteData(int num_bytes) { 1249 int HttpCache::Transaction::DoCacheWriteData(int num_bytes) {
1214 next_state_ = STATE_CACHE_WRITE_DATA_COMPLETE; 1250 next_state_ = STATE_CACHE_WRITE_DATA_COMPLETE;
1215 write_len_ = num_bytes; 1251 write_len_ = num_bytes;
1252 if (net_log_.IsLoggingAllEvents() && entry_)
1253 net_log_.BeginEvent(NetLog::TYPE_HTTP_CACHE_WRITE_DATA, NULL);
1216 cache_callback_->AddRef(); // Balanced in DoCacheWriteDataComplete. 1254 cache_callback_->AddRef(); // Balanced in DoCacheWriteDataComplete.
1217 1255
1218 return AppendResponseDataToEntry(read_buf_, num_bytes, cache_callback_); 1256 return AppendResponseDataToEntry(read_buf_, num_bytes, cache_callback_);
1219 } 1257 }
1220 1258
1221 int HttpCache::Transaction::DoCacheWriteDataComplete(int result) { 1259 int HttpCache::Transaction::DoCacheWriteDataComplete(int result) {
1260 if (net_log_.IsLoggingAllEvents() && entry_) {
1261 net_log_.EndEventWithNetErrorCode(NetLog::TYPE_HTTP_CACHE_WRITE_DATA,
1262 result);
1263 }
1222 // Balance the AddRef from DoCacheWriteData. 1264 // Balance the AddRef from DoCacheWriteData.
1223 cache_callback_->Release(); 1265 cache_callback_->Release();
1224 if (!cache_) 1266 if (!cache_)
1225 return ERR_UNEXPECTED; 1267 return ERR_UNEXPECTED;
1226 1268
1227 if (result != write_len_) { 1269 if (result != write_len_) {
1228 DLOG(ERROR) << "failed to write response data to cache"; 1270 DLOG(ERROR) << "failed to write response data to cache";
1229 DoneWritingToEntry(false); 1271 DoneWritingToEntry(false);
1230 1272
1231 // We want to ignore errors writing to disk and just keep reading from 1273 // We want to ignore errors writing to disk and just keep reading from
(...skipping 634 matching lines...) Expand 10 before | Expand all | Expand 10 after
1866 next_state_ = STATE_START_PARTIAL_CACHE_VALIDATION; 1908 next_state_ = STATE_START_PARTIAL_CACHE_VALIDATION;
1867 } 1909 }
1868 return result; 1910 return result;
1869 } 1911 }
1870 1912
1871 void HttpCache::Transaction::OnIOComplete(int result) { 1913 void HttpCache::Transaction::OnIOComplete(int result) {
1872 DoLoop(result); 1914 DoLoop(result);
1873 } 1915 }
1874 1916
1875 } // namespace net 1917 } // namespace net
OLDNEW
« no previous file with comments | « net/http/http_cache_transaction.h ('k') | net/http/http_cache_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698