OLD | NEW |
1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 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 #include "chrome/browser/sync/glue/bookmark_change_processor.h" | 5 #include "chrome/browser/sync/glue/bookmark_change_processor.h" |
6 | 6 |
7 #include <map> | 7 #include <map> |
8 #include <stack> | 8 #include <stack> |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
(...skipping 827 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
838 BookmarkChangeProcessor::GetBookmarkMetaInfo( | 838 BookmarkChangeProcessor::GetBookmarkMetaInfo( |
839 const syncer::BaseNode* sync_node) { | 839 const syncer::BaseNode* sync_node) { |
840 const sync_pb::BookmarkSpecifics& specifics = | 840 const sync_pb::BookmarkSpecifics& specifics = |
841 sync_node->GetBookmarkSpecifics(); | 841 sync_node->GetBookmarkSpecifics(); |
842 scoped_ptr<BookmarkNode::MetaInfoMap> meta_info_map( | 842 scoped_ptr<BookmarkNode::MetaInfoMap> meta_info_map( |
843 new BookmarkNode::MetaInfoMap); | 843 new BookmarkNode::MetaInfoMap); |
844 for (int i = 0; i < specifics.meta_info_size(); ++i) { | 844 for (int i = 0; i < specifics.meta_info_size(); ++i) { |
845 (*meta_info_map)[specifics.meta_info(i).key()] = | 845 (*meta_info_map)[specifics.meta_info(i).key()] = |
846 specifics.meta_info(i).value(); | 846 specifics.meta_info(i).value(); |
847 } | 847 } |
| 848 // Verifies that all entries had unique keys. |
| 849 DCHECK_EQ(static_cast<size_t>(specifics.meta_info_size()), |
| 850 meta_info_map->size()); |
848 return meta_info_map.Pass(); | 851 return meta_info_map.Pass(); |
849 } | 852 } |
850 | 853 |
851 // static | 854 // static |
852 void BookmarkChangeProcessor::SetSyncNodeMetaInfo( | 855 void BookmarkChangeProcessor::SetSyncNodeMetaInfo( |
853 const BookmarkNode* node, | 856 const BookmarkNode* node, |
854 syncer::WriteNode* sync_node) { | 857 syncer::WriteNode* sync_node) { |
855 sync_pb::BookmarkSpecifics specifics = sync_node->GetBookmarkSpecifics(); | 858 sync_pb::BookmarkSpecifics specifics = sync_node->GetBookmarkSpecifics(); |
| 859 const BookmarkNode::MetaInfoMap* meta_info_map = node->GetMetaInfoMap(); |
| 860 |
| 861 // Compare specifics meta info to node meta info before making the change. |
| 862 // Please note that the original specifics meta info is unordered while |
| 863 // meta_info_map is ordered by key. Setting the meta info blindly into |
| 864 // the specifics might cause an unnecessary change. |
| 865 size_t size = meta_info_map ? meta_info_map->size() : 0; |
| 866 if (static_cast<size_t>(specifics.meta_info_size()) == size) { |
| 867 size_t index = 0; |
| 868 for (; index < size; index++) { |
| 869 const sync_pb::MetaInfo& meta_info = specifics.meta_info(index); |
| 870 BookmarkNode::MetaInfoMap::const_iterator it = |
| 871 meta_info_map->find(meta_info.key()); |
| 872 if (it == meta_info_map->end() || it->second != meta_info.value()) { |
| 873 // One of original meta info entries is missing in |meta_info_map| or |
| 874 // different. |
| 875 break; |
| 876 } |
| 877 } |
| 878 if (index == size) { |
| 879 // The original meta info from the sync model is already equivalent to |
| 880 // |meta_info_map|. |
| 881 return; |
| 882 } |
| 883 } |
| 884 |
| 885 // Clear and reset meta info in bookmark specifics. |
856 specifics.clear_meta_info(); | 886 specifics.clear_meta_info(); |
857 const BookmarkNode::MetaInfoMap* meta_info_map = node->GetMetaInfoMap(); | |
858 if (meta_info_map) { | 887 if (meta_info_map) { |
859 for (BookmarkNode::MetaInfoMap::const_iterator it = meta_info_map->begin(); | 888 for (BookmarkNode::MetaInfoMap::const_iterator it = meta_info_map->begin(); |
860 it != meta_info_map->end(); ++it) { | 889 it != meta_info_map->end(); ++it) { |
861 sync_pb::MetaInfo* meta_info = specifics.add_meta_info(); | 890 sync_pb::MetaInfo* meta_info = specifics.add_meta_info(); |
862 meta_info->set_key(it->first); | 891 meta_info->set_key(it->first); |
863 meta_info->set_value(it->second); | 892 meta_info->set_value(it->second); |
864 } | 893 } |
865 } | 894 } |
| 895 |
866 sync_node->SetBookmarkSpecifics(specifics); | 896 sync_node->SetBookmarkSpecifics(specifics); |
867 } | 897 } |
868 | 898 |
869 // static | 899 // static |
870 void BookmarkChangeProcessor::ApplyBookmarkFavicon( | 900 void BookmarkChangeProcessor::ApplyBookmarkFavicon( |
871 const BookmarkNode* bookmark_node, | 901 const BookmarkNode* bookmark_node, |
872 Profile* profile, | 902 Profile* profile, |
873 const GURL& icon_url, | 903 const GURL& icon_url, |
874 const scoped_refptr<base::RefCountedMemory>& bitmap_data) { | 904 const scoped_refptr<base::RefCountedMemory>& bitmap_data) { |
875 HistoryService* history = HistoryServiceFactory::GetForProfile( | 905 HistoryService* history = HistoryServiceFactory::GetForProfile( |
(...skipping 30 matching lines...) Expand all Loading... |
906 updated_specifics.set_icon_url(bookmark_node->icon_url().spec()); | 936 updated_specifics.set_icon_url(bookmark_node->icon_url().spec()); |
907 sync_node->SetBookmarkSpecifics(updated_specifics); | 937 sync_node->SetBookmarkSpecifics(updated_specifics); |
908 } | 938 } |
909 } | 939 } |
910 | 940 |
911 bool BookmarkChangeProcessor::CanSyncNode(const BookmarkNode* node) { | 941 bool BookmarkChangeProcessor::CanSyncNode(const BookmarkNode* node) { |
912 return bookmark_model_->client()->CanSyncNode(node); | 942 return bookmark_model_->client()->CanSyncNode(node); |
913 } | 943 } |
914 | 944 |
915 } // namespace browser_sync | 945 } // namespace browser_sync |
OLD | NEW |