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 15 matching lines...) Expand all Loading... |
26 #include "components/bookmarks/common/android/bookmark_type.h" | 26 #include "components/bookmarks/common/android/bookmark_type.h" |
27 #include "components/signin/core/browser/signin_manager.h" | 27 #include "components/signin/core/browser/signin_manager.h" |
28 #include "content/public/browser/browser_thread.h" | 28 #include "content/public/browser/browser_thread.h" |
29 #include "jni/BookmarksBridge_jni.h" | 29 #include "jni/BookmarksBridge_jni.h" |
30 | 30 |
31 using base::android::AttachCurrentThread; | 31 using base::android::AttachCurrentThread; |
32 using base::android::ConvertUTF8ToJavaString; | 32 using base::android::ConvertUTF8ToJavaString; |
33 using base::android::ConvertUTF16ToJavaString; | 33 using base::android::ConvertUTF16ToJavaString; |
34 using base::android::ScopedJavaLocalRef; | 34 using base::android::ScopedJavaLocalRef; |
35 using base::android::ScopedJavaGlobalRef; | 35 using base::android::ScopedJavaGlobalRef; |
| 36 using bookmarks::android::JavaBookmarkIdCreateBookmarkId; |
36 using bookmarks::android::JavaBookmarkIdGetId; | 37 using bookmarks::android::JavaBookmarkIdGetId; |
37 using bookmarks::android::JavaBookmarkIdGetType; | 38 using bookmarks::android::JavaBookmarkIdGetType; |
38 using bookmarks::BookmarkType; | 39 using bookmarks::BookmarkType; |
39 using content::BrowserThread; | 40 using content::BrowserThread; |
40 | 41 |
41 namespace { | 42 namespace { |
42 | 43 |
43 class BookmarkNodeCreationTimeCompareFunctor { | 44 class BookmarkNodeCreationTimeCompareFunctor { |
44 public: | 45 public: |
45 bool operator()(const BookmarkNode* lhs, const BookmarkNode* rhs) { | 46 bool operator()(const BookmarkNode* lhs, const BookmarkNode* rhs) { |
(...skipping 310 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
356 ++it) { | 357 ++it) { |
357 stk.push(std::make_pair(*it, depth + 1)); | 358 stk.push(std::make_pair(*it, depth + 1)); |
358 } | 359 } |
359 } | 360 } |
360 } | 361 } |
361 | 362 |
362 ScopedJavaLocalRef<jobject> BookmarksBridge::GetMobileFolderId(JNIEnv* env, | 363 ScopedJavaLocalRef<jobject> BookmarksBridge::GetMobileFolderId(JNIEnv* env, |
363 jobject obj) { | 364 jobject obj) { |
364 const BookmarkNode* mobile_node = bookmark_model_->mobile_node(); | 365 const BookmarkNode* mobile_node = bookmark_model_->mobile_node(); |
365 ScopedJavaLocalRef<jobject> folder_id_obj = | 366 ScopedJavaLocalRef<jobject> folder_id_obj = |
366 Java_BookmarksBridge_createBookmarkId( | 367 JavaBookmarkIdCreateBookmarkId( |
367 env, mobile_node->id(), GetBookmarkType(mobile_node)); | 368 env, mobile_node->id(), GetBookmarkType(mobile_node)); |
368 return folder_id_obj; | 369 return folder_id_obj; |
369 } | 370 } |
370 | 371 |
371 ScopedJavaLocalRef<jobject> BookmarksBridge::GetOtherFolderId(JNIEnv* env, | 372 ScopedJavaLocalRef<jobject> BookmarksBridge::GetOtherFolderId(JNIEnv* env, |
372 jobject obj) { | 373 jobject obj) { |
373 const BookmarkNode* other_node = bookmark_model_->other_node(); | 374 const BookmarkNode* other_node = bookmark_model_->other_node(); |
374 ScopedJavaLocalRef<jobject> folder_id_obj = | 375 ScopedJavaLocalRef<jobject> folder_id_obj = |
375 Java_BookmarksBridge_createBookmarkId( | 376 JavaBookmarkIdCreateBookmarkId( |
376 env, other_node->id(), GetBookmarkType(other_node)); | 377 env, other_node->id(), GetBookmarkType(other_node)); |
377 return folder_id_obj; | 378 return folder_id_obj; |
378 } | 379 } |
379 | 380 |
380 ScopedJavaLocalRef<jobject> BookmarksBridge::GetDesktopFolderId(JNIEnv* env, | 381 ScopedJavaLocalRef<jobject> BookmarksBridge::GetDesktopFolderId(JNIEnv* env, |
381 jobject obj) { | 382 jobject obj) { |
382 const BookmarkNode* desktop_node = bookmark_model_->bookmark_bar_node(); | 383 const BookmarkNode* desktop_node = bookmark_model_->bookmark_bar_node(); |
383 ScopedJavaLocalRef<jobject> folder_id_obj = | 384 ScopedJavaLocalRef<jobject> folder_id_obj = |
384 Java_BookmarksBridge_createBookmarkId( | 385 JavaBookmarkIdCreateBookmarkId( |
385 env, desktop_node->id(), GetBookmarkType(desktop_node)); | 386 env, desktop_node->id(), GetBookmarkType(desktop_node)); |
386 return folder_id_obj; | 387 return folder_id_obj; |
387 } | 388 } |
388 | 389 |
389 void BookmarksBridge::GetChildIDs(JNIEnv* env, | 390 void BookmarksBridge::GetChildIDs(JNIEnv* env, |
390 jobject obj, | 391 jobject obj, |
391 jlong id, | 392 jlong id, |
392 jint type, | 393 jint type, |
393 jboolean get_folders, | 394 jboolean get_folders, |
394 jboolean get_bookmarks, | 395 jboolean get_bookmarks, |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
427 ScopedJavaLocalRef<jobject> BookmarksBridge::GetChildAt(JNIEnv* env, | 428 ScopedJavaLocalRef<jobject> BookmarksBridge::GetChildAt(JNIEnv* env, |
428 jobject obj, | 429 jobject obj, |
429 jlong id, | 430 jlong id, |
430 jint type, | 431 jint type, |
431 jint index) { | 432 jint index) { |
432 DCHECK(IsLoaded()); | 433 DCHECK(IsLoaded()); |
433 | 434 |
434 const BookmarkNode* parent = GetNodeByID(id, type); | 435 const BookmarkNode* parent = GetNodeByID(id, type); |
435 DCHECK(parent); | 436 DCHECK(parent); |
436 const BookmarkNode* child = parent->GetChild(index); | 437 const BookmarkNode* child = parent->GetChild(index); |
437 return Java_BookmarksBridge_createBookmarkId( | 438 return JavaBookmarkIdCreateBookmarkId( |
438 env, child->id(), GetBookmarkType(child)); | 439 env, child->id(), GetBookmarkType(child)); |
439 } | 440 } |
440 | 441 |
441 void BookmarksBridge::GetAllBookmarkIDsOrderedByCreationDate( | 442 void BookmarksBridge::GetAllBookmarkIDsOrderedByCreationDate( |
442 JNIEnv* env, | 443 JNIEnv* env, |
443 jobject obj, | 444 jobject obj, |
444 jobject j_result_obj) { | 445 jobject j_result_obj) { |
445 DCHECK(IsLoaded()); | 446 DCHECK(IsLoaded()); |
446 std::list<const BookmarkNode*> folders; | 447 std::list<const BookmarkNode*> folders; |
447 std::vector<const BookmarkNode*> result; | 448 std::vector<const BookmarkNode*> result; |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
525 DCHECK(IsLoaded()); | 526 DCHECK(IsLoaded()); |
526 long folder_id = JavaBookmarkIdGetId(env, j_folder_id_obj); | 527 long folder_id = JavaBookmarkIdGetId(env, j_folder_id_obj); |
527 int type = JavaBookmarkIdGetType(env, j_folder_id_obj); | 528 int type = JavaBookmarkIdGetType(env, j_folder_id_obj); |
528 const BookmarkNode* folder = GetFolderWithFallback(folder_id, type); | 529 const BookmarkNode* folder = GetFolderWithFallback(folder_id, type); |
529 | 530 |
530 if (!folder->is_folder() || !IsReachable(folder)) | 531 if (!folder->is_folder() || !IsReachable(folder)) |
531 return; | 532 return; |
532 | 533 |
533 // Recreate the java bookmarkId object due to fallback. | 534 // Recreate the java bookmarkId object due to fallback. |
534 ScopedJavaLocalRef<jobject> folder_id_obj = | 535 ScopedJavaLocalRef<jobject> folder_id_obj = |
535 Java_BookmarksBridge_createBookmarkId( | 536 JavaBookmarkIdCreateBookmarkId( |
536 env, folder->id(), GetBookmarkType(folder)); | 537 env, folder->id(), GetBookmarkType(folder)); |
537 j_folder_id_obj = folder_id_obj.obj(); | 538 j_folder_id_obj = folder_id_obj.obj(); |
538 | 539 |
539 // Get the folder contents. | 540 // Get the folder contents. |
540 for (int i = 0; i < folder->child_count(); ++i) { | 541 for (int i = 0; i < folder->child_count(); ++i) { |
541 const BookmarkNode* node = folder->GetChild(i); | 542 const BookmarkNode* node = folder->GetChild(i); |
542 if (!IsFolderAvailable(node)) | 543 if (!IsFolderAvailable(node)) |
543 continue; | 544 continue; |
544 ExtractBookmarkNodeInformation(node, j_result_obj); | 545 ExtractBookmarkNodeInformation(node, j_result_obj); |
545 } | 546 } |
(...skipping 19 matching lines...) Expand all Loading... |
565 DCHECK(IsLoaded()); | 566 DCHECK(IsLoaded()); |
566 long folder_id = JavaBookmarkIdGetId(env, j_folder_id_obj); | 567 long folder_id = JavaBookmarkIdGetId(env, j_folder_id_obj); |
567 int type = JavaBookmarkIdGetType(env, j_folder_id_obj); | 568 int type = JavaBookmarkIdGetType(env, j_folder_id_obj); |
568 const BookmarkNode* folder = GetFolderWithFallback(folder_id, type); | 569 const BookmarkNode* folder = GetFolderWithFallback(folder_id, type); |
569 | 570 |
570 if (!folder->is_folder() || !IsReachable(folder)) | 571 if (!folder->is_folder() || !IsReachable(folder)) |
571 return; | 572 return; |
572 | 573 |
573 // Recreate the java bookmarkId object due to fallback. | 574 // Recreate the java bookmarkId object due to fallback. |
574 ScopedJavaLocalRef<jobject> folder_id_obj = | 575 ScopedJavaLocalRef<jobject> folder_id_obj = |
575 Java_BookmarksBridge_createBookmarkId( | 576 JavaBookmarkIdCreateBookmarkId( |
576 env, folder->id(), GetBookmarkType(folder)); | 577 env, folder->id(), GetBookmarkType(folder)); |
577 j_folder_id_obj = folder_id_obj.obj(); | 578 j_folder_id_obj = folder_id_obj.obj(); |
578 | 579 |
579 // Get the folder hierarchy. | 580 // Get the folder hierarchy. |
580 const BookmarkNode* node = folder; | 581 const BookmarkNode* node = folder; |
581 while (node) { | 582 while (node) { |
582 ExtractBookmarkNodeInformation(node, j_result_obj); | 583 ExtractBookmarkNodeInformation(node, j_result_obj); |
583 node = GetParentNode(node); | 584 node = GetParentNode(node); |
584 } | 585 } |
585 | 586 |
(...skipping 11 matching lines...) Expand all Loading... |
597 int type = JavaBookmarkIdGetType(env, j_parent_id_obj); | 598 int type = JavaBookmarkIdGetType(env, j_parent_id_obj); |
598 const BookmarkNode* parent = GetNodeByID(bookmark_id, type); | 599 const BookmarkNode* parent = GetNodeByID(bookmark_id, type); |
599 | 600 |
600 const BookmarkNode* new_node = bookmark_model_->AddFolder( | 601 const BookmarkNode* new_node = bookmark_model_->AddFolder( |
601 parent, index, base::android::ConvertJavaStringToUTF16(env, j_title)); | 602 parent, index, base::android::ConvertJavaStringToUTF16(env, j_title)); |
602 if (!new_node) { | 603 if (!new_node) { |
603 NOTREACHED(); | 604 NOTREACHED(); |
604 return ScopedJavaLocalRef<jobject>(); | 605 return ScopedJavaLocalRef<jobject>(); |
605 } | 606 } |
606 ScopedJavaLocalRef<jobject> new_java_obj = | 607 ScopedJavaLocalRef<jobject> new_java_obj = |
607 Java_BookmarksBridge_createBookmarkId( | 608 JavaBookmarkIdCreateBookmarkId( |
608 env, new_node->id(), GetBookmarkType(new_node)); | 609 env, new_node->id(), GetBookmarkType(new_node)); |
609 return new_java_obj; | 610 return new_java_obj; |
610 } | 611 } |
611 | 612 |
612 void BookmarksBridge::DeleteBookmark(JNIEnv* env, | 613 void BookmarksBridge::DeleteBookmark(JNIEnv* env, |
613 jobject obj, | 614 jobject obj, |
614 jobject j_bookmark_id_obj) { | 615 jobject j_bookmark_id_obj) { |
615 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 616 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
616 DCHECK(IsLoaded()); | 617 DCHECK(IsLoaded()); |
617 | 618 |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
667 const BookmarkNode* new_node = bookmark_model_->AddURL( | 668 const BookmarkNode* new_node = bookmark_model_->AddURL( |
668 parent, | 669 parent, |
669 index, | 670 index, |
670 base::android::ConvertJavaStringToUTF16(env, j_title), | 671 base::android::ConvertJavaStringToUTF16(env, j_title), |
671 GURL(base::android::ConvertJavaStringToUTF16(env, j_url))); | 672 GURL(base::android::ConvertJavaStringToUTF16(env, j_url))); |
672 if (!new_node) { | 673 if (!new_node) { |
673 NOTREACHED(); | 674 NOTREACHED(); |
674 return ScopedJavaLocalRef<jobject>(); | 675 return ScopedJavaLocalRef<jobject>(); |
675 } | 676 } |
676 ScopedJavaLocalRef<jobject> new_java_obj = | 677 ScopedJavaLocalRef<jobject> new_java_obj = |
677 Java_BookmarksBridge_createBookmarkId( | 678 JavaBookmarkIdCreateBookmarkId( |
678 env, new_node->id(), GetBookmarkType(new_node)); | 679 env, new_node->id(), GetBookmarkType(new_node)); |
679 return new_java_obj; | 680 return new_java_obj; |
680 } | 681 } |
681 | 682 |
682 void BookmarksBridge::Undo(JNIEnv* env, jobject obj) { | 683 void BookmarksBridge::Undo(JNIEnv* env, jobject obj) { |
683 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 684 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
684 DCHECK(IsLoaded()); | 685 DCHECK(IsLoaded()); |
685 BookmarkUndoService* undo_service = | 686 BookmarkUndoService* undo_service = |
686 BookmarkUndoServiceFactory::GetForProfile(profile_); | 687 BookmarkUndoServiceFactory::GetForProfile(profile_); |
687 UndoManager* undo_manager = undo_service->undo_manager(); | 688 UndoManager* undo_manager = undo_service->undo_manager(); |
(...skipping 293 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
981 BookmarkModelChanged(); | 982 BookmarkModelChanged(); |
982 } | 983 } |
983 | 984 |
984 void BookmarksBridge::PartnerShimLoaded(PartnerBookmarksShim* shim) { | 985 void BookmarksBridge::PartnerShimLoaded(PartnerBookmarksShim* shim) { |
985 NotifyIfDoneLoading(); | 986 NotifyIfDoneLoading(); |
986 } | 987 } |
987 | 988 |
988 void BookmarksBridge::ShimBeingDeleted(PartnerBookmarksShim* shim) { | 989 void BookmarksBridge::ShimBeingDeleted(PartnerBookmarksShim* shim) { |
989 partner_bookmarks_shim_ = NULL; | 990 partner_bookmarks_shim_ = NULL; |
990 } | 991 } |
OLD | NEW |