// Copyright 2015 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_OFFLINE_PAGE_ARCHIVER_H_ #define COMPONENTS_OFFLINE_PAGES_OFFLINE_PAGE_ARCHIVER_H_ #include "base/callback.h" #include "base/files/file_path.h" #include "base/strings/string16.h" #include "url/gurl.h" 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_UNAVAILBLE, wait longer to // actually snapshot a complete page, or snapshot whatever is available at that // point in time (what the user sees). // // TODO(fgorski): Add ability to delete archive. // TODO(fgorski): Add ability to check that archive exists. // TODO(fgorski): Add ability to refresh an existing archive in one step. // TODO(fgorski): Add ability to identify all of the archives in the directory, // to enable to model to reconcile the archives. class OfflinePageArchiver { public: // Results of the archive creation. enum class ArchiverResult { SUCCESSFULLY_CREATED, // Archive created successfully. ERROR_DEVICE_FULL, // Cannot save the archive - device is full. ERROR_CANCELED, // Caller canceled the request. ERROR_CONTENT_UNAVAILABLE, // Content to archive is not available. ERROR_ARCHIVE_CREATION_FAILED, // Creation of archive failed. }; typedef base::Callback CreateArchiveCallback; virtual ~OfflinePageArchiver() {} // Starts creating the archive. Once archive is created |callback| will be // called with the result and additional information. virtual void CreateArchive(const CreateArchiveCallback& callback) = 0; }; } // namespace offline_pages #endif // COMPONENTS_OFFLINE_PAGES_OFFLINE_PAGE_ARCHIVER_H_