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