Chromium Code Reviews| 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/bookmarks_bridge.h" | 5 #include "chrome/browser/android/bookmarks/bookmarks_bridge.h" |
| 6 | 6 |
| 7 #include "base/android/jni_array.h" | 7 #include "base/android/jni_array.h" |
| 8 #include "base/android/jni_string.h" | 8 #include "base/android/jni_string.h" |
| 9 #include "base/containers/stack_container.h" | 9 #include "base/containers/stack_container.h" |
| 10 #include "base/i18n/string_compare.h" | 10 #include "base/i18n/string_compare.h" |
| (...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 203 } | 203 } |
| 204 } | 204 } |
| 205 } | 205 } |
| 206 | 206 |
| 207 void BookmarksBridge::GetTopLevelFolderParentIDs(JNIEnv* env, | 207 void BookmarksBridge::GetTopLevelFolderParentIDs(JNIEnv* env, |
| 208 jobject obj, | 208 jobject obj, |
| 209 jobject j_result_obj) { | 209 jobject j_result_obj) { |
| 210 Java_BookmarksBridge_addToBookmarkIdList( | 210 Java_BookmarksBridge_addToBookmarkIdList( |
| 211 env, j_result_obj, bookmark_model_->root_node()->id(), | 211 env, j_result_obj, bookmark_model_->root_node()->id(), |
| 212 GetBookmarkType(bookmark_model_->root_node())); | 212 GetBookmarkType(bookmark_model_->root_node())); |
| 213 Java_BookmarksBridge_addToBookmarkIdList( | |
| 214 env, j_result_obj, bookmark_model_->mobile_node()->id(), | |
| 215 GetBookmarkType(bookmark_model_->mobile_node())); | |
| 216 Java_BookmarksBridge_addToBookmarkIdList( | |
| 217 env, j_result_obj, bookmark_model_->other_node()->id(), | |
| 218 GetBookmarkType(bookmark_model_->other_node())); | |
| 219 } | 213 } |
| 220 | 214 |
| 221 void BookmarksBridge::GetTopLevelFolderIDs(JNIEnv* env, | 215 void BookmarksBridge::GetTopLevelFolderIDs(JNIEnv* env, |
| 222 jobject obj, | 216 jobject obj, |
| 223 jboolean get_special, | 217 jboolean get_special, |
| 224 jboolean get_normal, | 218 jboolean get_normal, |
| 225 jobject j_result_obj) { | 219 jobject j_result_obj) { |
| 226 DCHECK(IsLoaded()); | 220 DCHECK(IsLoaded()); |
| 227 std::vector<const BookmarkNode*> top_level_folders; | 221 std::vector<const BookmarkNode*> top_level_folders; |
| 228 | 222 |
| 229 if (get_special) { | 223 if (get_special) { |
| 230 if (client_->managed_node() && | 224 if (client_->managed_node() && |
| 231 client_->managed_node()->child_count() > 0) { | 225 client_->managed_node()->child_count() > 0) { |
| 232 top_level_folders.push_back(client_->managed_node()); | 226 top_level_folders.push_back(client_->managed_node()); |
| 233 } | 227 } |
| 234 if (partner_bookmarks_shim_->HasPartnerBookmarks()) { | 228 if (partner_bookmarks_shim_->HasPartnerBookmarks()) { |
| 235 top_level_folders.push_back( | 229 top_level_folders.push_back( |
| 236 partner_bookmarks_shim_->GetPartnerBookmarksRoot()); | 230 partner_bookmarks_shim_->GetPartnerBookmarksRoot()); |
| 237 } | 231 } |
| 238 } | 232 } |
| 239 std::size_t special_count = top_level_folders.size(); | 233 std::size_t special_count = top_level_folders.size(); |
| 240 | 234 |
| 241 if (get_normal) { | 235 if (get_normal) { |
| 242 DCHECK_EQ(bookmark_model_->root_node()->child_count(), 4); | 236 DCHECK_EQ(bookmark_model_->root_node()->child_count(), 4); |
| 243 | 237 |
| 244 top_level_folders.push_back(bookmark_model_->bookmark_bar_node()); | 238 const BookmarkNode* bookmark_bar_node = |
| 239 bookmark_model_->bookmark_bar_node(); | |
| 240 for (int i = 0; i < bookmark_bar_node->child_count(); ++i) { | |
| 241 const BookmarkNode* node = bookmark_bar_node->GetChild(i); | |
| 242 if (node->is_folder()) { | |
| 243 top_level_folders.push_back(node); | |
| 244 } | |
| 245 } | |
| 245 | 246 |
| 246 const BookmarkNode* mobile_node = bookmark_model_->mobile_node(); | 247 const BookmarkNode* mobile_node = bookmark_model_->mobile_node(); |
| 247 for (int i = 0; i < mobile_node->child_count(); ++i) { | 248 for (int i = 0; i < mobile_node->child_count(); ++i) { |
| 248 const BookmarkNode* node = mobile_node->GetChild(i); | 249 const BookmarkNode* node = mobile_node->GetChild(i); |
| 249 if (node->is_folder()) { | 250 if (node->is_folder()) { |
| 250 top_level_folders.push_back(node); | 251 top_level_folders.push_back(node); |
| 251 } | 252 } |
| 252 } | 253 } |
| 253 | 254 |
| 254 const BookmarkNode* other_node = bookmark_model_->other_node(); | 255 const BookmarkNode* other_node = bookmark_model_->other_node(); |
| (...skipping 12 matching lines...) Expand all Loading... | |
| 267 | 268 |
| 268 for (std::vector<const BookmarkNode*>::const_iterator it = | 269 for (std::vector<const BookmarkNode*>::const_iterator it = |
| 269 top_level_folders.begin(); it != top_level_folders.end(); ++it) { | 270 top_level_folders.begin(); it != top_level_folders.end(); ++it) { |
| 270 Java_BookmarksBridge_addToBookmarkIdList(env, | 271 Java_BookmarksBridge_addToBookmarkIdList(env, |
| 271 j_result_obj, | 272 j_result_obj, |
| 272 (*it)->id(), | 273 (*it)->id(), |
| 273 GetBookmarkType(*it)); | 274 GetBookmarkType(*it)); |
| 274 } | 275 } |
| 275 } | 276 } |
| 276 | 277 |
| 277 void BookmarksBridge::GetUncategorizedBookmarkIDs(JNIEnv* env, | |
| 278 jobject obj, | |
| 279 jobject j_result_obj) { | |
| 280 const BookmarkNode* mobile_node = bookmark_model_->mobile_node(); | |
| 281 for (int i = 0; i < mobile_node->child_count(); ++i) { | |
| 282 const BookmarkNode* node = mobile_node->GetChild(i); | |
| 283 if (!node->is_folder()) { | |
| 284 Java_BookmarksBridge_addToBookmarkIdList(env, | |
| 285 j_result_obj, | |
| 286 node->id(), | |
| 287 GetBookmarkType(node)); | |
| 288 } | |
| 289 } | |
| 290 | |
| 291 const BookmarkNode* other_node = bookmark_model_->other_node(); | |
| 292 for (int i = 0; i < other_node->child_count(); ++i) { | |
| 293 const BookmarkNode* node = other_node->GetChild(i); | |
| 294 if (!node->is_folder()) { | |
| 295 Java_BookmarksBridge_addToBookmarkIdList(env, | |
| 296 j_result_obj, | |
| 297 node->id(), | |
| 298 GetBookmarkType(node)); | |
| 299 } | |
| 300 } | |
| 301 } | |
| 302 | |
| 303 void BookmarksBridge::GetAllFoldersWithDepths(JNIEnv* env, | 278 void BookmarksBridge::GetAllFoldersWithDepths(JNIEnv* env, |
| 304 jobject obj, | 279 jobject obj, |
| 305 jobject j_folders_obj, | 280 jobject j_folders_obj, |
| 306 jobject j_depths_obj) { | 281 jobject j_depths_obj) { |
| 307 DCHECK(IsLoaded()); | 282 DCHECK(IsLoaded()); |
| 308 | 283 |
| 309 const BookmarkNode* desktop = bookmark_model_->bookmark_bar_node(); | |
| 310 const BookmarkNode* mobile = bookmark_model_->mobile_node(); | |
| 311 const BookmarkNode* other = bookmark_model_->other_node(); | |
| 312 | |
| 313 scoped_ptr<icu::Collator> collator = GetICUCollator(); | 284 scoped_ptr<icu::Collator> collator = GetICUCollator(); |
| 314 | 285 |
| 315 // Vector to temporarily contain all child bookmarks at same level for sorting | 286 // Vector to temporarily contain all child bookmarks at same level for sorting |
| 316 std::vector<const BookmarkNode*> bookmarkList; | 287 std::vector<const BookmarkNode*> bookmarkList; |
| 288 | |
| 317 // Stack for Depth-First Search of bookmark model. It stores nodes and their | 289 // Stack for Depth-First Search of bookmark model. It stores nodes and their |
| 318 // heights. | 290 // heights. |
| 319 std::stack<std::pair<const BookmarkNode*, int> > stk; | 291 std::stack<std::pair<const BookmarkNode*, int> > stk; |
| 320 | 292 |
| 321 for (int i = 0; i < mobile->child_count(); ++i) { | 293 bookmarkList.push_back(bookmark_model_->bookmark_bar_node()); |
|
Ian Wen
2015/01/28 19:57:08
I wouldn't add them among other second-tier folder
Kibeom Kim (inactive)
2015/01/28 20:01:57
Only these three nodes will be the top level. Seco
| |
| 322 const BookmarkNode* child = mobile->GetChild(i); | 294 bookmarkList.push_back(bookmark_model_->mobile_node()); |
| 323 if (child->is_folder() && client_->CanBeEditedByUser(child)) | 295 bookmarkList.push_back(bookmark_model_->other_node()); |
| 324 bookmarkList.push_back(child); | |
| 325 } | |
| 326 for (int i = 0; i < other->child_count(); ++i) { | |
| 327 const BookmarkNode* child = other->GetChild(i); | |
| 328 if (child->is_folder() && client_->CanBeEditedByUser(child)) | |
| 329 bookmarkList.push_back(child); | |
| 330 } | |
| 331 bookmarkList.push_back(desktop); | |
| 332 std::stable_sort(bookmarkList.begin(), | |
| 333 bookmarkList.end(), | |
| 334 BookmarkTitleComparer(this, collator.get())); | |
| 335 | 296 |
| 336 // Push all sorted top folders in stack and give them depth of 0. | 297 // Push all sorted top folders in stack and give them depth of 0. |
| 337 // Note the order to push folders to stack should be opposite to the order in | 298 // Note the order to push folders to stack should be opposite to the order in |
| 338 // output. | 299 // output. |
| 339 for (std::vector<const BookmarkNode*>::reverse_iterator it = | 300 for (std::vector<const BookmarkNode*>::reverse_iterator it = |
| 340 bookmarkList.rbegin(); | 301 bookmarkList.rbegin(); |
| 341 it != bookmarkList.rend(); | 302 it != bookmarkList.rend(); |
| 342 ++it) { | 303 ++it) { |
| 343 stk.push(std::make_pair(*it, 0)); | 304 stk.push(std::make_pair(*it, 0)); |
| 344 } | 305 } |
| (...skipping 705 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1050 BookmarkModelChanged(); | 1011 BookmarkModelChanged(); |
| 1051 } | 1012 } |
| 1052 | 1013 |
| 1053 void BookmarksBridge::PartnerShimLoaded(PartnerBookmarksShim* shim) { | 1014 void BookmarksBridge::PartnerShimLoaded(PartnerBookmarksShim* shim) { |
| 1054 NotifyIfDoneLoading(); | 1015 NotifyIfDoneLoading(); |
| 1055 } | 1016 } |
| 1056 | 1017 |
| 1057 void BookmarksBridge::ShimBeingDeleted(PartnerBookmarksShim* shim) { | 1018 void BookmarksBridge::ShimBeingDeleted(PartnerBookmarksShim* shim) { |
| 1058 partner_bookmarks_shim_ = NULL; | 1019 partner_bookmarks_shim_ = NULL; |
| 1059 } | 1020 } |
| OLD | NEW |