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_bridge.h" | 5 #include "chrome/browser/android/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" |
11 #include "chrome/browser/profiles/profile.h" | 11 #include "chrome/browser/profiles/profile.h" |
12 #include "chrome/browser/profiles/profile_android.h" | 12 #include "chrome/browser/profiles/profile_android.h" |
13 #include "chrome/common/pref_names.h" | 13 #include "chrome/common/pref_names.h" |
14 #include "content/public/browser/browser_thread.h" | 14 #include "content/public/browser/browser_thread.h" |
15 #include "jni/BookmarksBridge_jni.h" | 15 #include "jni/BookmarksBridge_jni.h" |
16 | 16 |
17 using base::android::AttachCurrentThread; | 17 using base::android::AttachCurrentThread; |
18 using base::android::ConvertUTF8ToJavaString; | 18 using base::android::ConvertUTF8ToJavaString; |
19 using base::android::ConvertUTF16ToJavaString; | 19 using base::android::ConvertUTF16ToJavaString; |
| 20 using base::android::ScopedJavaLocalRef; |
20 using base::android::ScopedJavaGlobalRef; | 21 using base::android::ScopedJavaGlobalRef; |
21 using content::BrowserThread; | 22 using content::BrowserThread; |
22 | 23 |
23 BookmarksBridge::BookmarksBridge(JNIEnv* env, | 24 BookmarksBridge::BookmarksBridge(JNIEnv* env, |
24 jobject obj, | 25 jobject obj, |
25 jobject j_profile) | 26 jobject j_profile) |
26 : weak_java_ref_(env, obj) { | 27 : weak_java_ref_(env, obj) { |
27 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 28 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
28 Profile* profile = ProfileAndroid::FromProfileAndroid(j_profile); | 29 Profile* profile = ProfileAndroid::FromProfileAndroid(j_profile); |
29 bookmark_model_ = BookmarkModelFactory::GetForProfile(profile); | 30 bookmark_model_ = BookmarkModelFactory::GetForProfile(profile); |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
97 const BookmarkNode* node = bookmark_model_->GetNodeByID(bookmark_id); | 98 const BookmarkNode* node = bookmark_model_->GetNodeByID(bookmark_id); |
98 if (!IsEditable(node)) { | 99 if (!IsEditable(node)) { |
99 NOTREACHED(); | 100 NOTREACHED(); |
100 return; | 101 return; |
101 } | 102 } |
102 | 103 |
103 const BookmarkNode* parent_node = node->parent(); | 104 const BookmarkNode* parent_node = node->parent(); |
104 bookmark_model_->Remove(parent_node, parent_node->GetIndexOf(node)); | 105 bookmark_model_->Remove(parent_node, parent_node->GetIndexOf(node)); |
105 } | 106 } |
106 | 107 |
| 108 ScopedJavaLocalRef<jobject> BookmarksBridge::CreateJavaBookmark( |
| 109 const BookmarkNode* node) { |
| 110 JNIEnv* env = AttachCurrentThread(); |
| 111 |
| 112 const BookmarkNode* parent = node->parent(); |
| 113 int64 parent_id = parent ? parent->id() : -1; |
| 114 |
| 115 std::string url; |
| 116 if (node->is_url()) |
| 117 url = node->url().spec(); |
| 118 |
| 119 return Java_BookmarksBridge_create( |
| 120 env, |
| 121 node->id(), |
| 122 ConvertUTF16ToJavaString(env, node->GetTitle()).obj(), |
| 123 ConvertUTF8ToJavaString(env, url).obj(), |
| 124 node->is_folder(), |
| 125 parent_id, |
| 126 IsEditable(node)); |
| 127 } |
| 128 |
107 void BookmarksBridge::ExtractBookmarkNodeInformation( | 129 void BookmarksBridge::ExtractBookmarkNodeInformation( |
108 const BookmarkNode* node, | 130 const BookmarkNode* node, |
109 jobject j_result_obj) { | 131 jobject j_result_obj) { |
110 JNIEnv* env = AttachCurrentThread(); | 132 JNIEnv* env = AttachCurrentThread(); |
111 const BookmarkNode* parent = node->parent(); | 133 Java_BookmarksBridge_addToList( |
112 int64 parent_id = -1; | 134 env, |
113 if (parent) | 135 j_result_obj, |
114 parent_id = node->parent()->id(); | 136 CreateJavaBookmark(node).obj()); |
115 std::string url; | |
116 if (node->is_url()) | |
117 url = node->url().spec(); | |
118 Java_BookmarksBridge_create( | |
119 env, j_result_obj, node->id(), | |
120 ConvertUTF16ToJavaString(env, node->GetTitle()).obj(), | |
121 ConvertUTF8ToJavaString(env, url).obj(), | |
122 node->is_folder(), parent_id, IsEditable(node)); | |
123 } | 137 } |
124 | 138 |
125 const BookmarkNode* BookmarksBridge::GetFolderNodeFromId(jlong folder_id) { | 139 const BookmarkNode* BookmarksBridge::GetFolderNodeFromId(jlong folder_id) { |
126 const BookmarkNode* folder; | 140 const BookmarkNode* folder; |
127 if (folder_id == -1) { | 141 if (folder_id == -1) { |
128 folder = bookmark_model_->mobile_node(); | 142 folder = bookmark_model_->mobile_node(); |
129 } else { | 143 } else { |
130 folder = bookmark_model_->GetNodeByID( | 144 folder = bookmark_model_->GetNodeByID( |
131 static_cast<int64>(folder_id)); | 145 static_cast<int64>(folder_id)); |
132 } | 146 } |
(...skipping 22 matching lines...) Expand all Loading... |
155 Java_BookmarksBridge_bookmarkModelLoaded(env, obj.obj()); | 169 Java_BookmarksBridge_bookmarkModelLoaded(env, obj.obj()); |
156 } | 170 } |
157 | 171 |
158 void BookmarksBridge::BookmarkModelBeingDeleted(BookmarkModel* model) { | 172 void BookmarksBridge::BookmarkModelBeingDeleted(BookmarkModel* model) { |
159 JNIEnv* env = AttachCurrentThread(); | 173 JNIEnv* env = AttachCurrentThread(); |
160 ScopedJavaLocalRef<jobject> obj = weak_java_ref_.get(env); | 174 ScopedJavaLocalRef<jobject> obj = weak_java_ref_.get(env); |
161 if (obj.is_null()) | 175 if (obj.is_null()) |
162 return; | 176 return; |
163 Java_BookmarksBridge_bookmarkModelDeleted(env, obj.obj()); | 177 Java_BookmarksBridge_bookmarkModelDeleted(env, obj.obj()); |
164 } | 178 } |
| 179 |
| 180 void BookmarksBridge::BookmarkNodeMoved(BookmarkModel* model, |
| 181 const BookmarkNode* old_parent, |
| 182 int old_index, |
| 183 const BookmarkNode* new_parent, |
| 184 int new_index) { |
| 185 JNIEnv* env = AttachCurrentThread(); |
| 186 ScopedJavaLocalRef<jobject> obj = weak_java_ref_.get(env); |
| 187 if (obj.is_null()) |
| 188 return; |
| 189 Java_BookmarksBridge_bookmarkNodeMoved( |
| 190 env, |
| 191 obj.obj(), |
| 192 CreateJavaBookmark(old_parent).obj(), |
| 193 old_index, |
| 194 CreateJavaBookmark(new_parent).obj(), |
| 195 new_index); |
| 196 } |
| 197 |
| 198 void BookmarksBridge::BookmarkNodeAdded(BookmarkModel* model, |
| 199 const BookmarkNode* parent, |
| 200 int index) { |
| 201 JNIEnv* env = AttachCurrentThread(); |
| 202 ScopedJavaLocalRef<jobject> obj = weak_java_ref_.get(env); |
| 203 if (obj.is_null()) |
| 204 return; |
| 205 Java_BookmarksBridge_bookmarkNodeAdded( |
| 206 env, |
| 207 obj.obj(), |
| 208 CreateJavaBookmark(parent).obj(), |
| 209 index); |
| 210 } |
| 211 |
| 212 void BookmarksBridge::BookmarkNodeRemoved(BookmarkModel* model, |
| 213 const BookmarkNode* parent, |
| 214 int old_index, |
| 215 const BookmarkNode* node) { |
| 216 JNIEnv* env = AttachCurrentThread(); |
| 217 ScopedJavaLocalRef<jobject> obj = weak_java_ref_.get(env); |
| 218 if (obj.is_null()) |
| 219 return; |
| 220 Java_BookmarksBridge_bookmarkNodeRemoved( |
| 221 env, |
| 222 obj.obj(), |
| 223 CreateJavaBookmark(parent).obj(), |
| 224 old_index, |
| 225 CreateJavaBookmark(node).obj()); |
| 226 } |
| 227 |
| 228 void BookmarksBridge::BookmarkNodeChanged(BookmarkModel* model, |
| 229 const BookmarkNode* node) { |
| 230 JNIEnv* env = AttachCurrentThread(); |
| 231 ScopedJavaLocalRef<jobject> obj = weak_java_ref_.get(env); |
| 232 if (obj.is_null()) |
| 233 return; |
| 234 Java_BookmarksBridge_bookmarkNodeChanged( |
| 235 env, |
| 236 obj.obj(), |
| 237 CreateJavaBookmark(node).obj()); |
| 238 } |
| 239 |
| 240 void BookmarksBridge::BookmarkNodeChildrenReordered(BookmarkModel* model, |
| 241 const BookmarkNode* node) { |
| 242 JNIEnv* env = AttachCurrentThread(); |
| 243 ScopedJavaLocalRef<jobject> obj = weak_java_ref_.get(env); |
| 244 if (obj.is_null()) |
| 245 return; |
| 246 Java_BookmarksBridge_bookmarkNodeChildrenReordered( |
| 247 env, |
| 248 obj.obj(), |
| 249 CreateJavaBookmark(node).obj()); |
| 250 } |
| 251 |
| 252 void BookmarksBridge::ExtensiveBookmarkChangesBeginning(BookmarkModel* model) { |
| 253 JNIEnv* env = AttachCurrentThread(); |
| 254 ScopedJavaLocalRef<jobject> obj = weak_java_ref_.get(env); |
| 255 if (obj.is_null()) |
| 256 return; |
| 257 Java_BookmarksBridge_extensiveBookmarkChangesBeginning(env, obj.obj()); |
| 258 } |
| 259 |
| 260 void BookmarksBridge::ExtensiveBookmarkChangesEnded(BookmarkModel* model) { |
| 261 JNIEnv* env = AttachCurrentThread(); |
| 262 ScopedJavaLocalRef<jobject> obj = weak_java_ref_.get(env); |
| 263 if (obj.is_null()) |
| 264 return; |
| 265 Java_BookmarksBridge_extensiveBookmarkChangesEnded(env, obj.obj()); |
| 266 } |
OLD | NEW |