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 |