| 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 |