Chromium Code Reviews| Index: chrome/browser/android/enhanced_bookmarks/enhanced_bookmarks_bridge.cc |
| diff --git a/chrome/browser/android/enhanced_bookmarks/enhanced_bookmarks_bridge.cc b/chrome/browser/android/enhanced_bookmarks/enhanced_bookmarks_bridge.cc |
| index dc3fd1cf517971d0a92ee2ba5ef423cfb8fff4af..3f803e3b7a3aa93ac37302e11b8bdc5eadcc11d6 100644 |
| --- a/chrome/browser/android/enhanced_bookmarks/enhanced_bookmarks_bridge.cc |
| +++ b/chrome/browser/android/enhanced_bookmarks/enhanced_bookmarks_bridge.cc |
| @@ -6,20 +6,28 @@ |
| #include "base/android/jni_array.h" |
| #include "base/android/jni_string.h" |
| +#include "base/prefs/pref_service.h" |
| #include "chrome/browser/bookmarks/bookmark_model_factory.h" |
| #include "chrome/browser/enhanced_bookmarks/chrome_bookmark_server_cluster_service.h" |
| #include "chrome/browser/enhanced_bookmarks/chrome_bookmark_server_cluster_service_factory.h" |
| #include "chrome/browser/enhanced_bookmarks/enhanced_bookmark_model_factory.h" |
| #include "chrome/browser/profiles/profile_android.h" |
| #include "chrome/common/chrome_version_info.h" |
| +#include "chrome/common/pref_names.h" |
| #include "components/bookmarks/browser/bookmark_model.h" |
| #include "components/bookmarks/browser/bookmark_utils.h" |
| +#include "components/bookmarks/common/android/bookmark_id.h" |
| #include "components/bookmarks/common/android/bookmark_type.h" |
| #include "components/enhanced_bookmarks/enhanced_bookmark_model.h" |
| +#include "content/public/browser/browser_thread.h" |
| #include "jni/EnhancedBookmarksBridge_jni.h" |
| using base::android::AttachCurrentThread; |
| +using bookmarks::android::JavaBookmarkIdCreateBookmarkId; |
| +using bookmarks::android::JavaBookmarkIdGetId; |
| +using bookmarks::android::JavaBookmarkIdGetType; |
| using bookmarks::BookmarkType; |
| +using content::BrowserThread; |
| namespace enhanced_bookmarks { |
| namespace android { |
| @@ -96,6 +104,78 @@ ScopedJavaLocalRef<jobjectArray> EnhancedBookmarksBridge::GetFilters( |
| return base::android::ToJavaArrayOfStrings(env, filters); |
| } |
| +ScopedJavaLocalRef<jobject> EnhancedBookmarksBridge::AddFolder(JNIEnv* env, |
| + jobject obj, |
| + jobject j_parent_id_obj, |
| + jint index, |
| + jstring j_title) { |
| + DCHECK(enhanced_bookmark_model_->loaded()); |
| + long bookmark_id = JavaBookmarkIdGetId(env, j_parent_id_obj); |
| + const BookmarkNode* parent = bookmarks::GetBookmarkNodeByID( |
| + enhanced_bookmark_model_->bookmark_model(), |
| + static_cast<int64>(bookmark_id)); |
| + const BookmarkNode* new_node = enhanced_bookmark_model_->AddFolder( |
| + parent, index, base::android::ConvertJavaStringToUTF16(env, j_title)); |
| + if (!new_node) { |
| + NOTREACHED(); |
| + return ScopedJavaLocalRef<jobject>(); |
| + } |
| + ScopedJavaLocalRef<jobject> new_java_obj = |
| + JavaBookmarkIdCreateBookmarkId(env, new_node->id(), new_node->type()); |
| + return new_java_obj; |
| +} |
| + |
| +void EnhancedBookmarksBridge::MoveBookmark(JNIEnv* env, |
| + jobject obj, |
| + jobject j_bookmark_id_obj, |
| + jobject j_parent_id_obj, |
| + jint index) { |
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| + DCHECK(enhanced_bookmark_model_->loaded()); |
| + |
| + long bookmark_id = JavaBookmarkIdGetId(env, j_bookmark_id_obj); |
| + const BookmarkNode* node = bookmarks::GetBookmarkNodeByID( |
| + enhanced_bookmark_model_->bookmark_model(), |
| + static_cast<int64>(bookmark_id)); |
| + if (!IsEditable(node)) { |
| + NOTREACHED(); |
| + return; |
| + } |
| + bookmark_id = JavaBookmarkIdGetId(env, j_parent_id_obj); |
| + const BookmarkNode* new_parent_node = bookmarks::GetBookmarkNodeByID( |
| + enhanced_bookmark_model_->bookmark_model(), |
| + static_cast<int64>(bookmark_id)); |
| + enhanced_bookmark_model_->Move(node, new_parent_node, index); |
| +} |
| + |
| +ScopedJavaLocalRef<jobject> EnhancedBookmarksBridge::AddBookmark( |
| + JNIEnv* env, |
| + jobject obj, |
| + jobject j_parent_id_obj, |
| + jint index, |
| + jstring j_title, |
| + jstring j_url) { |
| + DCHECK(enhanced_bookmark_model_->loaded()); |
| + long bookmark_id = JavaBookmarkIdGetId(env, j_parent_id_obj); |
| + const BookmarkNode* parent = bookmarks::GetBookmarkNodeByID( |
| + enhanced_bookmark_model_->bookmark_model(), |
| + static_cast<int64>(bookmark_id)); |
| + |
| + const BookmarkNode* new_node = enhanced_bookmark_model_->AddURL( |
| + parent, |
| + index, |
| + base::android::ConvertJavaStringToUTF16(env, j_title), |
| + GURL(base::android::ConvertJavaStringToUTF16(env, j_url)), |
| + base::Time::Now()); |
| + if (!new_node) { |
| + NOTREACHED(); |
| + return ScopedJavaLocalRef<jobject>(); |
| + } |
| + ScopedJavaLocalRef<jobject> new_java_obj = |
| + JavaBookmarkIdCreateBookmarkId(env, new_node->id(), new_node->type()); |
| + return new_java_obj; |
| +} |
| + |
| void EnhancedBookmarksBridge::OnChange(BookmarkServerService* service) { |
| DCHECK(enhanced_bookmark_model_->loaded()); |
| JNIEnv* env = AttachCurrentThread(); |
| @@ -107,6 +187,15 @@ void EnhancedBookmarksBridge::OnChange(BookmarkServerService* service) { |
| Java_EnhancedBookmarksBridge_onFiltersChanged(env, obj.obj()); |
| } |
| +bool EnhancedBookmarksBridge::IsEditable(const BookmarkNode* node) const { |
|
Yaron
2014/10/29 21:50:43
BookmarksBridge::IsEditable has additional safety
danduong
2014/10/29 22:13:40
That's still the right layer. We haven't added any
danduong
2014/10/29 23:54:26
This layer.
|
| + if (!node || (node->type() != BookmarkNode::FOLDER && |
| + node->type() != BookmarkNode::URL)) { |
| + return false; |
| + } |
| + return profile_->GetPrefs()->GetBoolean( |
| + bookmarks::prefs::kEditBookmarksEnabled); |
| +} |
| + |
| static jlong Init(JNIEnv* env, jobject obj, jobject j_profile) { |
| return reinterpret_cast<jlong>(new EnhancedBookmarksBridge( |
| env, obj, ProfileAndroid::FromProfileAndroid(j_profile))); |