Chromium Code Reviews| 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 |