OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/android/bookmarks/partner_bookmarks_shim.h" | 5 #include "chrome/browser/android/bookmarks/partner_bookmarks_shim.h" |
6 | 6 |
7 #include "base/lazy_instance.h" | 7 #include "base/lazy_instance.h" |
8 #include "base/prefs/pref_service.h" | 8 #include "base/prefs/pref_service.h" |
9 #include "base/values.h" | 9 #include "base/values.h" |
10 #include "chrome/browser/bookmarks/bookmark_model.h" | 10 #include "chrome/browser/bookmarks/bookmark_model.h" |
(...skipping 24 matching lines...) Expand all Loading... |
35 LAZY_INSTANCE_INITIALIZER; | 35 LAZY_INSTANCE_INITIALIZER; |
36 | 36 |
37 const void* kPartnerBookmarksShimUserDataKey = | 37 const void* kPartnerBookmarksShimUserDataKey = |
38 &kPartnerBookmarksShimUserDataKey; | 38 &kPartnerBookmarksShimUserDataKey; |
39 | 39 |
40 // Dictionary keys for entries in the kPartnerBookmarksMapping pref. | 40 // Dictionary keys for entries in the kPartnerBookmarksMapping pref. |
41 static const char kMappingUrl[] = "url"; | 41 static const char kMappingUrl[] = "url"; |
42 static const char kMappingProviderTitle[] = "provider_title"; | 42 static const char kMappingProviderTitle[] = "provider_title"; |
43 static const char kMappingTitle[] = "mapped_title"; | 43 static const char kMappingTitle[] = "mapped_title"; |
44 | 44 |
| 45 static bool g_disable_partner_bookmarks_editing = false; |
| 46 |
45 } // namespace | 47 } // namespace |
46 | 48 |
47 // static | 49 // static |
48 PartnerBookmarksShim* PartnerBookmarksShim::BuildForBrowserContext( | 50 PartnerBookmarksShim* PartnerBookmarksShim::BuildForBrowserContext( |
49 content::BrowserContext* browser_context) { | 51 content::BrowserContext* browser_context) { |
50 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 52 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
51 | 53 |
52 PartnerBookmarksShim* data = | 54 PartnerBookmarksShim* data = |
53 reinterpret_cast<PartnerBookmarksShim*>( | 55 reinterpret_cast<PartnerBookmarksShim*>( |
54 browser_context->GetUserData(kPartnerBookmarksShimUserDataKey)); | 56 browser_context->GetUserData(kPartnerBookmarksShimUserDataKey)); |
55 if (data) | 57 if (data) |
56 return data; | 58 return data; |
57 | 59 |
58 data = new PartnerBookmarksShim( | 60 data = new PartnerBookmarksShim( |
59 Profile::FromBrowserContext(browser_context)->GetPrefs()); | 61 Profile::FromBrowserContext(browser_context)->GetPrefs()); |
60 browser_context->SetUserData(kPartnerBookmarksShimUserDataKey, data); | 62 browser_context->SetUserData(kPartnerBookmarksShimUserDataKey, data); |
61 data->ReloadNodeMapping(); | 63 data->ReloadNodeMapping(); |
62 return data; | 64 return data; |
63 } | 65 } |
64 | 66 |
65 // static | 67 // static |
66 void PartnerBookmarksShim::RegisterProfilePrefs( | 68 void PartnerBookmarksShim::RegisterProfilePrefs( |
67 user_prefs::PrefRegistrySyncable* registry) { | 69 user_prefs::PrefRegistrySyncable* registry) { |
68 registry->RegisterListPref( | 70 registry->RegisterListPref( |
69 prefs::kPartnerBookmarkMappings, | 71 prefs::kPartnerBookmarkMappings, |
70 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); | 72 user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); |
71 } | 73 } |
72 | 74 |
| 75 // static |
| 76 void PartnerBookmarksShim::DisablePartnerBookmarksEditing() { |
| 77 g_disable_partner_bookmarks_editing = true; |
| 78 } |
| 79 |
73 bool PartnerBookmarksShim::IsLoaded() const { | 80 bool PartnerBookmarksShim::IsLoaded() const { |
74 return g_partner_model_keeper.Get().loaded; | 81 return g_partner_model_keeper.Get().loaded; |
75 } | 82 } |
76 | 83 |
77 bool PartnerBookmarksShim::HasPartnerBookmarks() const { | 84 bool PartnerBookmarksShim::HasPartnerBookmarks() const { |
78 DCHECK(IsLoaded()); | 85 DCHECK(IsLoaded()); |
79 return g_partner_model_keeper.Get().partner_bookmarks_root.get() != NULL; | 86 return g_partner_model_keeper.Get().partner_bookmarks_root.get() != NULL; |
80 } | 87 } |
81 | 88 |
82 bool PartnerBookmarksShim::IsReachable(const BookmarkNode* node) const { | 89 bool PartnerBookmarksShim::IsReachable(const BookmarkNode* node) const { |
83 DCHECK(IsPartnerBookmark(node)); | 90 DCHECK(IsPartnerBookmark(node)); |
84 if (!HasPartnerBookmarks()) | 91 if (!HasPartnerBookmarks()) |
85 return false; | 92 return false; |
86 for (const BookmarkNode* i = node; i != NULL; i = i->parent()) { | 93 if (!g_disable_partner_bookmarks_editing) { |
87 const NodeRenamingMapKey key(i->url(), i->GetTitle()); | 94 for (const BookmarkNode* i = node; i != NULL; i = i->parent()) { |
88 NodeRenamingMap::const_iterator remap = node_rename_remove_map_.find(key); | 95 const NodeRenamingMapKey key(i->url(), i->GetTitle()); |
89 if (remap != node_rename_remove_map_.end() && remap->second.empty()) | 96 NodeRenamingMap::const_iterator remap = node_rename_remove_map_.find(key); |
90 return false; | 97 if (remap != node_rename_remove_map_.end() && remap->second.empty()) |
| 98 return false; |
| 99 } |
91 } | 100 } |
92 return true; | 101 return true; |
93 } | 102 } |
94 | 103 |
| 104 bool PartnerBookmarksShim::IsEditable(const BookmarkNode* node) const { |
| 105 DCHECK(IsPartnerBookmark(node)); |
| 106 if (!HasPartnerBookmarks()) |
| 107 return false; |
| 108 if (g_disable_partner_bookmarks_editing) |
| 109 return false; |
| 110 return true; |
| 111 } |
| 112 |
95 void PartnerBookmarksShim::RemoveBookmark(const BookmarkNode* node) { | 113 void PartnerBookmarksShim::RemoveBookmark(const BookmarkNode* node) { |
| 114 DCHECK(IsEditable(node)); |
96 RenameBookmark(node, base::string16()); | 115 RenameBookmark(node, base::string16()); |
97 } | 116 } |
98 | 117 |
99 void PartnerBookmarksShim::RenameBookmark(const BookmarkNode* node, | 118 void PartnerBookmarksShim::RenameBookmark(const BookmarkNode* node, |
100 const base::string16& title) { | 119 const base::string16& title) { |
| 120 DCHECK(IsEditable(node)); |
101 const NodeRenamingMapKey key(node->url(), node->GetTitle()); | 121 const NodeRenamingMapKey key(node->url(), node->GetTitle()); |
102 node_rename_remove_map_[key] = title; | 122 node_rename_remove_map_[key] = title; |
103 SaveNodeMapping(); | 123 SaveNodeMapping(); |
104 FOR_EACH_OBSERVER(PartnerBookmarksShim::Observer, observers_, | 124 FOR_EACH_OBSERVER(PartnerBookmarksShim::Observer, observers_, |
105 PartnerShimChanged(this)); | 125 PartnerShimChanged(this)); |
106 } | 126 } |
107 | 127 |
108 void PartnerBookmarksShim::AddObserver( | 128 void PartnerBookmarksShim::AddObserver( |
109 PartnerBookmarksShim::Observer* observer) { | 129 PartnerBookmarksShim::Observer* observer) { |
110 observers_.AddObserver(observer); | 130 observers_.AddObserver(observer); |
111 } | 131 } |
112 | 132 |
113 void PartnerBookmarksShim::RemoveObserver( | 133 void PartnerBookmarksShim::RemoveObserver( |
114 PartnerBookmarksShim::Observer* observer) { | 134 PartnerBookmarksShim::Observer* observer) { |
115 observers_.RemoveObserver(observer); | 135 observers_.RemoveObserver(observer); |
116 } | 136 } |
117 | 137 |
118 const BookmarkNode* PartnerBookmarksShim::GetNodeByID(int64 id) const { | 138 const BookmarkNode* PartnerBookmarksShim::GetNodeByID(int64 id) const { |
119 DCHECK(IsLoaded()); | 139 DCHECK(IsLoaded()); |
120 if (!HasPartnerBookmarks()) | 140 if (!HasPartnerBookmarks()) |
121 return NULL; | 141 return NULL; |
122 return GetNodeByID(GetPartnerBookmarksRoot(), id); | 142 return GetNodeByID(GetPartnerBookmarksRoot(), id); |
123 } | 143 } |
124 | 144 |
125 base::string16 PartnerBookmarksShim::GetTitle(const BookmarkNode* node) const { | 145 base::string16 PartnerBookmarksShim::GetTitle(const BookmarkNode* node) const { |
126 DCHECK(node); | 146 DCHECK(node); |
127 DCHECK(IsPartnerBookmark(node)); | 147 DCHECK(IsPartnerBookmark(node)); |
128 | 148 |
129 const NodeRenamingMapKey key(node->url(), node->GetTitle()); | 149 if (!g_disable_partner_bookmarks_editing) { |
130 NodeRenamingMap::const_iterator i = node_rename_remove_map_.find(key); | 150 const NodeRenamingMapKey key(node->url(), node->GetTitle()); |
131 if (i != node_rename_remove_map_.end()) | 151 NodeRenamingMap::const_iterator i = node_rename_remove_map_.find(key); |
132 return i->second; | 152 if (i != node_rename_remove_map_.end()) |
| 153 return i->second; |
| 154 } |
133 | 155 |
134 return node->GetTitle(); | 156 return node->GetTitle(); |
135 } | 157 } |
136 | 158 |
137 bool PartnerBookmarksShim::IsPartnerBookmark(const BookmarkNode* node) const { | 159 bool PartnerBookmarksShim::IsPartnerBookmark(const BookmarkNode* node) const { |
138 DCHECK(IsLoaded()); | 160 DCHECK(IsLoaded()); |
139 if (!HasPartnerBookmarks()) | 161 if (!HasPartnerBookmarks()) |
140 return false; | 162 return false; |
141 const BookmarkNode* parent = node; | 163 const BookmarkNode* parent = node; |
142 while (parent) { | 164 while (parent) { |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
177 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 199 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
178 browser_context->SetUserData(kPartnerBookmarksShimUserDataKey, 0); | 200 browser_context->SetUserData(kPartnerBookmarksShimUserDataKey, 0); |
179 } | 201 } |
180 | 202 |
181 // static | 203 // static |
182 void PartnerBookmarksShim::ClearPartnerModelForTesting() { | 204 void PartnerBookmarksShim::ClearPartnerModelForTesting() { |
183 g_partner_model_keeper.Get().loaded = false; | 205 g_partner_model_keeper.Get().loaded = false; |
184 g_partner_model_keeper.Get().partner_bookmarks_root.reset(0); | 206 g_partner_model_keeper.Get().partner_bookmarks_root.reset(0); |
185 } | 207 } |
186 | 208 |
| 209 // static |
| 210 void PartnerBookmarksShim::EnablePartnerBookmarksEditing() { |
| 211 g_disable_partner_bookmarks_editing = false; |
| 212 } |
| 213 |
187 PartnerBookmarksShim::PartnerBookmarksShim(PrefService* prefs) | 214 PartnerBookmarksShim::PartnerBookmarksShim(PrefService* prefs) |
188 : prefs_(prefs), | 215 : prefs_(prefs), |
189 observers_( | 216 observers_( |
190 ObserverList<PartnerBookmarksShim::Observer>::NOTIFY_EXISTING_ONLY) { | 217 ObserverList<PartnerBookmarksShim::Observer>::NOTIFY_EXISTING_ONLY) { |
191 } | 218 } |
192 | 219 |
193 PartnerBookmarksShim::~PartnerBookmarksShim() { | 220 PartnerBookmarksShim::~PartnerBookmarksShim() { |
194 FOR_EACH_OBSERVER(PartnerBookmarksShim::Observer, observers_, | 221 FOR_EACH_OBSERVER(PartnerBookmarksShim::Observer, observers_, |
195 ShimBeingDeleted(this)); | 222 ShimBeingDeleted(this)); |
196 } | 223 } |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
252 i != node_rename_remove_map_.end(); | 279 i != node_rename_remove_map_.end(); |
253 ++i) { | 280 ++i) { |
254 base::DictionaryValue* dict = new base::DictionaryValue(); | 281 base::DictionaryValue* dict = new base::DictionaryValue(); |
255 dict->SetString(kMappingUrl, i->first.url().spec()); | 282 dict->SetString(kMappingUrl, i->first.url().spec()); |
256 dict->SetString(kMappingProviderTitle, i->first.provider_title()); | 283 dict->SetString(kMappingProviderTitle, i->first.provider_title()); |
257 dict->SetString(kMappingTitle, i->second); | 284 dict->SetString(kMappingTitle, i->second); |
258 list.Append(dict); | 285 list.Append(dict); |
259 } | 286 } |
260 prefs_->Set(prefs::kPartnerBookmarkMappings, list); | 287 prefs_->Set(prefs::kPartnerBookmarkMappings, list); |
261 } | 288 } |
OLD | NEW |