1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- // 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_
|