upload_list.cc 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. // Copyright 2013 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "components/upload_list/upload_list.h"
  5. #include <algorithm>
  6. #include <iterator>
  7. #include <utility>
  8. #include "base/bind.h"
  9. #include "base/check.h"
  10. #include "base/notreached.h"
  11. #include "base/task/task_traits.h"
  12. #include "base/task/thread_pool.h"
  13. namespace {
  14. // USER_VISIBLE because loading uploads blocks chrome://crashes,
  15. // chrome://webrtc-logs and the feedback UI. See https://crbug.com/972526.
  16. constexpr base::TaskTraits kLoadingTaskTraits = {
  17. base::MayBlock(), base::TaskPriority::USER_BLOCKING,
  18. base::TaskShutdownBehavior::CONTINUE_ON_SHUTDOWN};
  19. } // namespace
  20. UploadList::UploadInfo::UploadInfo(const std::string& upload_id,
  21. const base::Time& upload_time,
  22. const std::string& local_id,
  23. const base::Time& capture_time,
  24. State state)
  25. : upload_id(upload_id),
  26. upload_time(upload_time),
  27. local_id(local_id),
  28. capture_time(capture_time),
  29. state(state) {}
  30. UploadList::UploadInfo::UploadInfo(const std::string& local_id,
  31. const base::Time& capture_time,
  32. State state,
  33. const std::u16string& file_size)
  34. : local_id(local_id),
  35. capture_time(capture_time),
  36. state(state),
  37. file_size(file_size) {}
  38. UploadList::UploadInfo::UploadInfo(const std::string& upload_id,
  39. const base::Time& upload_time)
  40. : upload_id(upload_id), upload_time(upload_time), state(State::Uploaded) {}
  41. UploadList::UploadInfo::UploadInfo(const UploadInfo& upload_info)
  42. : upload_id(upload_info.upload_id),
  43. upload_time(upload_info.upload_time),
  44. local_id(upload_info.local_id),
  45. capture_time(upload_info.capture_time),
  46. state(upload_info.state),
  47. source(upload_info.source),
  48. file_size(upload_info.file_size) {}
  49. UploadList::UploadInfo::~UploadInfo() = default;
  50. UploadList::UploadList() = default;
  51. UploadList::~UploadList() = default;
  52. void UploadList::Load(base::OnceClosure callback) {
  53. DCHECK(sequence_checker_.CalledOnValidSequence());
  54. load_callback_ = std::move(callback);
  55. base::ThreadPool::PostTaskAndReplyWithResult(
  56. FROM_HERE, kLoadingTaskTraits,
  57. base::BindOnce(&UploadList::LoadUploadList, this),
  58. base::BindOnce(&UploadList::OnLoadComplete, this));
  59. }
  60. void UploadList::Clear(const base::Time& begin,
  61. const base::Time& end,
  62. base::OnceClosure callback) {
  63. DCHECK(sequence_checker_.CalledOnValidSequence());
  64. clear_callback_ = std::move(callback);
  65. base::ThreadPool::PostTaskAndReply(
  66. FROM_HERE, kLoadingTaskTraits,
  67. base::BindOnce(&UploadList::ClearUploadList, this, begin, end),
  68. base::BindOnce(&UploadList::OnClearComplete, this));
  69. }
  70. void UploadList::CancelLoadCallback() {
  71. load_callback_.Reset();
  72. }
  73. void UploadList::RequestSingleUploadAsync(const std::string& local_id) {
  74. DCHECK(sequence_checker_.CalledOnValidSequence());
  75. base::ThreadPool::PostTask(
  76. FROM_HERE, kLoadingTaskTraits,
  77. base::BindOnce(&UploadList::RequestSingleUpload, this, local_id));
  78. }
  79. void UploadList::GetUploads(size_t max_count,
  80. std::vector<UploadInfo>* uploads) {
  81. DCHECK(sequence_checker_.CalledOnValidSequence());
  82. std::copy(uploads_.begin(),
  83. uploads_.begin() + std::min(uploads_.size(), max_count),
  84. std::back_inserter(*uploads));
  85. }
  86. void UploadList::RequestSingleUpload(const std::string& local_id) {
  87. // Manual uploads for not-yet uploaded crash reports are only available for
  88. // Crashpad systems and for Android.
  89. NOTREACHED();
  90. }
  91. void UploadList::OnLoadComplete(const std::vector<UploadInfo>& uploads) {
  92. uploads_ = uploads;
  93. if (!load_callback_.is_null())
  94. std::move(load_callback_).Run();
  95. }
  96. void UploadList::OnClearComplete() {
  97. if (!clear_callback_.is_null())
  98. std::move(clear_callback_).Run();
  99. }