OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "components/component_updater/background_downloader_win.h" | 5 #include "components/component_updater/background_downloader_win.h" |
6 | 6 |
7 #include <atlbase.h> | 7 #include <atlbase.h> |
8 #include <atlcom.h> | 8 #include <atlcom.h> |
9 | 9 |
| 10 #include <stdint.h> |
10 #include <functional> | 11 #include <functional> |
11 #include <iomanip> | 12 #include <iomanip> |
| 13 #include <limits> |
12 #include <vector> | 14 #include <vector> |
13 | 15 |
| 16 #include "base/bind.h" |
| 17 #include "base/bind_helpers.h" |
14 #include "base/files/file_util.h" | 18 #include "base/files/file_util.h" |
15 #include "base/message_loop/message_loop_proxy.h" | 19 #include "base/message_loop/message_loop_proxy.h" |
16 #include "base/single_thread_task_runner.h" | 20 #include "base/single_thread_task_runner.h" |
17 #include "base/strings/sys_string_conversions.h" | 21 #include "base/strings/sys_string_conversions.h" |
18 #include "base/win/scoped_co_mem.h" | 22 #include "base/win/scoped_co_mem.h" |
19 #include "components/component_updater/component_updater_utils.h" | 23 #include "components/component_updater/component_updater_utils.h" |
20 #include "ui/base/win/atl_module.h" | 24 #include "ui/base/win/atl_module.h" |
21 #include "url/gurl.h" | 25 #include "url/gurl.h" |
22 | 26 |
23 using base::win::ScopedCoMem; | 27 using base::win::ScopedCoMem; |
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
192 *progress = bg_file_progress; | 196 *progress = bg_file_progress; |
193 } | 197 } |
194 | 198 |
195 return hr; | 199 return hr; |
196 } | 200 } |
197 | 201 |
198 // Returns the number of bytes downloaded and bytes to download for all files | 202 // Returns the number of bytes downloaded and bytes to download for all files |
199 // in the job. If the values are not known or if an error has occurred, | 203 // in the job. If the values are not known or if an error has occurred, |
200 // a value of -1 is reported. | 204 // a value of -1 is reported. |
201 HRESULT GetJobByteCount(IBackgroundCopyJob* job, | 205 HRESULT GetJobByteCount(IBackgroundCopyJob* job, |
202 int64* downloaded_bytes, | 206 int64_t* downloaded_bytes, |
203 int64* total_bytes) { | 207 int64_t* total_bytes) { |
204 *downloaded_bytes = -1; | 208 *downloaded_bytes = -1; |
205 *total_bytes = -1; | 209 *total_bytes = -1; |
206 | 210 |
207 if (!job) | 211 if (!job) |
208 return E_FAIL; | 212 return E_FAIL; |
209 | 213 |
210 BG_JOB_PROGRESS job_progress = {0}; | 214 BG_JOB_PROGRESS job_progress = {0}; |
211 HRESULT hr = job->GetProgress(&job_progress); | 215 HRESULT hr = job->GetProgress(&job_progress); |
212 if (FAILED(hr)) | 216 if (FAILED(hr)) |
213 return hr; | 217 return hr; |
214 | 218 |
215 if (job_progress.BytesTransferred <= kint64max) | 219 const uint64_t kMaxNumBytes = |
| 220 static_cast<uint64_t>(std::numeric_limits<int64_t>::max()); |
| 221 if (job_progress.BytesTransferred <= kMaxNumBytes) |
216 *downloaded_bytes = job_progress.BytesTransferred; | 222 *downloaded_bytes = job_progress.BytesTransferred; |
217 | 223 |
218 if (job_progress.BytesTotal <= kint64max && | 224 if (job_progress.BytesTotal <= kMaxNumBytes && |
219 job_progress.BytesTotal != BG_SIZE_UNKNOWN) | 225 job_progress.BytesTotal != BG_SIZE_UNKNOWN) |
220 *total_bytes = job_progress.BytesTotal; | 226 *total_bytes = job_progress.BytesTotal; |
221 | 227 |
222 return S_OK; | 228 return S_OK; |
223 } | 229 } |
224 | 230 |
225 HRESULT GetJobDescription(IBackgroundCopyJob* job, const base::string16* name) { | 231 HRESULT GetJobDescription(IBackgroundCopyJob* job, const base::string16* name) { |
226 ScopedCoMem<base::char16> description; | 232 ScopedCoMem<base::char16> description; |
227 return job->GetDescription(&description); | 233 return job->GetDescription(&description); |
228 } | 234 } |
(...skipping 280 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
509 is_completed_ = true; | 515 is_completed_ = true; |
510 | 516 |
511 timer_.reset(); | 517 timer_.reset(); |
512 | 518 |
513 const base::Time download_end_time(base::Time::Now()); | 519 const base::Time download_end_time(base::Time::Now()); |
514 const base::TimeDelta download_time = | 520 const base::TimeDelta download_time = |
515 download_end_time >= download_start_time_ | 521 download_end_time >= download_start_time_ |
516 ? download_end_time - download_start_time_ | 522 ? download_end_time - download_start_time_ |
517 : base::TimeDelta(); | 523 : base::TimeDelta(); |
518 | 524 |
519 int64 downloaded_bytes = -1; | 525 int64_t downloaded_bytes = -1; |
520 int64 total_bytes = -1; | 526 int64_t total_bytes = -1; |
521 GetJobByteCount(job_, &downloaded_bytes, &total_bytes); | 527 GetJobByteCount(job_, &downloaded_bytes, &total_bytes); |
522 | 528 |
523 if (FAILED(error) && job_) { | 529 if (FAILED(error) && job_) { |
524 job_->Cancel(); | 530 job_->Cancel(); |
525 CleanupJobFiles(job_); | 531 CleanupJobFiles(job_); |
526 } | 532 } |
527 | 533 |
528 job_ = NULL; | 534 job_ = NULL; |
529 | 535 |
530 CleanupStaleJobs(bits_manager_); | 536 CleanupStaleJobs(bits_manager_); |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
606 void BackgroundDownloader::OnStateQueued() { | 612 void BackgroundDownloader::OnStateQueued() { |
607 if (IsStuck()) | 613 if (IsStuck()) |
608 EndDownload(E_ABORT); // Return a generic error for now. | 614 EndDownload(E_ABORT); // Return a generic error for now. |
609 } | 615 } |
610 | 616 |
611 void BackgroundDownloader::OnStateTransferring() { | 617 void BackgroundDownloader::OnStateTransferring() { |
612 // Resets the baseline for detecting a stuck job since the job is transferring | 618 // Resets the baseline for detecting a stuck job since the job is transferring |
613 // data and it is making progress. | 619 // data and it is making progress. |
614 job_stuck_begin_time_ = base::Time::Now(); | 620 job_stuck_begin_time_ = base::Time::Now(); |
615 | 621 |
616 int64 downloaded_bytes = -1; | 622 int64_t downloaded_bytes = -1; |
617 int64 total_bytes = -1; | 623 int64_t total_bytes = -1; |
618 HRESULT hr = GetJobByteCount(job_, &downloaded_bytes, &total_bytes); | 624 HRESULT hr = GetJobByteCount(job_, &downloaded_bytes, &total_bytes); |
619 if (FAILED(hr)) | 625 if (FAILED(hr)) |
620 return; | 626 return; |
621 | 627 |
622 Result result; | 628 Result result; |
623 result.downloaded_bytes = downloaded_bytes; | 629 result.downloaded_bytes = downloaded_bytes; |
624 result.total_bytes = total_bytes; | 630 result.total_bytes = total_bytes; |
625 | 631 |
626 main_task_runner_->PostTask( | 632 main_task_runner_->PostTask( |
627 FROM_HERE, | 633 FROM_HERE, |
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
757 // must match as a job only contains one file. | 763 // must match as a job only contains one file. |
758 DCHECK(progress.Completed); | 764 DCHECK(progress.Completed); |
759 DCHECK_EQ(progress.BytesTotal, progress.BytesTransferred); | 765 DCHECK_EQ(progress.BytesTotal, progress.BytesTransferred); |
760 | 766 |
761 response_ = base::FilePath(local_name); | 767 response_ = base::FilePath(local_name); |
762 | 768 |
763 return S_OK; | 769 return S_OK; |
764 } | 770 } |
765 | 771 |
766 } // namespace component_updater | 772 } // namespace component_updater |
OLD | NEW |