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 
5 #include "components/offline_pages/core/background/mark_attempt_completed_task.h"
6 
7 #include <utility>
8 
9 #include "base/bind.h"
10 #include "base/time/time.h"
11 
12 namespace offline_pages {
13 
MarkAttemptCompletedTask(RequestQueueStore * store,int64_t request_id,FailState fail_state,RequestQueueStore::UpdateCallback callback)14 MarkAttemptCompletedTask::MarkAttemptCompletedTask(
15     RequestQueueStore* store,
16     int64_t request_id,
17     FailState fail_state,
18     RequestQueueStore::UpdateCallback callback)
19     : UpdateRequestTask(store, request_id, std::move(callback)),
20       fail_state_(fail_state) {}
21 
~MarkAttemptCompletedTask()22 MarkAttemptCompletedTask::~MarkAttemptCompletedTask() {}
23 
UpdateRequestImpl(UpdateRequestsResult read_result)24 void MarkAttemptCompletedTask::UpdateRequestImpl(
25     UpdateRequestsResult read_result) {
26   if (!ValidateReadResult(read_result)) {
27     CompleteWithResult(std::move(read_result));
28     return;
29   }
30 
31   // It is perfectly fine to reuse the read_result.updated_items collection, as
32   // it is owned by this callback and will be destroyed when out of scope.
33   read_result.updated_items[0].MarkAttemptCompleted(fail_state_);
34   store()->UpdateRequests(
35       read_result.updated_items,
36       base::BindOnce(&MarkAttemptCompletedTask::CompleteWithResult,
37                      GetWeakPtr()));
38 }
39 
40 }  // namespace offline_pages
41