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

Side by Side 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, 1 month 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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/enhanced_bookmarks/enhanced_bookmarks_bridge.h" 5 #include "chrome/browser/android/enhanced_bookmarks/enhanced_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/prefs/pref_service.h"
9 #include "chrome/browser/bookmarks/bookmark_model_factory.h" 10 #include "chrome/browser/bookmarks/bookmark_model_factory.h"
10 #include "chrome/browser/enhanced_bookmarks/chrome_bookmark_server_cluster_servi ce.h" 11 #include "chrome/browser/enhanced_bookmarks/chrome_bookmark_server_cluster_servi ce.h"
11 #include "chrome/browser/enhanced_bookmarks/chrome_bookmark_server_cluster_servi ce_factory.h" 12 #include "chrome/browser/enhanced_bookmarks/chrome_bookmark_server_cluster_servi ce_factory.h"
12 #include "chrome/browser/enhanced_bookmarks/enhanced_bookmark_model_factory.h" 13 #include "chrome/browser/enhanced_bookmarks/enhanced_bookmark_model_factory.h"
13 #include "chrome/browser/profiles/profile_android.h" 14 #include "chrome/browser/profiles/profile_android.h"
14 #include "chrome/common/chrome_version_info.h" 15 #include "chrome/common/chrome_version_info.h"
16 #include "chrome/common/pref_names.h"
15 #include "components/bookmarks/browser/bookmark_model.h" 17 #include "components/bookmarks/browser/bookmark_model.h"
16 #include "components/bookmarks/browser/bookmark_utils.h" 18 #include "components/bookmarks/browser/bookmark_utils.h"
19 #include "components/bookmarks/common/android/bookmark_id.h"
17 #include "components/bookmarks/common/android/bookmark_type.h" 20 #include "components/bookmarks/common/android/bookmark_type.h"
18 #include "components/enhanced_bookmarks/enhanced_bookmark_model.h" 21 #include "components/enhanced_bookmarks/enhanced_bookmark_model.h"
22 #include "content/public/browser/browser_thread.h"
19 #include "jni/EnhancedBookmarksBridge_jni.h" 23 #include "jni/EnhancedBookmarksBridge_jni.h"
20 24
21 using base::android::AttachCurrentThread; 25 using base::android::AttachCurrentThread;
26 using bookmarks::android::JavaBookmarkIdCreateBookmarkId;
27 using bookmarks::android::JavaBookmarkIdGetId;
28 using bookmarks::android::JavaBookmarkIdGetType;
22 using bookmarks::BookmarkType; 29 using bookmarks::BookmarkType;
30 using content::BrowserThread;
23 31
24 namespace enhanced_bookmarks { 32 namespace enhanced_bookmarks {
25 namespace android { 33 namespace android {
26 34
27 EnhancedBookmarksBridge::EnhancedBookmarksBridge(JNIEnv* env, 35 EnhancedBookmarksBridge::EnhancedBookmarksBridge(JNIEnv* env,
28 jobject obj, 36 jobject obj,
29 Profile* profile) : weak_java_ref_(env, obj) { 37 Profile* profile) : weak_java_ref_(env, obj) {
30 profile_ = profile; 38 profile_ = profile;
31 enhanced_bookmark_model_ = 39 enhanced_bookmark_model_ =
32 EnhancedBookmarkModelFactory::GetForBrowserContext(profile_); 40 EnhancedBookmarkModelFactory::GetForBrowserContext(profile_);
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
89 97
90 ScopedJavaLocalRef<jobjectArray> EnhancedBookmarksBridge::GetFilters( 98 ScopedJavaLocalRef<jobjectArray> EnhancedBookmarksBridge::GetFilters(
91 JNIEnv* env, 99 JNIEnv* env,
92 jobject obj) { 100 jobject obj) {
93 DCHECK(enhanced_bookmark_model_->loaded()); 101 DCHECK(enhanced_bookmark_model_->loaded());
94 const std::vector<std::string> filters = 102 const std::vector<std::string> filters =
95 cluster_service_->GetClusters(); 103 cluster_service_->GetClusters();
96 return base::android::ToJavaArrayOfStrings(env, filters); 104 return base::android::ToJavaArrayOfStrings(env, filters);
97 } 105 }
98 106
107 ScopedJavaLocalRef<jobject> EnhancedBookmarksBridge::AddFolder(JNIEnv* env,
108 jobject obj,
109 jobject j_parent_id_obj,
110 jint index,
111 jstring j_title) {
112 DCHECK(enhanced_bookmark_model_->loaded());
113 long bookmark_id = JavaBookmarkIdGetId(env, j_parent_id_obj);
114 const BookmarkNode* parent = bookmarks::GetBookmarkNodeByID(
115 enhanced_bookmark_model_->bookmark_model(),
116 static_cast<int64>(bookmark_id));
117 const BookmarkNode* new_node = enhanced_bookmark_model_->AddFolder(
118 parent, index, base::android::ConvertJavaStringToUTF16(env, j_title));
119 if (!new_node) {
120 NOTREACHED();
121 return ScopedJavaLocalRef<jobject>();
122 }
123 ScopedJavaLocalRef<jobject> new_java_obj =
124 JavaBookmarkIdCreateBookmarkId(env, new_node->id(), new_node->type());
125 return new_java_obj;
126 }
127
128 void EnhancedBookmarksBridge::MoveBookmark(JNIEnv* env,
129 jobject obj,
130 jobject j_bookmark_id_obj,
131 jobject j_parent_id_obj,
132 jint index) {
133 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
134 DCHECK(enhanced_bookmark_model_->loaded());
135
136 long bookmark_id = JavaBookmarkIdGetId(env, j_bookmark_id_obj);
137 const BookmarkNode* node = bookmarks::GetBookmarkNodeByID(
138 enhanced_bookmark_model_->bookmark_model(),
139 static_cast<int64>(bookmark_id));
140 if (!IsEditable(node)) {
141 NOTREACHED();
142 return;
143 }
144 bookmark_id = JavaBookmarkIdGetId(env, j_parent_id_obj);
145 const BookmarkNode* new_parent_node = bookmarks::GetBookmarkNodeByID(
146 enhanced_bookmark_model_->bookmark_model(),
147 static_cast<int64>(bookmark_id));
148 enhanced_bookmark_model_->Move(node, new_parent_node, index);
149 }
150
151 ScopedJavaLocalRef<jobject> EnhancedBookmarksBridge::AddBookmark(
152 JNIEnv* env,
153 jobject obj,
154 jobject j_parent_id_obj,
155 jint index,
156 jstring j_title,
157 jstring j_url) {
158 DCHECK(enhanced_bookmark_model_->loaded());
159 long bookmark_id = JavaBookmarkIdGetId(env, j_parent_id_obj);
160 const BookmarkNode* parent = bookmarks::GetBookmarkNodeByID(
161 enhanced_bookmark_model_->bookmark_model(),
162 static_cast<int64>(bookmark_id));
163
164 const BookmarkNode* new_node = enhanced_bookmark_model_->AddURL(
165 parent,
166 index,
167 base::android::ConvertJavaStringToUTF16(env, j_title),
168 GURL(base::android::ConvertJavaStringToUTF16(env, j_url)),
169 base::Time::Now());
170 if (!new_node) {
171 NOTREACHED();
172 return ScopedJavaLocalRef<jobject>();
173 }
174 ScopedJavaLocalRef<jobject> new_java_obj =
175 JavaBookmarkIdCreateBookmarkId(env, new_node->id(), new_node->type());
176 return new_java_obj;
177 }
178
99 void EnhancedBookmarksBridge::OnChange(BookmarkServerService* service) { 179 void EnhancedBookmarksBridge::OnChange(BookmarkServerService* service) {
100 DCHECK(enhanced_bookmark_model_->loaded()); 180 DCHECK(enhanced_bookmark_model_->loaded());
101 JNIEnv* env = AttachCurrentThread(); 181 JNIEnv* env = AttachCurrentThread();
102 182
103 ScopedJavaLocalRef<jobject> obj = weak_java_ref_.get(env); 183 ScopedJavaLocalRef<jobject> obj = weak_java_ref_.get(env);
104 if (obj.is_null()) 184 if (obj.is_null())
105 return; 185 return;
106 186
107 Java_EnhancedBookmarksBridge_onFiltersChanged(env, obj.obj()); 187 Java_EnhancedBookmarksBridge_onFiltersChanged(env, obj.obj());
108 } 188 }
109 189
190 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.
191 if (!node || (node->type() != BookmarkNode::FOLDER &&
192 node->type() != BookmarkNode::URL)) {
193 return false;
194 }
195 return profile_->GetPrefs()->GetBoolean(
196 bookmarks::prefs::kEditBookmarksEnabled);
197 }
198
110 static jlong Init(JNIEnv* env, jobject obj, jobject j_profile) { 199 static jlong Init(JNIEnv* env, jobject obj, jobject j_profile) {
111 return reinterpret_cast<jlong>(new EnhancedBookmarksBridge( 200 return reinterpret_cast<jlong>(new EnhancedBookmarksBridge(
112 env, obj, ProfileAndroid::FromProfileAndroid(j_profile))); 201 env, obj, ProfileAndroid::FromProfileAndroid(j_profile)));
113 } 202 }
114 203
115 bool RegisterEnhancedBookmarksBridge(JNIEnv* env) { 204 bool RegisterEnhancedBookmarksBridge(JNIEnv* env) {
116 return RegisterNativesImpl(env); 205 return RegisterNativesImpl(env);
117 } 206 }
118 207
119 } // namespace android 208 } // namespace android
120 } // namespace enhanced_bookmarks 209 } // namespace enhanced_bookmarks
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698