Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 Loading... | |
| 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 |
| OLD | NEW |