1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
|
// Copyright 2016 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/offline_pages/core/background/offliner_stub.h"
#include <memory>
#include <utility>
#include "base/functional/bind.h"
#include "base/task/single_thread_task_runner.h"
#include "components/offline_pages/core/background/save_page_request.h"
namespace offline_pages {
OfflinerStub::OfflinerStub()
: disable_loading_(false),
enable_callback_(false),
cancel_called_(false),
snapshot_on_last_retry_(false) {}
OfflinerStub::~OfflinerStub() = default;
bool OfflinerStub::LoadAndSave(const SavePageRequest& request,
CompletionCallback completion_callback,
const ProgressCallback& progress_callback) {
load_and_save_called_ = true;
if (disable_loading_)
return false;
pending_request_ = std::make_unique<SavePageRequest>(request);
completion_callback_ = std::move(completion_callback);
// Post the callback on the run loop.
if (enable_callback_) {
const int64_t arbitrary_size = 153LL;
base::SingleThreadTaskRunner::GetCurrentDefault()->PostTask(
FROM_HERE, base::BindOnce(progress_callback, request, arbitrary_size));
base::SingleThreadTaskRunner::GetCurrentDefault()->PostTask(
FROM_HERE,
base::BindOnce(std::move(completion_callback_), *pending_request_,
Offliner::RequestStatus::SAVED));
}
return true;
}
bool OfflinerStub::Cancel(CancelCallback callback) {
cancel_called_ = true;
if (!pending_request_)
return false;
base::SingleThreadTaskRunner::GetCurrentDefault()->PostDelayedTask(
FROM_HERE, base::BindOnce(std::move(callback), *pending_request_),
cancel_delay_);
pending_request_.reset();
return true;
}
void OfflinerStub::TerminateLoadIfInProgress() {
base::SingleThreadTaskRunner::GetCurrentDefault()->PostTask(
FROM_HERE,
base::BindOnce(std::move(completion_callback_), *pending_request_,
Offliner::RequestStatus::FOREGROUND_CANCELED));
pending_request_.reset();
}
bool OfflinerStub::HandleTimeout(int64_t request_id) {
if (snapshot_on_last_retry_) {
base::SingleThreadTaskRunner::GetCurrentDefault()->PostTask(
FROM_HERE,
base::BindOnce(std::move(completion_callback_), *pending_request_,
Offliner::RequestStatus::SAVED));
pending_request_.reset();
return true;
}
return false;
}
} // namespace offline_pages
|