| OLD | NEW |
| (Empty) |
| 1 // Copyright 2016 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 #include "components/offline_pages/offline_page_bookmark_bridge.h" | |
| 6 | |
| 7 #include "base/bind.h" | |
| 8 #include "base/logging.h" | |
| 9 #include "base/strings/string_number_conversions.h" | |
| 10 #include "components/bookmarks/browser/base_bookmark_model_observer.h" | |
| 11 #include "components/bookmarks/browser/bookmark_node.h" | |
| 12 #include "components/offline_pages/offline_page_item.h" | |
| 13 #include "components/offline_pages/offline_page_model.h" | |
| 14 | |
| 15 namespace offline_pages { | |
| 16 | |
| 17 namespace { | |
| 18 void EmptyDeleteCallback(OfflinePageModel::DeletePageResult /* result */) {} | |
| 19 } | |
| 20 | |
| 21 OfflinePageBookmarkBridge::OfflinePageBookmarkBridge( | |
| 22 OfflinePageModel* model, | |
| 23 bookmarks::BookmarkModel* bookmark_model) | |
| 24 : offline_model_(model), bookmark_model_(bookmark_model) {} | |
| 25 | |
| 26 void OfflinePageBookmarkBridge::BookmarkModelChanged() {} | |
| 27 | |
| 28 void OfflinePageBookmarkBridge::BookmarkNodeAdded( | |
| 29 bookmarks::BookmarkModel* model, | |
| 30 const bookmarks::BookmarkNode* parent, | |
| 31 int index) { | |
| 32 DCHECK_EQ(model, bookmark_model_); | |
| 33 const bookmarks::BookmarkNode* node = parent->GetChild(index); | |
| 34 DCHECK(node); | |
| 35 ClientId client_id(BOOKMARK_NAMESPACE, base::Int64ToString(node->id())); | |
| 36 std::vector<int64_t> ids = offline_model_->GetOfflineIdsForClientId( | |
| 37 client_id, true /* include_deleted */); | |
| 38 | |
| 39 for (const auto& id : ids) | |
| 40 offline_model_->UndoPageDeletion(id); | |
| 41 } | |
| 42 | |
| 43 void OfflinePageBookmarkBridge::BookmarkNodeRemoved( | |
| 44 bookmarks::BookmarkModel* model, | |
| 45 const bookmarks::BookmarkNode* parent, | |
| 46 int old_index, | |
| 47 const bookmarks::BookmarkNode* node, | |
| 48 const std::set<GURL>& removed_urls) { | |
| 49 DCHECK_EQ(model, bookmark_model_); | |
| 50 ClientId client_id; | |
| 51 client_id.name_space = BOOKMARK_NAMESPACE; | |
| 52 client_id.id = base::Int64ToString(node->id()); | |
| 53 std::vector<int64_t> ids = | |
| 54 offline_model_->GetOfflineIdsForClientId(client_id); | |
| 55 offline_model_->MarkPagesForDeletion(ids, base::Bind(&EmptyDeleteCallback)); | |
| 56 } | |
| 57 | |
| 58 void OfflinePageBookmarkBridge::BookmarkNodeChanged( | |
| 59 bookmarks::BookmarkModel* model, | |
| 60 const bookmarks::BookmarkNode* node) { | |
| 61 DCHECK_EQ(model, bookmark_model_); | |
| 62 // BookmarkNodeChanged could be triggered if title or URL gets changed. If | |
| 63 // the latter, we need to invalidate the offline copy. | |
| 64 ClientId client_id; | |
| 65 client_id.name_space = BOOKMARK_NAMESPACE; | |
| 66 client_id.id = base::Int64ToString(node->id()); | |
| 67 std::vector<int64_t> ids = | |
| 68 offline_model_->GetOfflineIdsForClientId(client_id); | |
| 69 std::vector<int64_t> ids_to_delete; | |
| 70 for (const auto& id : ids) { | |
| 71 const OfflinePageItem* page = offline_model_->GetPageByOfflineId(id); | |
| 72 if (page != nullptr && page->url != node->url()) | |
| 73 ids_to_delete.push_back(id); | |
| 74 } | |
| 75 offline_model_->DeletePagesByOfflineId(ids_to_delete, | |
| 76 base::Bind(&EmptyDeleteCallback)); | |
| 77 } | |
| 78 | |
| 79 void OfflinePageBookmarkBridge::BookmarkModelBeingDeleted( | |
| 80 bookmarks::BookmarkModel* model) { | |
| 81 DCHECK_EQ(model, bookmark_model_); | |
| 82 delete this; | |
| 83 } | |
| 84 | |
| 85 } // namespace offline_pages | |
| OLD | NEW |