// Copyright 2015 The Chromium Authors // 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_ARCHIVER_H_ #define COMPONENTS_OFFLINE_PAGES_CORE_OFFLINE_PAGE_ARCHIVER_H_ #include <cstdint> #include <string> #include "base/files/file_path.h" #include "base/functional/callback.h" #include "components/offline_pages/core/offline_page_item.h" #include "components/offline_pages/core/offline_page_types.h" #include "url/gurl.h" namespace content { class WebContents; } // namespace content namespace offline_pages { // Interface of a class responsible for creation of the archive for offline use. // // Archiver will be implemented by embedder and may have additional methods that // are not interesting from the perspective of OfflinePageModel. Example of such // extra information or capability is a way to enumerate available WebContents // to find the one that needs to be used to create archive (or to map it to the // URL passed in CreateArchive in some other way). // // Archiver will be responsible for naming the file that is being saved (it has // URL, title and the whole page content at its disposal). For that it should be // also configured with the path where the archives are stored. // // Archiver should be able to archive multiple pages in parallel, as these are // asynchronous calls carried out by some other component. // // If archiver gets two consecutive requests to archive the same page (may be // run in parallel) it can generate 2 different names for files and save the // same page separately, as if these were 2 completely unrelated pages. It is up // to the caller (e.g. OfflinePageModel) to make sure that situation like that // does not happen. // // If the page is not completely loaded, it is up to the implementation of the // archiver whether to respond with ERROR_CONTENT_UNAVAILABLE, wait longer to // actually snapshot a complete page, or snapshot whatever is available at that // point in time (what the user sees). class OfflinePageArchiver { … }; } // namespace offline_pages #endif // COMPONENTS_OFFLINE_PAGES_CORE_OFFLINE_PAGE_ARCHIVER_H_