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/containers/stack_container.h" | 8 #include "base/containers/stack_container.h" |
9 #include "base/prefs/pref_service.h" | 9 #include "base/prefs/pref_service.h" |
10 #include "chrome/browser/bookmarks/bookmark_model_factory.h" | 10 #include "chrome/browser/bookmarks/bookmark_model_factory.h" |
11 #include "chrome/browser/bookmarks/chrome_bookmark_client_factory.h" | 11 #include "chrome/browser/bookmarks/chrome_bookmark_client_factory.h" |
12 #include "chrome/browser/profiles/incognito_helpers.h" | 12 #include "chrome/browser/profiles/incognito_helpers.h" |
13 #include "chrome/browser/profiles/profile.h" | 13 #include "chrome/browser/profiles/profile.h" |
14 #include "chrome/browser/profiles/profile_android.h" | 14 #include "chrome/browser/profiles/profile_android.h" |
15 #include "chrome/browser/profiles/profile_manager.h" | 15 #include "chrome/browser/profiles/profile_manager.h" |
16 #include "chrome/browser/signin/signin_manager_factory.h" | 16 #include "chrome/browser/signin/signin_manager_factory.h" |
17 #include "chrome/common/pref_names.h" | 17 #include "chrome/common/pref_names.h" |
18 #include "components/bookmarks/browser/bookmark_model.h" | 18 #include "components/bookmarks/browser/bookmark_model.h" |
19 #include "components/bookmarks/browser/bookmark_utils.h" | 19 #include "components/bookmarks/browser/bookmark_utils.h" |
| 20 #include "components/bookmarks/common/android/bookmark_type.h" |
20 #include "components/signin/core/browser/signin_manager.h" | 21 #include "components/signin/core/browser/signin_manager.h" |
21 #include "content/public/browser/browser_thread.h" | 22 #include "content/public/browser/browser_thread.h" |
22 #include "jni/BookmarksBridge_jni.h" | 23 #include "jni/BookmarksBridge_jni.h" |
23 | 24 |
24 using base::android::AttachCurrentThread; | 25 using base::android::AttachCurrentThread; |
25 using base::android::ConvertUTF8ToJavaString; | 26 using base::android::ConvertUTF8ToJavaString; |
26 using base::android::ConvertUTF16ToJavaString; | 27 using base::android::ConvertUTF16ToJavaString; |
27 using base::android::ScopedJavaLocalRef; | 28 using base::android::ScopedJavaLocalRef; |
28 using base::android::ScopedJavaGlobalRef; | 29 using base::android::ScopedJavaGlobalRef; |
| 30 using bookmarks::android::JavaBookmarkIdGetId; |
| 31 using bookmarks::android::JavaBookmarkIdGetType; |
| 32 using bookmarks::BookmarkType; |
29 using content::BrowserThread; | 33 using content::BrowserThread; |
30 | 34 |
31 // Should mirror constants in BookmarksBridge.java | 35 namespace { |
32 static const int kBookmarkTypeNormal = 0; | |
33 static const int kBookmarkTypePartner = 1; | |
34 | 36 |
35 namespace { | |
36 class BookmarkNodeCreationTimeCompareFunctor { | 37 class BookmarkNodeCreationTimeCompareFunctor { |
37 public: | 38 public: |
38 bool operator()(const BookmarkNode* lhs, const BookmarkNode* rhs) { | 39 bool operator()(const BookmarkNode* lhs, const BookmarkNode* rhs) { |
39 return lhs->date_added().ToJavaTime() > rhs->date_added().ToJavaTime(); | 40 return lhs->date_added().ToJavaTime() > rhs->date_added().ToJavaTime(); |
40 } | 41 } |
41 }; | 42 }; |
42 } // namespace | 43 } // namespace |
43 | 44 |
44 BookmarksBridge::BookmarksBridge(JNIEnv* env, | 45 BookmarksBridge::BookmarksBridge(JNIEnv* env, |
45 jobject obj, | 46 jobject obj, |
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
162 } | 163 } |
163 | 164 |
164 // Partner bookmark root node is under mobile node. | 165 // Partner bookmark root node is under mobile node. |
165 if (parent == bookmark_model_->mobile_node() && get_folders && | 166 if (parent == bookmark_model_->mobile_node() && get_folders && |
166 partner_bookmarks_shim_->HasPartnerBookmarks() && | 167 partner_bookmarks_shim_->HasPartnerBookmarks() && |
167 IsReachable(partner_bookmarks_shim_->GetPartnerBookmarksRoot())) { | 168 IsReachable(partner_bookmarks_shim_->GetPartnerBookmarksRoot())) { |
168 Java_BookmarksBridge_addToBookmarkIdList( | 169 Java_BookmarksBridge_addToBookmarkIdList( |
169 env, | 170 env, |
170 j_result_obj, | 171 j_result_obj, |
171 partner_bookmarks_shim_->GetPartnerBookmarksRoot()->id(), | 172 partner_bookmarks_shim_->GetPartnerBookmarksRoot()->id(), |
172 kBookmarkTypePartner); | 173 BookmarkType::PARTNER); |
173 } | 174 } |
174 } | 175 } |
175 | 176 |
176 void BookmarksBridge::GetAllBookmarkIDsOrderedByCreationDate( | 177 void BookmarksBridge::GetAllBookmarkIDsOrderedByCreationDate( |
177 JNIEnv* env, | 178 JNIEnv* env, |
178 jobject obj, | 179 jobject obj, |
179 jobject j_result_obj) { | 180 jobject j_result_obj) { |
180 DCHECK(IsLoaded()); | 181 DCHECK(IsLoaded()); |
181 std::list<const BookmarkNode*> folders; | 182 std::list<const BookmarkNode*> folders; |
182 std::vector<const BookmarkNode*> result; | 183 std::vector<const BookmarkNode*> result; |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
251 DCHECK(IsLoaded()); | 252 DCHECK(IsLoaded()); |
252 return GetNodeByID(id, type); | 253 return GetNodeByID(id, type); |
253 } | 254 } |
254 | 255 |
255 void BookmarksBridge::GetBookmarksForFolder(JNIEnv* env, | 256 void BookmarksBridge::GetBookmarksForFolder(JNIEnv* env, |
256 jobject obj, | 257 jobject obj, |
257 jobject j_folder_id_obj, | 258 jobject j_folder_id_obj, |
258 jobject j_callback_obj, | 259 jobject j_callback_obj, |
259 jobject j_result_obj) { | 260 jobject j_result_obj) { |
260 DCHECK(IsLoaded()); | 261 DCHECK(IsLoaded()); |
261 long folder_id = Java_BookmarkId_getId(env, j_folder_id_obj); | 262 long folder_id = JavaBookmarkIdGetId(env, j_folder_id_obj); |
262 int type = Java_BookmarkId_getType(env, j_folder_id_obj); | 263 int type = JavaBookmarkIdGetType(env, j_folder_id_obj); |
263 const BookmarkNode* folder = GetFolderWithFallback(folder_id, type); | 264 const BookmarkNode* folder = GetFolderWithFallback(folder_id, type); |
264 | 265 |
265 if (!folder->is_folder() || !IsReachable(folder)) | 266 if (!folder->is_folder() || !IsReachable(folder)) |
266 return; | 267 return; |
267 | 268 |
268 // Recreate the java bookmarkId object due to fallback. | 269 // Recreate the java bookmarkId object due to fallback. |
269 ScopedJavaLocalRef<jobject> folder_id_obj = | 270 ScopedJavaLocalRef<jobject> folder_id_obj = |
270 Java_BookmarksBridge_createBookmarkId( | 271 Java_BookmarksBridge_createBookmarkId( |
271 env, folder->id(), GetBookmarkType(folder)); | 272 env, folder->id(), GetBookmarkType(folder)); |
272 j_folder_id_obj = folder_id_obj.obj(); | 273 j_folder_id_obj = folder_id_obj.obj(); |
(...skipping 18 matching lines...) Expand all Loading... |
291 env, j_callback_obj, j_folder_id_obj, j_result_obj); | 292 env, j_callback_obj, j_folder_id_obj, j_result_obj); |
292 } | 293 } |
293 } | 294 } |
294 | 295 |
295 void BookmarksBridge::GetCurrentFolderHierarchy(JNIEnv* env, | 296 void BookmarksBridge::GetCurrentFolderHierarchy(JNIEnv* env, |
296 jobject obj, | 297 jobject obj, |
297 jobject j_folder_id_obj, | 298 jobject j_folder_id_obj, |
298 jobject j_callback_obj, | 299 jobject j_callback_obj, |
299 jobject j_result_obj) { | 300 jobject j_result_obj) { |
300 DCHECK(IsLoaded()); | 301 DCHECK(IsLoaded()); |
301 long folder_id = Java_BookmarkId_getId(env, j_folder_id_obj); | 302 long folder_id = JavaBookmarkIdGetId(env, j_folder_id_obj); |
302 int type = Java_BookmarkId_getType(env, j_folder_id_obj); | 303 int type = JavaBookmarkIdGetType(env, j_folder_id_obj); |
303 const BookmarkNode* folder = GetFolderWithFallback(folder_id, type); | 304 const BookmarkNode* folder = GetFolderWithFallback(folder_id, type); |
304 | 305 |
305 if (!folder->is_folder() || !IsReachable(folder)) | 306 if (!folder->is_folder() || !IsReachable(folder)) |
306 return; | 307 return; |
307 | 308 |
308 // Recreate the java bookmarkId object due to fallback. | 309 // Recreate the java bookmarkId object due to fallback. |
309 ScopedJavaLocalRef<jobject> folder_id_obj = | 310 ScopedJavaLocalRef<jobject> folder_id_obj = |
310 Java_BookmarksBridge_createBookmarkId( | 311 Java_BookmarksBridge_createBookmarkId( |
311 env, folder->id(), GetBookmarkType(folder)); | 312 env, folder->id(), GetBookmarkType(folder)); |
312 j_folder_id_obj = folder_id_obj.obj(); | 313 j_folder_id_obj = folder_id_obj.obj(); |
313 | 314 |
314 // Get the folder hierarchy. | 315 // Get the folder hierarchy. |
315 const BookmarkNode* node = folder; | 316 const BookmarkNode* node = folder; |
316 while (node) { | 317 while (node) { |
317 ExtractBookmarkNodeInformation(node, j_result_obj); | 318 ExtractBookmarkNodeInformation(node, j_result_obj); |
318 node = GetParentNode(node); | 319 node = GetParentNode(node); |
319 } | 320 } |
320 | 321 |
321 Java_BookmarksCallback_onBookmarksFolderHierarchyAvailable( | 322 Java_BookmarksCallback_onBookmarksFolderHierarchyAvailable( |
322 env, j_callback_obj, j_folder_id_obj, j_result_obj); | 323 env, j_callback_obj, j_folder_id_obj, j_result_obj); |
323 } | 324 } |
324 | 325 |
325 void BookmarksBridge::DeleteBookmark(JNIEnv* env, | 326 void BookmarksBridge::DeleteBookmark(JNIEnv* env, |
326 jobject obj, | 327 jobject obj, |
327 jobject j_bookmark_id_obj) { | 328 jobject j_bookmark_id_obj) { |
328 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 329 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
329 DCHECK(IsLoaded()); | 330 DCHECK(IsLoaded()); |
330 | 331 |
331 long bookmark_id = Java_BookmarkId_getId(env, j_bookmark_id_obj); | 332 long bookmark_id = JavaBookmarkIdGetId(env, j_bookmark_id_obj); |
332 int type = Java_BookmarkId_getType(env, j_bookmark_id_obj); | 333 int type = JavaBookmarkIdGetType(env, j_bookmark_id_obj); |
333 const BookmarkNode* node = GetNodeByID(bookmark_id, type); | 334 const BookmarkNode* node = GetNodeByID(bookmark_id, type); |
334 if (!IsEditable(node)) { | 335 if (!IsEditable(node)) { |
335 NOTREACHED(); | 336 NOTREACHED(); |
336 return; | 337 return; |
337 } | 338 } |
338 | 339 |
339 if (partner_bookmarks_shim_->IsPartnerBookmark(node)) { | 340 if (partner_bookmarks_shim_->IsPartnerBookmark(node)) { |
340 partner_bookmarks_shim_->RemoveBookmark(node); | 341 partner_bookmarks_shim_->RemoveBookmark(node); |
341 } else { | 342 } else { |
342 const BookmarkNode* parent_node = GetParentNode(node); | 343 const BookmarkNode* parent_node = GetParentNode(node); |
343 bookmark_model_->Remove(parent_node, parent_node->GetIndexOf(node)); | 344 bookmark_model_->Remove(parent_node, parent_node->GetIndexOf(node)); |
344 } | 345 } |
345 } | 346 } |
346 | 347 |
347 void BookmarksBridge::MoveBookmark(JNIEnv* env, | 348 void BookmarksBridge::MoveBookmark(JNIEnv* env, |
348 jobject obj, | 349 jobject obj, |
349 jobject j_bookmark_id_obj, | 350 jobject j_bookmark_id_obj, |
350 jobject j_parent_id_obj, | 351 jobject j_parent_id_obj, |
351 jint index) { | 352 jint index) { |
352 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 353 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
353 DCHECK(IsLoaded()); | 354 DCHECK(IsLoaded()); |
354 | 355 |
355 long bookmark_id = Java_BookmarkId_getId(env, j_bookmark_id_obj); | 356 long bookmark_id = JavaBookmarkIdGetId(env, j_bookmark_id_obj); |
356 int type = Java_BookmarkId_getType(env, j_bookmark_id_obj); | 357 int type = JavaBookmarkIdGetType(env, j_bookmark_id_obj); |
357 const BookmarkNode* node = GetNodeByID(bookmark_id, type); | 358 const BookmarkNode* node = GetNodeByID(bookmark_id, type); |
358 if (!IsEditable(node)) { | 359 if (!IsEditable(node)) { |
359 NOTREACHED(); | 360 NOTREACHED(); |
360 return; | 361 return; |
361 } | 362 } |
362 bookmark_id = Java_BookmarkId_getId(env, j_parent_id_obj); | 363 bookmark_id = JavaBookmarkIdGetId(env, j_parent_id_obj); |
363 type = Java_BookmarkId_getType(env, j_parent_id_obj); | 364 type = JavaBookmarkIdGetType(env, j_parent_id_obj); |
364 const BookmarkNode* new_parent_node = GetNodeByID(bookmark_id, type); | 365 const BookmarkNode* new_parent_node = GetNodeByID(bookmark_id, type); |
365 bookmark_model_->Move(node, new_parent_node, index); | 366 bookmark_model_->Move(node, new_parent_node, index); |
366 } | 367 } |
367 | 368 |
| 369 jlong BookmarksBridge::GetNativeBookmarkModel(JNIEnv*env, jobject obj) { |
| 370 return reinterpret_cast<jlong>(bookmark_model_); |
| 371 } |
| 372 |
368 ScopedJavaLocalRef<jobject> BookmarksBridge::CreateJavaBookmark( | 373 ScopedJavaLocalRef<jobject> BookmarksBridge::CreateJavaBookmark( |
369 const BookmarkNode* node) { | 374 const BookmarkNode* node) { |
370 JNIEnv* env = AttachCurrentThread(); | 375 JNIEnv* env = AttachCurrentThread(); |
371 | 376 |
372 const BookmarkNode* parent = GetParentNode(node); | 377 const BookmarkNode* parent = GetParentNode(node); |
373 int64 parent_id = parent ? parent->id() : -1; | 378 int64 parent_id = parent ? parent->id() : -1; |
374 | 379 |
375 std::string url; | 380 std::string url; |
376 if (node->is_url()) | 381 if (node->is_url()) |
377 url = node->url().spec(); | 382 url = node->url().spec(); |
(...skipping 15 matching lines...) Expand all Loading... |
393 jobject j_result_obj) { | 398 jobject j_result_obj) { |
394 JNIEnv* env = AttachCurrentThread(); | 399 JNIEnv* env = AttachCurrentThread(); |
395 if (!IsReachable(node)) | 400 if (!IsReachable(node)) |
396 return; | 401 return; |
397 Java_BookmarksBridge_addToList( | 402 Java_BookmarksBridge_addToList( |
398 env, j_result_obj, CreateJavaBookmark(node).obj()); | 403 env, j_result_obj, CreateJavaBookmark(node).obj()); |
399 } | 404 } |
400 | 405 |
401 const BookmarkNode* BookmarksBridge::GetNodeByID(long node_id, int type) { | 406 const BookmarkNode* BookmarksBridge::GetNodeByID(long node_id, int type) { |
402 const BookmarkNode* node; | 407 const BookmarkNode* node; |
403 if (type == kBookmarkTypePartner) { | 408 if (type == BookmarkType::PARTNER) { |
404 node = partner_bookmarks_shim_->GetNodeByID( | 409 node = partner_bookmarks_shim_->GetNodeByID( |
405 static_cast<int64>(node_id)); | 410 static_cast<int64>(node_id)); |
406 } else { | 411 } else { |
407 node = bookmarks::GetBookmarkNodeByID(bookmark_model_, | 412 node = bookmarks::GetBookmarkNodeByID(bookmark_model_, |
408 static_cast<int64>(node_id)); | 413 static_cast<int64>(node_id)); |
409 } | 414 } |
410 return node; | 415 return node; |
411 } | 416 } |
412 | 417 |
413 const BookmarkNode* BookmarksBridge::GetFolderWithFallback(long folder_id, | 418 const BookmarkNode* BookmarksBridge::GetFolderWithFallback(long folder_id, |
(...skipping 29 matching lines...) Expand all Loading... |
443 DCHECK(IsLoaded()); | 448 DCHECK(IsLoaded()); |
444 if (node == partner_bookmarks_shim_->GetPartnerBookmarksRoot()) { | 449 if (node == partner_bookmarks_shim_->GetPartnerBookmarksRoot()) { |
445 return bookmark_model_->mobile_node(); | 450 return bookmark_model_->mobile_node(); |
446 } else { | 451 } else { |
447 return node->parent(); | 452 return node->parent(); |
448 } | 453 } |
449 } | 454 } |
450 | 455 |
451 int BookmarksBridge::GetBookmarkType(const BookmarkNode* node) { | 456 int BookmarksBridge::GetBookmarkType(const BookmarkNode* node) { |
452 if (partner_bookmarks_shim_->IsPartnerBookmark(node)) | 457 if (partner_bookmarks_shim_->IsPartnerBookmark(node)) |
453 return kBookmarkTypePartner; | 458 return BookmarkType::PARTNER; |
454 else | 459 else |
455 return kBookmarkTypeNormal; | 460 return BookmarkType::NORMAL; |
456 } | 461 } |
457 | 462 |
458 base::string16 BookmarksBridge::GetTitle(const BookmarkNode* node) const { | 463 base::string16 BookmarksBridge::GetTitle(const BookmarkNode* node) const { |
459 if (partner_bookmarks_shim_->IsPartnerBookmark(node)) | 464 if (partner_bookmarks_shim_->IsPartnerBookmark(node)) |
460 return partner_bookmarks_shim_->GetTitle(node); | 465 return partner_bookmarks_shim_->GetTitle(node); |
461 return node->GetTitle(); | 466 return node->GetTitle(); |
462 } | 467 } |
463 | 468 |
464 bool BookmarksBridge::IsReachable(const BookmarkNode* node) const { | 469 bool BookmarksBridge::IsReachable(const BookmarkNode* node) const { |
465 if (!partner_bookmarks_shim_->IsPartnerBookmark(node)) | 470 if (!partner_bookmarks_shim_->IsPartnerBookmark(node)) |
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
643 BookmarkModelChanged(); | 648 BookmarkModelChanged(); |
644 } | 649 } |
645 | 650 |
646 void BookmarksBridge::PartnerShimLoaded(PartnerBookmarksShim* shim) { | 651 void BookmarksBridge::PartnerShimLoaded(PartnerBookmarksShim* shim) { |
647 NotifyIfDoneLoading(); | 652 NotifyIfDoneLoading(); |
648 } | 653 } |
649 | 654 |
650 void BookmarksBridge::ShimBeingDeleted(PartnerBookmarksShim* shim) { | 655 void BookmarksBridge::ShimBeingDeleted(PartnerBookmarksShim* shim) { |
651 partner_bookmarks_shim_ = NULL; | 656 partner_bookmarks_shim_ = NULL; |
652 } | 657 } |
OLD | NEW |