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 "content/browser/download/download_resource_handler.h" | 5 #include "content/browser/download/download_resource_handler.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
161 RecordDownloadContentDisposition(info->content_disposition); | 161 RecordDownloadContentDisposition(info->content_disposition); |
162 | 162 |
163 info->request_handle = | 163 info->request_handle = |
164 DownloadRequestHandle(AsWeakPtr(), request_info->GetChildID(), | 164 DownloadRequestHandle(AsWeakPtr(), request_info->GetChildID(), |
165 request_info->GetRouteID(), | 165 request_info->GetRouteID(), |
166 request_info->GetRequestID()); | 166 request_info->GetRequestID()); |
167 | 167 |
168 // Get the last modified time and etag. | 168 // Get the last modified time and etag. |
169 const net::HttpResponseHeaders* headers = request()->response_headers(); | 169 const net::HttpResponseHeaders* headers = request()->response_headers(); |
170 if (headers) { | 170 if (headers) { |
171 // TODO(asanka): Only store these if headers->HasStrongValidators() is true. | 171 if (headers->HasStrongValidators()) { |
172 // See RFC 2616 section 13.3.3. | 172 // If we don't have strong validators as per RFC 2616 section 13.3.3, then |
173 if (!headers->EnumerateHeader(NULL, "Last-Modified", &info->last_modified)) | 173 // we neither store nor use them for range requests. |
174 info->last_modified.clear(); | 174 if (!headers->EnumerateHeader(NULL, "Last-Modified", |
175 if (!headers->EnumerateHeader(NULL, "ETag", &info->etag)) | 175 &info->last_modified)) |
176 info->etag.clear(); | 176 info->last_modified.clear(); |
| 177 if (!headers->EnumerateHeader(NULL, "ETag", &info->etag)) |
| 178 info->etag.clear(); |
| 179 } |
177 | 180 |
178 int status = headers->response_code(); | 181 int status = headers->response_code(); |
179 if (2 == status / 100 && status != net::HTTP_PARTIAL_CONTENT) { | 182 if (2 == status / 100 && status != net::HTTP_PARTIAL_CONTENT) { |
180 // Success & not range response; if we asked for a range, we didn't | 183 // Success & not range response; if we asked for a range, we didn't |
181 // get it--reset the file pointers to reflect that. | 184 // get it--reset the file pointers to reflect that. |
182 info->save_info->offset = 0; | 185 info->save_info->offset = 0; |
183 info->save_info->hash_state = ""; | 186 info->save_info->hash_state = ""; |
184 } | 187 } |
185 | 188 |
186 if (!headers->GetMimeType(&info->original_mime_type)) | 189 if (!headers->GetMimeType(&info->original_mime_type)) |
(...skipping 277 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
464 | 467 |
465 // Remove output stream callback if a stream exists. | 468 // Remove output stream callback if a stream exists. |
466 if (stream_writer_) | 469 if (stream_writer_) |
467 stream_writer_->RegisterCallback(base::Closure()); | 470 stream_writer_->RegisterCallback(base::Closure()); |
468 | 471 |
469 UMA_HISTOGRAM_TIMES("SB2.DownloadDuration", | 472 UMA_HISTOGRAM_TIMES("SB2.DownloadDuration", |
470 base::TimeTicks::Now() - download_start_time_); | 473 base::TimeTicks::Now() - download_start_time_); |
471 } | 474 } |
472 | 475 |
473 } // namespace content | 476 } // namespace content |
OLD | NEW |