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

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

Issue 19747: URLRequestContext and disk cache for media files (Closed)
Patch Set: signed and unsigned... Created 11 years, 9 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
« no previous file with comments | « net/http/http_cache.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) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2008 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.h" 5 #include "net/http/http_cache.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/compiler_specific.h" 9 #include "base/compiler_specific.h"
10 #include "base/message_loop.h" 10 #include "base/message_loop.h"
(...skipping 268 matching lines...) Expand 10 before | Expand all | Expand 10 after
279 int ReadResponseInfoFromEntry(); 279 int ReadResponseInfoFromEntry();
280 280
281 // Called to write data to the cache entry. If the write fails, then the 281 // Called to write data to the cache entry. If the write fails, then the
282 // cache entry is destroyed. Future calls to this function will just do 282 // cache entry is destroyed. Future calls to this function will just do
283 // nothing without side-effect. 283 // nothing without side-effect.
284 void WriteToEntry(int index, int offset, IOBuffer* data, int data_len); 284 void WriteToEntry(int index, int offset, IOBuffer* data, int data_len);
285 285
286 // Called to write response_ to the cache entry. 286 // Called to write response_ to the cache entry.
287 void WriteResponseInfoToEntry(); 287 void WriteResponseInfoToEntry();
288 288
289 // Called to truncate response content in the entry.
290 void TruncateResponseData();
291
289 // Called to append response data to the cache entry. 292 // Called to append response data to the cache entry.
290 void AppendResponseDataToEntry(IOBuffer* data, int data_len); 293 void AppendResponseDataToEntry(IOBuffer* data, int data_len);
291 294
292 // Called when we are done writing to the cache entry. 295 // Called when we are done writing to the cache entry.
293 void DoneWritingToEntry(bool success); 296 void DoneWritingToEntry(bool success);
294 297
295 // Called to signal completion of the network transaction's Start method: 298 // Called to signal completion of the network transaction's Start method:
296 void OnNetworkInfoAvailable(int result); 299 void OnNetworkInfoAvailable(int result);
297 300
298 // Called to signal completion of the network transaction's Read method: 301 // Called to signal completion of the network transaction's Read method:
(...skipping 484 matching lines...) Expand 10 before | Expand all | Expand 10 after
783 786
784 return true; 787 return true;
785 } 788 }
786 789
787 int HttpCache::Transaction::ReadResponseInfoFromEntry() { 790 int HttpCache::Transaction::ReadResponseInfoFromEntry() {
788 DCHECK(entry_); 791 DCHECK(entry_);
789 792
790 if (!HttpCache::ReadResponseInfo(entry_->disk_entry, &response_)) 793 if (!HttpCache::ReadResponseInfo(entry_->disk_entry, &response_))
791 return ERR_FAILED; 794 return ERR_FAILED;
792 795
796 // If the cache object is used for media file, we want the file handle of
797 // response data.
798 if (cache_->type() == HttpCache::MEDIA)
799 response_.response_data_file =
800 entry_->disk_entry->GetPlatformFile(kResponseContentIndex);
801
793 return OK; 802 return OK;
794 } 803 }
795 804
796 void HttpCache::Transaction::WriteToEntry(int index, int offset, 805 void HttpCache::Transaction::WriteToEntry(int index, int offset,
797 IOBuffer* data, int data_len) { 806 IOBuffer* data, int data_len) {
798 if (!entry_) 807 if (!entry_)
799 return; 808 return;
800 809
801 int rv = entry_->disk_entry->WriteData(index, offset, data, data_len, NULL, 810 int rv = entry_->disk_entry->WriteData(index, offset, data, data_len, NULL,
802 true); 811 true);
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
839 848
840 void HttpCache::Transaction::AppendResponseDataToEntry(IOBuffer* data, 849 void HttpCache::Transaction::AppendResponseDataToEntry(IOBuffer* data,
841 int data_len) { 850 int data_len) {
842 if (!entry_) 851 if (!entry_)
843 return; 852 return;
844 853
845 int current_size = entry_->disk_entry->GetDataSize(kResponseContentIndex); 854 int current_size = entry_->disk_entry->GetDataSize(kResponseContentIndex);
846 WriteToEntry(kResponseContentIndex, current_size, data, data_len); 855 WriteToEntry(kResponseContentIndex, current_size, data, data_len);
847 } 856 }
848 857
858 void HttpCache::Transaction::TruncateResponseData() {
859 if (!entry_)
860 return;
861
862 // If the cache is for media files, we try to prepare the response data
863 // file as an external file and truncate it afterwards.
864 // Recipient of ResponseInfo should judge from |response_.response_data_file|
865 // to tell whether an external file of response data is available for reading
866 // or not.
867 // TODO(hclam): we should prepare the target stream as extern file only
868 // if we get a valid response from server, i.e. 200. We don't want empty
869 // cache files for redirection or external files for erroneous requests.
870 response_.response_data_file = base::kInvalidPlatformFileValue;
871 if (cache_->type() == HttpCache::MEDIA)
872 response_.response_data_file =
873 entry_->disk_entry->UseExternalFile(kResponseContentIndex);
874
875 // Truncate the stream.
876 WriteToEntry(kResponseContentIndex, 0, NULL, 0);
877 }
878
849 void HttpCache::Transaction::DoneWritingToEntry(bool success) { 879 void HttpCache::Transaction::DoneWritingToEntry(bool success) {
850 if (!entry_) 880 if (!entry_)
851 return; 881 return;
852 882
853 if (cache_->mode() == RECORD) 883 if (cache_->mode() == RECORD)
854 DLOG(INFO) << "Recorded: " << request_->method << request_->url 884 DLOG(INFO) << "Recorded: " << request_->method << request_->url
855 << " status: " << response_.headers->response_code(); 885 << " status: " << response_.headers->response_code();
856 886
857 cache_->DoneWritingToEntry(entry_, success); 887 cache_->DoneWritingToEntry(entry_, success);
858 entry_ = NULL; 888 entry_ = NULL;
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
895 } 925 }
896 } else { 926 } else {
897 mode_ = WRITE; 927 mode_ = WRITE;
898 } 928 }
899 } 929 }
900 930
901 if (!(mode_ & READ)) { 931 if (!(mode_ & READ)) {
902 response_ = *new_response; 932 response_ = *new_response;
903 WriteResponseInfoToEntry(); 933 WriteResponseInfoToEntry();
904 934
905 // Truncate the response data 935 // Truncate response data
906 WriteToEntry(kResponseContentIndex, 0, NULL, 0); 936 TruncateResponseData();
907 937
908 // If this response is a redirect, then we can stop writing now. (We 938 // If this response is a redirect, then we can stop writing now. (We
909 // don't need to cache the response body of a redirect.) 939 // don't need to cache the response body of a redirect.)
910 if (response_.headers->IsRedirect(NULL)) 940 if (response_.headers->IsRedirect(NULL))
911 DoneWritingToEntry(true); 941 DoneWritingToEntry(true);
912 } 942 }
913 } 943 }
914 } else if (IsCertificateError(result)) { 944 } else if (IsCertificateError(result)) {
915 response_.ssl_info = network_trans_->GetResponseInfo()->ssl_info; 945 response_.ssl_info = network_trans_->GetResponseInfo()->ssl_info;
916 } 946 }
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
951 HandleResult(result); 981 HandleResult(result);
952 } 982 }
953 983
954 //----------------------------------------------------------------------------- 984 //-----------------------------------------------------------------------------
955 985
956 HttpCache::HttpCache(ProxyService* proxy_service, 986 HttpCache::HttpCache(ProxyService* proxy_service,
957 const std::wstring& cache_dir, 987 const std::wstring& cache_dir,
958 int cache_size) 988 int cache_size)
959 : disk_cache_dir_(cache_dir), 989 : disk_cache_dir_(cache_dir),
960 mode_(NORMAL), 990 mode_(NORMAL),
991 type_(COMMON),
961 network_layer_(HttpNetworkLayer::CreateFactory(proxy_service)), 992 network_layer_(HttpNetworkLayer::CreateFactory(proxy_service)),
962 ALLOW_THIS_IN_INITIALIZER_LIST(task_factory_(this)), 993 ALLOW_THIS_IN_INITIALIZER_LIST(task_factory_(this)),
963 in_memory_cache_(false), 994 in_memory_cache_(false),
964 cache_size_(cache_size) { 995 cache_size_(cache_size) {
965 } 996 }
966 997
998 HttpCache::HttpCache(HttpNetworkSession* session,
999 const std::wstring& cache_dir,
1000 int cache_size)
1001 : disk_cache_dir_(cache_dir),
1002 mode_(NORMAL),
1003 type_(COMMON),
1004 network_layer_(HttpNetworkLayer::CreateFactory(session)),
1005 ALLOW_THIS_IN_INITIALIZER_LIST(task_factory_(this)),
1006 in_memory_cache_(false),
1007 cache_size_(cache_size) {
1008 }
1009
967 HttpCache::HttpCache(ProxyService* proxy_service, int cache_size) 1010 HttpCache::HttpCache(ProxyService* proxy_service, int cache_size)
968 : mode_(NORMAL), 1011 : mode_(NORMAL),
1012 type_(COMMON),
969 network_layer_(HttpNetworkLayer::CreateFactory(proxy_service)), 1013 network_layer_(HttpNetworkLayer::CreateFactory(proxy_service)),
970 ALLOW_THIS_IN_INITIALIZER_LIST(task_factory_(this)), 1014 ALLOW_THIS_IN_INITIALIZER_LIST(task_factory_(this)),
971 in_memory_cache_(true), 1015 in_memory_cache_(true),
972 cache_size_(cache_size) { 1016 cache_size_(cache_size) {
973 } 1017 }
974 1018
975 HttpCache::HttpCache(HttpTransactionFactory* network_layer, 1019 HttpCache::HttpCache(HttpTransactionFactory* network_layer,
976 disk_cache::Backend* disk_cache) 1020 disk_cache::Backend* disk_cache)
977 : mode_(NORMAL), 1021 : mode_(NORMAL),
1022 type_(COMMON),
978 network_layer_(network_layer), 1023 network_layer_(network_layer),
979 disk_cache_(disk_cache), 1024 disk_cache_(disk_cache),
980 ALLOW_THIS_IN_INITIALIZER_LIST(task_factory_(this)), 1025 ALLOW_THIS_IN_INITIALIZER_LIST(task_factory_(this)),
981 in_memory_cache_(false), 1026 in_memory_cache_(false),
982 cache_size_(0) { 1027 cache_size_(0) {
983 } 1028 }
984 1029
985 HttpCache::~HttpCache() { 1030 HttpCache::~HttpCache() {
986 // If we have any active entries remaining, then we need to deactivate them. 1031 // If we have any active entries remaining, then we need to deactivate them.
987 // We may have some pending calls to OnProcessPendingQueue, but since those 1032 // We may have some pending calls to OnProcessPendingQueue, but since those
(...skipping 419 matching lines...) Expand 10 before | Expand all | Expand 10 after
1407 1452
1408 entry->pending_queue.erase(entry->pending_queue.begin()); 1453 entry->pending_queue.erase(entry->pending_queue.begin());
1409 1454
1410 AddTransactionToEntry(entry, next); 1455 AddTransactionToEntry(entry, next);
1411 } 1456 }
1412 1457
1413 //----------------------------------------------------------------------------- 1458 //-----------------------------------------------------------------------------
1414 1459
1415 } // namespace net 1460 } // namespace net
1416 1461
OLDNEW
« no previous file with comments | « net/http/http_cache.h ('k') | net/http/http_cache_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698