Chromium Code Reviews| 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/prefs/pref_service.h" | 8 #include "base/prefs/pref_service.h" |
| 9 #include "chrome/browser/bookmarks/bookmark_model.h" | 9 #include "chrome/browser/bookmarks/bookmark_model.h" |
| 10 #include "chrome/browser/bookmarks/bookmark_model_factory.h" | 10 #include "chrome/browser/bookmarks/bookmark_model_factory.h" |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 77 static jboolean IsEditBookmarksEnabled(JNIEnv* env, jclass clazz) { | 77 static jboolean IsEditBookmarksEnabled(JNIEnv* env, jclass clazz) { |
| 78 return IsEditBookmarksEnabled(); | 78 return IsEditBookmarksEnabled(); |
| 79 } | 79 } |
| 80 | 80 |
| 81 void BookmarksBridge::GetBookmarksForFolder(JNIEnv* env, | 81 void BookmarksBridge::GetBookmarksForFolder(JNIEnv* env, |
| 82 jobject obj, | 82 jobject obj, |
| 83 jobject j_folder_id_obj, | 83 jobject j_folder_id_obj, |
| 84 jobject j_callback_obj, | 84 jobject j_callback_obj, |
| 85 jobject j_result_obj) { | 85 jobject j_result_obj) { |
| 86 DCHECK(bookmark_model_->loaded()); | 86 DCHECK(bookmark_model_->loaded()); |
| 87 long folder_id = Java_BookmarkId_getId(env, j_folder_id_obj); | 87 const BookmarkNode* folder = GetFolderWithFallback(j_folder_id_obj); |
| 88 int type = Java_BookmarkId_getType(env, j_folder_id_obj); | 88 // Recreate the java bookmarkId object due to fallback. |
|
newt (away)
2013/11/08 01:54:06
An idea: you could modify GetFolderWithFallback()
| |
| 89 const BookmarkNode* folder = GetFolderWithFallback(folder_id, type); | 89 ScopedJavaLocalRef<jobject> folder_id_obj = |
| 90 Java_BookmarksBridge_getBookmarkId( | |
| 91 env, folder->id(), GetBookmarkType(folder)); | |
| 92 j_folder_id_obj = folder_id_obj.obj(); | |
| 90 // If this is the Mobile bookmarks folder then add the "Managed bookmarks" | 93 // If this is the Mobile bookmarks folder then add the "Managed bookmarks" |
| 91 // folder first, so that it's the first entry. | 94 // folder first, so that it's the first entry. |
| 92 if (folder == bookmark_model_->mobile_node() && | 95 if (folder == bookmark_model_->mobile_node() && |
| 93 managed_bookmarks_shim_->HasManagedBookmarks()) { | 96 managed_bookmarks_shim_->HasManagedBookmarks()) { |
| 94 ExtractBookmarkNodeInformation( | 97 ExtractBookmarkNodeInformation( |
| 95 managed_bookmarks_shim_->GetManagedBookmarksRoot(), | 98 managed_bookmarks_shim_->GetManagedBookmarksRoot(), |
| 96 j_result_obj); | 99 j_result_obj); |
| 97 } | 100 } |
| 98 // Get the folder contents | 101 // Get the folder contents |
| 99 for (int i = 0; i < folder->child_count(); ++i) { | 102 for (int i = 0; i < folder->child_count(); ++i) { |
| 100 const BookmarkNode* node = folder->GetChild(i); | 103 const BookmarkNode* node = folder->GetChild(i); |
| 101 ExtractBookmarkNodeInformation(node, j_result_obj); | 104 ExtractBookmarkNodeInformation(node, j_result_obj); |
| 102 } | 105 } |
| 103 | 106 |
| 104 Java_BookmarksCallback_onBookmarksAvailable( | 107 Java_BookmarksCallback_onBookmarksAvailable( |
| 105 env, j_callback_obj, j_folder_id_obj, j_result_obj); | 108 env, j_callback_obj, j_folder_id_obj, j_result_obj); |
| 106 } | 109 } |
| 107 | 110 |
| 108 void BookmarksBridge::GetCurrentFolderHierarchy(JNIEnv* env, | 111 void BookmarksBridge::GetCurrentFolderHierarchy(JNIEnv* env, |
| 109 jobject obj, | 112 jobject obj, |
| 110 jobject j_folder_id_obj, | 113 jobject j_folder_id_obj, |
| 111 jobject j_callback_obj, | 114 jobject j_callback_obj, |
| 112 jobject j_result_obj) { | 115 jobject j_result_obj) { |
| 113 DCHECK(bookmark_model_->loaded()); | 116 DCHECK(bookmark_model_->loaded()); |
| 114 long folder_id = Java_BookmarkId_getId(env, j_folder_id_obj); | 117 const BookmarkNode* folder = GetFolderWithFallback(j_folder_id_obj); |
| 115 int type = Java_BookmarkId_getType(env, j_folder_id_obj); | 118 // Recreate the java bookmarkId object due to fallback. |
| 116 const BookmarkNode* folder = GetFolderWithFallback(folder_id, type); | 119 ScopedJavaLocalRef<jobject> folder_id_obj = |
| 120 Java_BookmarksBridge_getBookmarkId( | |
| 121 env, folder->id(), GetBookmarkType(folder)); | |
| 122 j_folder_id_obj = folder_id_obj.obj(); | |
| 117 // Get the folder heirarchy | 123 // Get the folder heirarchy |
| 118 const BookmarkNode* node = folder; | 124 const BookmarkNode* node = folder; |
| 119 while (node) { | 125 while (node) { |
| 120 ExtractBookmarkNodeInformation(node, j_result_obj); | 126 ExtractBookmarkNodeInformation(node, j_result_obj); |
| 121 node = GetParentNode(node); | 127 node = GetParentNode(node); |
| 122 } | 128 } |
| 123 | |
| 124 Java_BookmarksCallback_onBookmarksFolderHierarchyAvailable( | 129 Java_BookmarksCallback_onBookmarksFolderHierarchyAvailable( |
| 125 env, j_callback_obj, j_folder_id_obj, j_result_obj); | 130 env, j_callback_obj, j_folder_id_obj, j_result_obj); |
| 126 } | 131 } |
| 127 | 132 |
| 128 void BookmarksBridge::DeleteBookmark(JNIEnv* env, | 133 void BookmarksBridge::DeleteBookmark(JNIEnv* env, |
| 129 jobject obj, | 134 jobject obj, |
| 130 jobject j_bookmark_id_obj) { | 135 jobject j_bookmark_id_obj) { |
| 131 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 136 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 132 DCHECK(bookmark_model_->loaded()); | 137 DCHECK(bookmark_model_->loaded()); |
| 133 | 138 |
| 134 long bookmark_id = Java_BookmarkId_getId(env, j_bookmark_id_obj); | 139 const BookmarkNode* node = GetNodeByID(j_bookmark_id_obj); |
| 135 int type = Java_BookmarkId_getType(env, j_bookmark_id_obj); | |
| 136 const BookmarkNode* node = GetNodeByID(bookmark_id, type); | |
| 137 if (!IsEditable(node)) { | 140 if (!IsEditable(node)) { |
| 138 NOTREACHED(); | 141 NOTREACHED(); |
| 139 return; | 142 return; |
| 140 } | 143 } |
| 141 | 144 |
| 142 const BookmarkNode* parent_node = GetParentNode(node); | 145 const BookmarkNode* parent_node = GetParentNode(node); |
| 143 bookmark_model_->Remove(parent_node, parent_node->GetIndexOf(node)); | 146 bookmark_model_->Remove(parent_node, parent_node->GetIndexOf(node)); |
| 144 } | 147 } |
| 145 | 148 |
| 146 ScopedJavaLocalRef<jobject> BookmarksBridge::CreateJavaBookmark( | 149 ScopedJavaLocalRef<jobject> BookmarksBridge::CreateJavaBookmark( |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 181 const BookmarkNode* node; | 184 const BookmarkNode* node; |
| 182 if (type == kBookmarkTypeManaged) { | 185 if (type == kBookmarkTypeManaged) { |
| 183 node = managed_bookmarks_shim_->GetNodeByID( | 186 node = managed_bookmarks_shim_->GetNodeByID( |
| 184 static_cast<int64>(node_id)); | 187 static_cast<int64>(node_id)); |
| 185 } else { | 188 } else { |
| 186 node = bookmark_model_->GetNodeByID(static_cast<int64>(node_id)); | 189 node = bookmark_model_->GetNodeByID(static_cast<int64>(node_id)); |
| 187 } | 190 } |
| 188 return node; | 191 return node; |
| 189 } | 192 } |
| 190 | 193 |
| 194 const BookmarkNode* BookmarksBridge::GetNodeByID(jobject j_node_id_obj) { | |
|
newt (away)
2013/11/08 01:54:06
I'm not sure how much work AttachCurrentThread() i
| |
| 195 JNIEnv* env = AttachCurrentThread(); | |
| 196 long node_id = Java_BookmarkId_getId(env, j_node_id_obj); | |
| 197 int type = Java_BookmarkId_getType(env, j_node_id_obj); | |
| 198 return GetNodeByID(node_id, type); | |
| 199 } | |
| 200 | |
| 191 const BookmarkNode* BookmarksBridge::GetFolderWithFallback( | 201 const BookmarkNode* BookmarksBridge::GetFolderWithFallback( |
| 192 long folder_id, int type) { | 202 long folder_id, int type) { |
| 193 const BookmarkNode* folder = GetNodeByID(folder_id, type); | 203 const BookmarkNode* folder = GetNodeByID(folder_id, type); |
| 194 if (!folder || folder->type() == BookmarkNode::URL) | 204 if (!folder || folder->type() == BookmarkNode::URL) |
| 195 folder = bookmark_model_->mobile_node(); | 205 folder = bookmark_model_->mobile_node(); |
| 196 return folder; | 206 return folder; |
| 197 } | 207 } |
| 198 | 208 |
| 209 const BookmarkNode* BookmarksBridge::GetFolderWithFallback( | |
|
Ted C
2013/11/08 01:28:27
I wouldn't add new methods for this or GetNodeByID
Ramya
2013/11/11 18:34:16
Done.
| |
| 210 jobject j_folder_id_obj) { | |
| 211 JNIEnv* env = AttachCurrentThread(); | |
| 212 long folder_id = Java_BookmarkId_getId(env, j_folder_id_obj); | |
| 213 int type = Java_BookmarkId_getType(env, j_folder_id_obj); | |
| 214 const BookmarkNode* folder = GetFolderWithFallback(folder_id, type); | |
| 215 return folder; | |
| 216 } | |
| 217 | |
| 199 bool BookmarksBridge::IsEditable(const BookmarkNode* node) const { | 218 bool BookmarksBridge::IsEditable(const BookmarkNode* node) const { |
| 200 return node && | 219 return node && |
| 201 (node->type() == BookmarkNode::FOLDER || | 220 (node->type() == BookmarkNode::FOLDER || |
| 202 node->type() == BookmarkNode::URL) && | 221 node->type() == BookmarkNode::URL) && |
| 203 !managed_bookmarks_shim_->IsManagedBookmark(node) && | 222 !managed_bookmarks_shim_->IsManagedBookmark(node) && |
| 204 IsEditBookmarksEnabled(); | 223 IsEditBookmarksEnabled(); |
| 205 } | 224 } |
| 206 | 225 |
| 207 const BookmarkNode* BookmarksBridge::GetParentNode(const BookmarkNode* node) { | 226 const BookmarkNode* BookmarksBridge::GetParentNode(const BookmarkNode* node) { |
| 208 DCHECK(bookmark_model_->loaded()); | 227 DCHECK(bookmark_model_->loaded()); |
| (...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 331 JNIEnv* env = AttachCurrentThread(); | 350 JNIEnv* env = AttachCurrentThread(); |
| 332 ScopedJavaLocalRef<jobject> obj = weak_java_ref_.get(env); | 351 ScopedJavaLocalRef<jobject> obj = weak_java_ref_.get(env); |
| 333 if (obj.is_null()) | 352 if (obj.is_null()) |
| 334 return; | 353 return; |
| 335 Java_BookmarksBridge_extensiveBookmarkChangesEnded(env, obj.obj()); | 354 Java_BookmarksBridge_extensiveBookmarkChangesEnded(env, obj.obj()); |
| 336 } | 355 } |
| 337 | 356 |
| 338 void BookmarksBridge::OnManagedBookmarksChanged() { | 357 void BookmarksBridge::OnManagedBookmarksChanged() { |
| 339 BookmarkModelChanged(); | 358 BookmarkModelChanged(); |
| 340 } | 359 } |
| OLD | NEW |