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