Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4462)

Unified Diff: chrome/browser/android/enhanced_bookmarks/enhanced_bookmarks_bridge.cc

Issue 685953002: Add JNI bridges for EnhancedBookmark Create/AddFolder/Move (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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)));

Powered by Google App Engine
This is Rietveld 408576698