OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef COMPONENTS_OFFLINE_PAGES_OFFLINE_PAGE_MODEL_H_ | 5 #ifndef COMPONENTS_OFFLINE_PAGES_OFFLINE_PAGE_MODEL_H_ |
6 #define COMPONENTS_OFFLINE_PAGES_OFFLINE_PAGE_MODEL_H_ | 6 #define COMPONENTS_OFFLINE_PAGES_OFFLINE_PAGE_MODEL_H_ |
7 | 7 |
8 #include <map> | 8 #include <map> |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
188 const OfflinePageItem* GetPageByBookmarkId(int64 bookmark_id) const; | 188 const OfflinePageItem* GetPageByBookmarkId(int64 bookmark_id) const; |
189 | 189 |
190 // Returns an offline page that is stored as |offline_url|. A nullptr is | 190 // Returns an offline page that is stored as |offline_url|. A nullptr is |
191 // returned if not found. | 191 // returned if not found. |
192 const OfflinePageItem* GetPageByOfflineURL(const GURL& offline_url) const; | 192 const OfflinePageItem* GetPageByOfflineURL(const GURL& offline_url) const; |
193 | 193 |
194 // Returns an offline page saved for |online_url|. A nullptr is returned if | 194 // Returns an offline page saved for |online_url|. A nullptr is returned if |
195 // not found. | 195 // not found. |
196 const OfflinePageItem* GetPageByOnlineURL(const GURL& online_url) const; | 196 const OfflinePageItem* GetPageByOnlineURL(const GURL& online_url) const; |
197 | 197 |
198 // Checks that all of the offline pages have corresponding offline copies. | 198 // Checks for and fixes the following problems with offline pages metadata: |
199 // If a page is discovered to be missing an offline copy, its offline page | 199 // * removes pages marked for deletion when |finalize_deletion| is set to |
200 // metadata will be removed and |OfflinePageDeleted| will be sent to model | 200 // true, |
201 // observers. | 201 // * removes pages that don't have a corresponding bookmark mode in the |
202 void CheckForExternalFileDeletion(); | 202 // bookmarks model, |
| 203 // * removes pages that don't have the offline archive. |
| 204 // Metadata checks run only when the bookmark model is loaded. If a metadata |
| 205 // check is already in progress, the method returns. |
| 206 void CheckMetadataConsistency(bool finalize_deletion); |
203 | 207 |
204 // Methods for testing only: | 208 // Methods for testing only: |
205 OfflinePageMetadataStore* GetStoreForTesting(); | 209 OfflinePageMetadataStore* GetStoreForTesting(); |
206 | 210 |
207 bool is_loaded() const { return is_loaded_; } | 211 bool is_loaded() const { return is_loaded_; } |
208 | 212 |
209 private: | 213 private: |
210 FRIEND_TEST_ALL_PREFIXES(OfflinePageModelTest, MarkPageForDeletion); | 214 FRIEND_TEST_ALL_PREFIXES(OfflinePageModelTest, MarkPageForDeletion); |
211 FRIEND_TEST_ALL_PREFIXES(OfflinePageModelTest, BookmarkNodeChangesUrl); | 215 FRIEND_TEST_ALL_PREFIXES(OfflinePageModelTest, BookmarkNodeChangesUrl); |
212 | 216 |
213 typedef ScopedVector<OfflinePageArchiver> PendingArchivers; | 217 typedef ScopedVector<OfflinePageArchiver> PendingArchivers; |
214 | 218 |
215 // BaseBookmarkModelObserver: | 219 // BaseBookmarkModelObserver: |
| 220 void BookmarkModelLoaded(bookmarks::BookmarkModel* model, |
| 221 bool ids_reassigned) override; |
| 222 void BookmarkModelBeingDeleted(bookmarks::BookmarkModel* model) override; |
216 void BookmarkModelChanged() override; | 223 void BookmarkModelChanged() override; |
217 void BookmarkNodeAdded(bookmarks::BookmarkModel* model, | 224 void BookmarkNodeAdded(bookmarks::BookmarkModel* model, |
218 const bookmarks::BookmarkNode* parent, | 225 const bookmarks::BookmarkNode* parent, |
219 int index) override; | 226 int index) override; |
220 void BookmarkNodeRemoved(bookmarks::BookmarkModel* model, | 227 void BookmarkNodeRemoved(bookmarks::BookmarkModel* model, |
221 const bookmarks::BookmarkNode* parent, | 228 const bookmarks::BookmarkNode* parent, |
222 int old_index, | 229 int old_index, |
223 const bookmarks::BookmarkNode* node, | 230 const bookmarks::BookmarkNode* node, |
224 const std::set<GURL>& removed_urls) override; | 231 const std::set<GURL>& removed_urls) override; |
225 void BookmarkNodeChanged(bookmarks::BookmarkModel* model, | 232 void BookmarkNodeChanged(bookmarks::BookmarkModel* model, |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
267 // Steps for marking an offline page for deletion that can be undone. | 274 // Steps for marking an offline page for deletion that can be undone. |
268 void OnMarkPageForDeletionDone(const OfflinePageItem& offline_page_item, | 275 void OnMarkPageForDeletionDone(const OfflinePageItem& offline_page_item, |
269 const DeletePageCallback& callback, | 276 const DeletePageCallback& callback, |
270 bool success); | 277 bool success); |
271 void FinalizePageDeletion(); | 278 void FinalizePageDeletion(); |
272 | 279 |
273 // Steps for undoing an offline page deletion. | 280 // Steps for undoing an offline page deletion. |
274 void UndoPageDeletion(int64 bookmark_id); | 281 void UndoPageDeletion(int64 bookmark_id); |
275 void OnUndoOfflinePageDone(const OfflinePageItem& offline_page, bool success); | 282 void OnUndoOfflinePageDone(const OfflinePageItem& offline_page, bool success); |
276 | 283 |
277 // Callbacks for checking if offline pages are missing archive files. | 284 // Callbacks and steps for checking offline page metadata consistency. |
| 285 // |
| 286 // Checks that all of the offline pages have corresponding offline copies. |
| 287 // If a page is discovered to be missing an offline copy, its offline page |
| 288 // metadata will be removed and |OfflinePageDeleted| will be sent to model |
| 289 // observers. |
| 290 void CheckForExternalFileDeletion(DeletePageResult); |
278 void OnFindPagesMissingArchiveFile( | 291 void OnFindPagesMissingArchiveFile( |
279 const std::vector<int64>* pages_missing_archive_file); | 292 const std::vector<int64>* pages_missing_archive_file); |
280 void OnRemoveOfflinePagesMissingArchiveFileDone( | 293 void OnRemoveOfflinePagesMissingArchiveFileDone( |
281 const std::vector<int64>& bookmark_ids, | 294 const std::vector<int64>& bookmark_ids, |
282 OfflinePageModel::DeletePageResult result); | 295 OfflinePageModel::DeletePageResult result); |
283 | 296 |
284 // Steps for clearing all. | 297 // Steps for clearing all. |
285 void OnRemoveAllFilesDoneForClearAll(const base::Closure& callback, | 298 void OnRemoveAllFilesDoneForClearAll(const base::Closure& callback, |
286 DeletePageResult result); | 299 DeletePageResult result); |
287 void OnResetStoreDoneForClearAll(const base::Closure& callback, bool success); | 300 void OnResetStoreDoneForClearAll(const base::Closure& callback, bool success); |
288 void OnReloadStoreDoneForClearAll( | 301 void OnReloadStoreDoneForClearAll( |
289 const base::Closure& callback, | 302 const base::Closure& callback, |
290 OfflinePageMetadataStore::LoadStatus load_status, | 303 OfflinePageMetadataStore::LoadStatus load_status, |
291 const std::vector<OfflinePageItem>& offline_pages); | 304 const std::vector<OfflinePageItem>& offline_pages); |
292 | 305 |
293 void CacheLoadedData(const std::vector<OfflinePageItem>& offline_pages); | 306 void CacheLoadedData(const std::vector<OfflinePageItem>& offline_pages); |
294 | 307 |
295 // Persistent store for offline page metadata. | 308 // Persistent store for offline page metadata. |
296 scoped_ptr<OfflinePageMetadataStore> store_; | 309 scoped_ptr<OfflinePageMetadataStore> store_; |
297 | 310 |
298 // Location where all of the archive files will be stored. | 311 // Location where all of the archive files will be stored. |
299 base::FilePath archives_dir_; | 312 base::FilePath archives_dir_; |
300 | 313 |
301 // The observers. | 314 // The observers. |
302 base::ObserverList<Observer> observers_; | 315 base::ObserverList<Observer> observers_; |
303 | 316 |
304 bool is_loaded_; | 317 bool is_loaded_; |
305 | 318 |
| 319 // Whether a metadata check is going on right now. |
| 320 bool metadata_check_in_progress_; |
| 321 |
306 // In memory copy of the offline page metadata, keyed by bookmark IDs. | 322 // In memory copy of the offline page metadata, keyed by bookmark IDs. |
307 std::map<int64, OfflinePageItem> offline_pages_; | 323 std::map<int64, OfflinePageItem> offline_pages_; |
308 | 324 |
309 scoped_refptr<base::SequencedTaskRunner> task_runner_; | 325 scoped_refptr<base::SequencedTaskRunner> task_runner_; |
310 | 326 |
311 // Pending archivers owned by this model. | 327 // Pending archivers owned by this model. |
312 PendingArchivers pending_archivers_; | 328 PendingArchivers pending_archivers_; |
313 | 329 |
314 // Delayed tasks that should be invoked after the loading is done. | 330 // Delayed tasks that should be invoked after the loading is done. |
315 std::vector<base::Closure> delayed_tasks_; | 331 std::vector<base::Closure> delayed_tasks_; |
316 | 332 |
| 333 bookmarks::BookmarkModel* bookmarks_model_; |
| 334 |
317 ScopedObserver<bookmarks::BookmarkModel, bookmarks::BookmarkModelObserver> | 335 ScopedObserver<bookmarks::BookmarkModel, bookmarks::BookmarkModelObserver> |
318 scoped_observer_; | 336 scoped_observer_; |
319 | 337 |
320 base::WeakPtrFactory<OfflinePageModel> weak_ptr_factory_; | 338 base::WeakPtrFactory<OfflinePageModel> weak_ptr_factory_; |
321 | 339 |
322 DISALLOW_COPY_AND_ASSIGN(OfflinePageModel); | 340 DISALLOW_COPY_AND_ASSIGN(OfflinePageModel); |
323 }; | 341 }; |
324 | 342 |
325 } // namespace offline_pages | 343 } // namespace offline_pages |
326 | 344 |
327 #endif // COMPONENTS_OFFLINE_PAGES_OFFLINE_PAGE_MODEL_H_ | 345 #endif // COMPONENTS_OFFLINE_PAGES_OFFLINE_PAGE_MODEL_H_ |
OLD | NEW |