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_string.h" | 7 #include "base/android/jni_string.h" |
| 8 #include "base/containers/stack_container.h" | 8 #include "base/containers/stack_container.h" |
| 9 #include "base/i18n/string_compare.h" | 9 #include "base/i18n/string_compare.h" |
| 10 #include "base/prefs/pref_service.h" | 10 #include "base/prefs/pref_service.h" |
| (...skipping 227 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 238 | 238 |
| 239 for (std::vector<const BookmarkNode*>::const_iterator it = | 239 for (std::vector<const BookmarkNode*>::const_iterator it = |
| 240 top_level_folders.begin(); it != top_level_folders.end(); ++it) { | 240 top_level_folders.begin(); it != top_level_folders.end(); ++it) { |
| 241 Java_BookmarksBridge_addToBookmarkIdList(env, | 241 Java_BookmarksBridge_addToBookmarkIdList(env, |
| 242 j_result_obj, | 242 j_result_obj, |
| 243 (*it)->id(), | 243 (*it)->id(), |
| 244 GetBookmarkType(*it)); | 244 GetBookmarkType(*it)); |
| 245 } | 245 } |
| 246 } | 246 } |
| 247 | 247 |
| 248 void BookmarksBridge::GetAllFoldersWithDepths(JNIEnv* env, | |
| 249 jobject obj, | |
| 250 jobject j_folder_obj, | |
| 251 jobject j_depth_obj) { | |
| 252 DCHECK(IsLoaded()); | |
| 253 | |
| 254 const BookmarkNode* desktop = bookmark_model_->bookmark_bar_node(); | |
| 255 const BookmarkNode* mobile = bookmark_model_->mobile_node(); | |
| 256 const BookmarkNode* other = bookmark_model_->other_node(); | |
| 257 | |
| 258 scoped_ptr<icu::Collator> collator = GetICUCollator(); | |
| 259 | |
| 260 // Vector to temporarily contain all child bookmarks at same level for sorting | |
| 261 std::vector<const BookmarkNode*> vct; | |
|
Yaron
2014/09/05 03:30:58
nit: prefer meaningful names over abbreviated name
Ian Wen
2014/09/05 21:17:32
Done.
| |
| 262 // Stack for Depth-First Search of bookmark model. It stores nodes and their | |
| 263 // heights. | |
| 264 std::stack<std::pair<const BookmarkNode*, int> > stk; | |
|
Yaron
2014/09/05 03:30:59
stack/bookmarkDepth?
Ian Wen
2014/09/05 21:17:32
Stack is the symbolic sign of depth first traversa
| |
| 265 | |
| 266 for (int i = 0; i < mobile->child_count(); ++i) { | |
| 267 vct.push_back(mobile->GetChild(i)); | |
| 268 } | |
| 269 for (int i = 0; i < other->child_count(); ++i) { | |
| 270 vct.push_back(other->GetChild(i)); | |
|
Yaron
2014/09/05 03:30:59
as new bookmarks by default are added to "other" a
Ian Wen
2014/09/05 21:17:32
Done.
| |
| 271 } | |
| 272 vct.push_back(desktop); | |
| 273 std::stable_sort( | |
| 274 vct.begin(), vct.end(), BookmarkTitleComparer(collator.get())); | |
| 275 | |
| 276 // Push all sorted top folders in stack and give them depth of 0. | |
| 277 for (std::vector<const BookmarkNode*>::reverse_iterator it = vct.rbegin(); | |
|
Yaron
2014/09/05 03:30:58
why reverse_iterator? also, why not use const_iter
Ian Wen
2014/09/05 21:17:32
Changed to const_reverse_iterator.
In vector, fol
| |
| 278 it != vct.rend(); | |
| 279 ++it) { | |
| 280 stk.push(std::make_pair(*it, 0)); | |
| 281 } | |
| 282 | |
| 283 while (!stk.empty()) { | |
| 284 const BookmarkNode* node = stk.top().first; | |
| 285 int depth = stk.top().second; | |
| 286 stk.pop(); | |
| 287 if (!node->is_folder() || !client_->CanBeEditedByUser(node)) | |
| 288 continue; | |
| 289 Java_BookmarksBridge_addToBookmarkIdListWithDepth(env, | |
| 290 j_folder_obj, | |
| 291 node->id(), | |
| 292 GetBookmarkType(node), | |
| 293 j_depth_obj, | |
| 294 depth); | |
| 295 vct.clear(); | |
| 296 for (int i = 0; i < node->child_count(); ++i) { | |
| 297 vct.push_back(node->GetChild(i)); | |
|
Yaron
2014/09/05 03:30:59
same comment about effeciency
Ian Wen
2014/09/05 21:17:32
Done.
| |
| 298 } | |
| 299 std::stable_sort( | |
| 300 vct.begin(), vct.end(), BookmarkTitleComparer(collator.get())); | |
| 301 for (std::vector<const BookmarkNode*>::reverse_iterator it = vct.rbegin(); | |
| 302 it != vct.rend(); | |
| 303 ++it) { | |
| 304 stk.push(std::make_pair(*it, depth + 1)); | |
| 305 } | |
| 306 } | |
| 307 } | |
| 308 | |
| 309 ScopedJavaLocalRef<jobject> BookmarksBridge::GetMobileFolderId(JNIEnv* env, | |
| 310 jobject obj) { | |
| 311 const BookmarkNode* mobileNode = bookmark_model_->mobile_node(); | |
| 312 ScopedJavaLocalRef<jobject> folder_id_obj = | |
| 313 Java_BookmarksBridge_createBookmarkId( | |
| 314 env, mobileNode->id(), GetBookmarkType(mobileNode)); | |
| 315 return folder_id_obj; | |
| 316 } | |
| 317 | |
| 248 void BookmarksBridge::GetChildIDs(JNIEnv* env, | 318 void BookmarksBridge::GetChildIDs(JNIEnv* env, |
| 249 jobject obj, | 319 jobject obj, |
| 250 jlong id, | 320 jlong id, |
| 251 jint type, | 321 jint type, |
| 252 jboolean get_folders, | 322 jboolean get_folders, |
| 253 jboolean get_bookmarks, | 323 jboolean get_bookmarks, |
| 254 jobject j_result_obj) { | 324 jobject j_result_obj) { |
| 255 DCHECK(IsLoaded()); | 325 DCHECK(IsLoaded()); |
| 256 | 326 |
| 257 const BookmarkNode* parent = GetNodeByID(id, type); | 327 const BookmarkNode* parent = GetNodeByID(id, type); |
| (...skipping 495 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 753 BookmarkModelChanged(); | 823 BookmarkModelChanged(); |
| 754 } | 824 } |
| 755 | 825 |
| 756 void BookmarksBridge::PartnerShimLoaded(PartnerBookmarksShim* shim) { | 826 void BookmarksBridge::PartnerShimLoaded(PartnerBookmarksShim* shim) { |
| 757 NotifyIfDoneLoading(); | 827 NotifyIfDoneLoading(); |
| 758 } | 828 } |
| 759 | 829 |
| 760 void BookmarksBridge::ShimBeingDeleted(PartnerBookmarksShim* shim) { | 830 void BookmarksBridge::ShimBeingDeleted(PartnerBookmarksShim* shim) { |
| 761 partner_bookmarks_shim_ = NULL; | 831 partner_bookmarks_shim_ = NULL; |
| 762 } | 832 } |
| OLD | NEW |