[go: up one dir, main page]

blob: 00884026918a5d72dbc48b3fa15d4ee043761a03 [file] [log] [blame]
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef COMPONENTS_OFFLINE_PAGES_CORE_OFFLINE_PAGE_ARCHIVE_PUBLISHER_H_
#define COMPONENTS_OFFLINE_PAGES_CORE_OFFLINE_PAGE_ARCHIVE_PUBLISHER_H_
#include <cstdint>
#include "base/files/file_path.h"
#include "components/offline_pages/core/offline_page_item.h"
#include "components/offline_pages/core/offline_page_types.h"
namespace base {
class SequencedTaskRunner;
} // namespace base
namespace offline_pages {
// These constants are used to set offline_page_item.download_id when no
// download ID is available.
const int64_t kArchiveNotPublished = 0LL;
const int64_t kArchivePublishedWithoutDownloadId = -1LL;
// Identifies one published archive. Before Android Q, a published archive is
// assigned a download ID; on Q and later, a published archive is assigned a
// content URI.
struct PublishedArchiveId {
PublishedArchiveId() = default;
PublishedArchiveId(int64_t download_id, const base::FilePath& new_file_path)
: download_id(download_id), new_file_path(new_file_path) {}
bool operator==(const PublishedArchiveId& other) const {
return download_id == other.download_id &&
new_file_path == other.new_file_path;
}
// Identifier returned by Android DownloadManager when present, or
// kArchivePublishedWithoutDownloadManager otherwise. Set to
// kArchiveNotPublished if publishing failed.
int64_t download_id = kArchiveNotPublished;
// The published archive's path or content URI; empty if publishing failed.
base::FilePath new_file_path;
};
// The result of publishing an offline page to Downloads.
struct PublishArchiveResult {
SavePageResult move_result;
PublishedArchiveId id;
static PublishArchiveResult Failure(SavePageResult save_page_result);
};
// Interface of a class responsible for publishing offline page archives to
// downloads.
class OfflinePageArchivePublisher {
public:
using PublishArchiveDoneCallback =
base::OnceCallback<void(const OfflinePageItem& /* offline_page */,
PublishArchiveResult /* archive_result */)>;
virtual ~OfflinePageArchivePublisher() = default;
// Publishes the page on a background thread, then returns to the
// OfflinePageModelTaskified's done callback.
virtual void PublishArchive(
const OfflinePageItem& offline_page,
const scoped_refptr<base::SequencedTaskRunner>& background_task_runner,
PublishArchiveDoneCallback publish_done_callback) const = 0;
// Removes archives from downloads.
virtual void UnpublishArchives(
const std::vector<PublishedArchiveId>& archive_ids) const = 0;
virtual base::WeakPtr<OfflinePageArchivePublisher> GetWeakPtr() = 0;
};
} // namespace offline_pages
#endif // COMPONENTS_OFFLINE_PAGES_CORE_OFFLINE_PAGE_ARCHIVE_PUBLISHER_H_