OLD | NEW |
| (Empty) |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #ifndef COMPONENTS_OFFLINE_PAGES_OFFLINE_PAGE_ARCHIVER_H_ | |
6 #define COMPONENTS_OFFLINE_PAGES_OFFLINE_PAGE_ARCHIVER_H_ | |
7 | |
8 #include <stdint.h> | |
9 | |
10 #include "base/callback.h" | |
11 #include "base/files/file_path.h" | |
12 #include "base/strings/string16.h" | |
13 #include "url/gurl.h" | |
14 | |
15 namespace offline_pages { | |
16 | |
17 // Interface of a class responsible for creation of the archive for offline use. | |
18 // | |
19 // Archiver will be implemented by embedder and may have additional methods that | |
20 // are not interesting from the perspective of OfflinePageModel. Example of such | |
21 // extra information or capability is a way to enumerate available WebContents | |
22 // to find the one that needs to be used to create archive (or to map it to the | |
23 // URL passed in CreateArchive in some other way). | |
24 // | |
25 // Archiver will be responsible for naming the file that is being saved (it has | |
26 // URL, title and the whole page content at its disposal). For that it should be | |
27 // also configured with the path where the archives are stored. | |
28 // | |
29 // Archiver should be able to archive multiple pages in parallel, as these are | |
30 // asynchronous calls carried out by some other component. | |
31 // | |
32 // If archiver gets two consecutive requests to archive the same page (may be | |
33 // run in parallel) it can generate 2 different names for files and save the | |
34 // same page separately, as if these were 2 completely unrelated pages. It is up | |
35 // to the caller (e.g. OfflinePageModel) to make sure that situation like that | |
36 // does not happen. | |
37 // | |
38 // If the page is not completely loaded, it is up to the implementation of the | |
39 // archiver whether to respond with ERROR_CONTENT_UNAVAILBLE, wait longer to | |
40 // actually snapshot a complete page, or snapshot whatever is available at that | |
41 // point in time (what the user sees). | |
42 // | |
43 // TODO(fgorski): Add ability to delete archive. | |
44 // TODO(fgorski): Add ability to check that archive exists. | |
45 // TODO(fgorski): Add ability to refresh an existing archive in one step. | |
46 // TODO(fgorski): Add ability to identify all of the archives in the directory, | |
47 // to enable to model to reconcile the archives. | |
48 class OfflinePageArchiver { | |
49 public: | |
50 // Results of the archive creation. | |
51 enum class ArchiverResult { | |
52 SUCCESSFULLY_CREATED, // Archive created successfully. | |
53 ERROR_DEVICE_FULL, // Cannot save the archive - device is full. | |
54 ERROR_CANCELED, // Caller canceled the request. | |
55 ERROR_CONTENT_UNAVAILABLE, // Content to archive is not available. | |
56 ERROR_ARCHIVE_CREATION_FAILED, // Creation of archive failed. | |
57 ERROR_SECURITY_CERTIFICATE, // Page was loaded on secure connection, but | |
58 // there was a security error. | |
59 }; | |
60 | |
61 typedef base::Callback<void(OfflinePageArchiver* /* archiver */, | |
62 ArchiverResult /* result */, | |
63 const GURL& /* url */, | |
64 const base::FilePath& /* file_path */, | |
65 const base::string16& /* title */, | |
66 int64_t /* file_size */)> | |
67 CreateArchiveCallback; | |
68 | |
69 virtual ~OfflinePageArchiver() {} | |
70 | |
71 // Starts creating the archive in the |archives_dir| with |archive_id| added | |
72 // to the archive filename. Once archive is created |callback| will be called | |
73 // with the result and additional information. | |
74 virtual void CreateArchive(const base::FilePath& archives_dir, | |
75 int64_t archive_id, | |
76 const CreateArchiveCallback& callback) = 0; | |
77 }; | |
78 | |
79 } // namespace offline_pages | |
80 | |
81 #endif // COMPONENTS_OFFLINE_PAGES_OFFLINE_PAGE_ARCHIVER_H_ | |
OLD | NEW |