task.cc 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. // Copyright 2016 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/offline_pages/task/task.h"
  5. #include <utility>
  6. #include "base/check_op.h"
  7. #include "base/logging.h"
  8. #include "components/offline_pages/task/task_queue.h"
  9. namespace offline_pages {
  10. Task::Task() = default;
  11. Task::~Task() {
  12. // This may happen when tearing-down the |TaskQueue|.
  13. DLOG_IF(WARNING,
  14. state_ == TaskState::kRunning || state_ == TaskState::kSuspended)
  15. << "Task being destroyed before completion";
  16. }
  17. void Task::Execute(base::OnceClosure complete_callback) {
  18. DCHECK_EQ(TaskState::kWaiting, state_);
  19. state_ = TaskState::kRunning;
  20. task_completion_callback_ = std::move(complete_callback);
  21. Run();
  22. }
  23. void Task::TaskComplete() {
  24. DCHECK(state_ == TaskState::kRunning || state_ == TaskState::kSuspended)
  25. << "Can't complete task in this state: " << static_cast<int>(state_);
  26. state_ = TaskState::kCompleted;
  27. if (!task_completion_callback_.is_null())
  28. std::move(task_completion_callback_).Run();
  29. }
  30. void Task::Suspend() {
  31. DCHECK_EQ(TaskState::kRunning, state_);
  32. DCHECK(task_queue_) << "Must be owned by a task queue to suspend.";
  33. state_ = TaskState::kSuspended;
  34. task_queue_->SuspendTask(this);
  35. }
  36. void Task::Resume(base::OnceClosure on_resume) {
  37. DCHECK_EQ(TaskState::kSuspended, state_);
  38. DCHECK(task_queue_) << "Must be owned by a task queue to resume.";
  39. task_queue_->ResumeTask(this, std::move(on_resume));
  40. }
  41. } // namespace offline_pages