Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(18)

Side by Side Diff: chrome/browser/android/bookmarks/bookmarks_bridge.cc

Issue 459973004: [Android] EnhancedBookmarksBridge for bookmark description read&write. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: java DEPS fix Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
83 // static 84 // static
84 bool BookmarksBridge::RegisterBookmarksBridge(JNIEnv* env) { 85 bool BookmarksBridge::RegisterBookmarksBridge(JNIEnv* env) {
85 return RegisterNativesImpl(env); 86 return RegisterNativesImpl(env);
86 } 87 }
87 88
88 static jlong Init(JNIEnv* env, jobject obj, jobject j_profile) { 89 static jlong Init(JNIEnv* env, jobject obj, jobject j_profile) {
89 BookmarksBridge* delegate = new BookmarksBridge(env, obj, j_profile); 90 BookmarksBridge* delegate = new BookmarksBridge(env, obj, j_profile);
90 return reinterpret_cast<intptr_t>(delegate); 91 return reinterpret_cast<intptr_t>(delegate);
91 } 92 }
92 93
94 static jlong GetNativeBookmarkModel(JNIEnv* env,
95 jclass caller,
96 jobject j_profile) {
97 Profile *profile = ProfileAndroid::FromProfileAndroid(j_profile);
98 BookmarkModel *bookmark_model_ = BookmarkModelFactory::GetForProfile(profile);
99 return reinterpret_cast<jlong>(bookmark_model_);
100 }
101
93 static bool IsEditBookmarksEnabled() { 102 static bool IsEditBookmarksEnabled() {
94 return ProfileManager::GetLastUsedProfile()->GetPrefs()->GetBoolean( 103 return ProfileManager::GetLastUsedProfile()->GetPrefs()->GetBoolean(
95 prefs::kEditBookmarksEnabled); 104 prefs::kEditBookmarksEnabled);
96 } 105 }
97 106
98 static jboolean IsEditBookmarksEnabled(JNIEnv* env, jclass clazz) { 107 static jboolean IsEditBookmarksEnabled(JNIEnv* env, jclass clazz) {
99 return IsEditBookmarksEnabled(); 108 return IsEditBookmarksEnabled();
100 } 109 }
101 110
102 ScopedJavaLocalRef<jobject> BookmarksBridge::GetBookmarkByID(JNIEnv* env, 111 ScopedJavaLocalRef<jobject> BookmarksBridge::GetBookmarkByID(JNIEnv* env,
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
162 } 171 }
163 172
164 // Partner bookmark root node is under mobile node. 173 // Partner bookmark root node is under mobile node.
165 if (parent == bookmark_model_->mobile_node() && get_folders && 174 if (parent == bookmark_model_->mobile_node() && get_folders &&
166 partner_bookmarks_shim_->HasPartnerBookmarks() && 175 partner_bookmarks_shim_->HasPartnerBookmarks() &&
167 IsReachable(partner_bookmarks_shim_->GetPartnerBookmarksRoot())) { 176 IsReachable(partner_bookmarks_shim_->GetPartnerBookmarksRoot())) {
168 Java_BookmarksBridge_addToBookmarkIdList( 177 Java_BookmarksBridge_addToBookmarkIdList(
169 env, 178 env,
170 j_result_obj, 179 j_result_obj,
171 partner_bookmarks_shim_->GetPartnerBookmarksRoot()->id(), 180 partner_bookmarks_shim_->GetPartnerBookmarksRoot()->id(),
172 kBookmarkTypePartner); 181 BookmarkType::PARTNER);
173 } 182 }
174 } 183 }
175 184
176 void BookmarksBridge::GetAllBookmarkIDsOrderedByCreationDate( 185 void BookmarksBridge::GetAllBookmarkIDsOrderedByCreationDate(
177 JNIEnv* env, 186 JNIEnv* env,
178 jobject obj, 187 jobject obj,
179 jobject j_result_obj) { 188 jobject j_result_obj) {
180 DCHECK(IsLoaded()); 189 DCHECK(IsLoaded());
181 std::list<const BookmarkNode*> folders; 190 std::list<const BookmarkNode*> folders;
182 std::vector<const BookmarkNode*> result; 191 std::vector<const BookmarkNode*> result;
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
251 DCHECK(IsLoaded()); 260 DCHECK(IsLoaded());
252 return GetNodeByID(id, type); 261 return GetNodeByID(id, type);
253 } 262 }
254 263
255 void BookmarksBridge::GetBookmarksForFolder(JNIEnv* env, 264 void BookmarksBridge::GetBookmarksForFolder(JNIEnv* env,
256 jobject obj, 265 jobject obj,
257 jobject j_folder_id_obj, 266 jobject j_folder_id_obj,
258 jobject j_callback_obj, 267 jobject j_callback_obj,
259 jobject j_result_obj) { 268 jobject j_result_obj) {
260 DCHECK(IsLoaded()); 269 DCHECK(IsLoaded());
261 long folder_id = Java_BookmarkId_getId(env, j_folder_id_obj); 270 long folder_id = JavaBookmarkIdGetId(env, j_folder_id_obj);
262 int type = Java_BookmarkId_getType(env, j_folder_id_obj); 271 int type = JavaBookmarkIdGetType(env, j_folder_id_obj);
263 const BookmarkNode* folder = GetFolderWithFallback(folder_id, type); 272 const BookmarkNode* folder = GetFolderWithFallback(folder_id, type);
264 273
265 if (!folder->is_folder() || !IsReachable(folder)) 274 if (!folder->is_folder() || !IsReachable(folder))
266 return; 275 return;
267 276
268 // Recreate the java bookmarkId object due to fallback. 277 // Recreate the java bookmarkId object due to fallback.
269 ScopedJavaLocalRef<jobject> folder_id_obj = 278 ScopedJavaLocalRef<jobject> folder_id_obj =
270 Java_BookmarksBridge_createBookmarkId( 279 Java_BookmarksBridge_createBookmarkId(
271 env, folder->id(), GetBookmarkType(folder)); 280 env, folder->id(), GetBookmarkType(folder));
272 j_folder_id_obj = folder_id_obj.obj(); 281 j_folder_id_obj = folder_id_obj.obj();
(...skipping 18 matching lines...) Expand all
291 env, j_callback_obj, j_folder_id_obj, j_result_obj); 300 env, j_callback_obj, j_folder_id_obj, j_result_obj);
292 } 301 }
293 } 302 }
294 303
295 void BookmarksBridge::GetCurrentFolderHierarchy(JNIEnv* env, 304 void BookmarksBridge::GetCurrentFolderHierarchy(JNIEnv* env,
296 jobject obj, 305 jobject obj,
297 jobject j_folder_id_obj, 306 jobject j_folder_id_obj,
298 jobject j_callback_obj, 307 jobject j_callback_obj,
299 jobject j_result_obj) { 308 jobject j_result_obj) {
300 DCHECK(IsLoaded()); 309 DCHECK(IsLoaded());
301 long folder_id = Java_BookmarkId_getId(env, j_folder_id_obj); 310 long folder_id = JavaBookmarkIdGetId(env, j_folder_id_obj);
302 int type = Java_BookmarkId_getType(env, j_folder_id_obj); 311 int type = JavaBookmarkIdGetType(env, j_folder_id_obj);
303 const BookmarkNode* folder = GetFolderWithFallback(folder_id, type); 312 const BookmarkNode* folder = GetFolderWithFallback(folder_id, type);
304 313
305 if (!folder->is_folder() || !IsReachable(folder)) 314 if (!folder->is_folder() || !IsReachable(folder))
306 return; 315 return;
307 316
308 // Recreate the java bookmarkId object due to fallback. 317 // Recreate the java bookmarkId object due to fallback.
309 ScopedJavaLocalRef<jobject> folder_id_obj = 318 ScopedJavaLocalRef<jobject> folder_id_obj =
310 Java_BookmarksBridge_createBookmarkId( 319 Java_BookmarksBridge_createBookmarkId(
311 env, folder->id(), GetBookmarkType(folder)); 320 env, folder->id(), GetBookmarkType(folder));
312 j_folder_id_obj = folder_id_obj.obj(); 321 j_folder_id_obj = folder_id_obj.obj();
313 322
314 // Get the folder hierarchy. 323 // Get the folder hierarchy.
315 const BookmarkNode* node = folder; 324 const BookmarkNode* node = folder;
316 while (node) { 325 while (node) {
317 ExtractBookmarkNodeInformation(node, j_result_obj); 326 ExtractBookmarkNodeInformation(node, j_result_obj);
318 node = GetParentNode(node); 327 node = GetParentNode(node);
319 } 328 }
320 329
321 Java_BookmarksCallback_onBookmarksFolderHierarchyAvailable( 330 Java_BookmarksCallback_onBookmarksFolderHierarchyAvailable(
322 env, j_callback_obj, j_folder_id_obj, j_result_obj); 331 env, j_callback_obj, j_folder_id_obj, j_result_obj);
323 } 332 }
324 333
325 void BookmarksBridge::DeleteBookmark(JNIEnv* env, 334 void BookmarksBridge::DeleteBookmark(JNIEnv* env,
326 jobject obj, 335 jobject obj,
327 jobject j_bookmark_id_obj) { 336 jobject j_bookmark_id_obj) {
328 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 337 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
329 DCHECK(IsLoaded()); 338 DCHECK(IsLoaded());
330 339
331 long bookmark_id = Java_BookmarkId_getId(env, j_bookmark_id_obj); 340 long bookmark_id = JavaBookmarkIdGetId(env, j_bookmark_id_obj);
332 int type = Java_BookmarkId_getType(env, j_bookmark_id_obj); 341 int type = JavaBookmarkIdGetType(env, j_bookmark_id_obj);
333 const BookmarkNode* node = GetNodeByID(bookmark_id, type); 342 const BookmarkNode* node = GetNodeByID(bookmark_id, type);
334 if (!IsEditable(node)) { 343 if (!IsEditable(node)) {
335 NOTREACHED(); 344 NOTREACHED();
336 return; 345 return;
337 } 346 }
338 347
339 if (partner_bookmarks_shim_->IsPartnerBookmark(node)) { 348 if (partner_bookmarks_shim_->IsPartnerBookmark(node)) {
340 partner_bookmarks_shim_->RemoveBookmark(node); 349 partner_bookmarks_shim_->RemoveBookmark(node);
341 } else { 350 } else {
342 const BookmarkNode* parent_node = GetParentNode(node); 351 const BookmarkNode* parent_node = GetParentNode(node);
343 bookmark_model_->Remove(parent_node, parent_node->GetIndexOf(node)); 352 bookmark_model_->Remove(parent_node, parent_node->GetIndexOf(node));
344 } 353 }
345 } 354 }
346 355
347 void BookmarksBridge::MoveBookmark(JNIEnv* env, 356 void BookmarksBridge::MoveBookmark(JNIEnv* env,
348 jobject obj, 357 jobject obj,
349 jobject j_bookmark_id_obj, 358 jobject j_bookmark_id_obj,
350 jobject j_parent_id_obj, 359 jobject j_parent_id_obj,
351 jint index) { 360 jint index) {
352 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 361 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
353 DCHECK(IsLoaded()); 362 DCHECK(IsLoaded());
354 363
355 long bookmark_id = Java_BookmarkId_getId(env, j_bookmark_id_obj); 364 long bookmark_id = JavaBookmarkIdGetId(env, j_bookmark_id_obj);
356 int type = Java_BookmarkId_getType(env, j_bookmark_id_obj); 365 int type = JavaBookmarkIdGetType(env, j_bookmark_id_obj);
357 const BookmarkNode* node = GetNodeByID(bookmark_id, type); 366 const BookmarkNode* node = GetNodeByID(bookmark_id, type);
358 if (!IsEditable(node)) { 367 if (!IsEditable(node)) {
359 NOTREACHED(); 368 NOTREACHED();
360 return; 369 return;
361 } 370 }
362 bookmark_id = Java_BookmarkId_getId(env, j_parent_id_obj); 371 bookmark_id = JavaBookmarkIdGetId(env, j_parent_id_obj);
363 type = Java_BookmarkId_getType(env, j_parent_id_obj); 372 type = JavaBookmarkIdGetType(env, j_parent_id_obj);
364 const BookmarkNode* new_parent_node = GetNodeByID(bookmark_id, type); 373 const BookmarkNode* new_parent_node = GetNodeByID(bookmark_id, type);
365 bookmark_model_->Move(node, new_parent_node, index); 374 bookmark_model_->Move(node, new_parent_node, index);
366 } 375 }
367 376
368 ScopedJavaLocalRef<jobject> BookmarksBridge::CreateJavaBookmark( 377 ScopedJavaLocalRef<jobject> BookmarksBridge::CreateJavaBookmark(
369 const BookmarkNode* node) { 378 const BookmarkNode* node) {
370 JNIEnv* env = AttachCurrentThread(); 379 JNIEnv* env = AttachCurrentThread();
371 380
372 const BookmarkNode* parent = GetParentNode(node); 381 const BookmarkNode* parent = GetParentNode(node);
373 int64 parent_id = parent ? parent->id() : -1; 382 int64 parent_id = parent ? parent->id() : -1;
(...skipping 19 matching lines...) Expand all
393 jobject j_result_obj) { 402 jobject j_result_obj) {
394 JNIEnv* env = AttachCurrentThread(); 403 JNIEnv* env = AttachCurrentThread();
395 if (!IsReachable(node)) 404 if (!IsReachable(node))
396 return; 405 return;
397 Java_BookmarksBridge_addToList( 406 Java_BookmarksBridge_addToList(
398 env, j_result_obj, CreateJavaBookmark(node).obj()); 407 env, j_result_obj, CreateJavaBookmark(node).obj());
399 } 408 }
400 409
401 const BookmarkNode* BookmarksBridge::GetNodeByID(long node_id, int type) { 410 const BookmarkNode* BookmarksBridge::GetNodeByID(long node_id, int type) {
402 const BookmarkNode* node; 411 const BookmarkNode* node;
403 if (type == kBookmarkTypePartner) { 412 if (type == BookmarkType::PARTNER) {
404 node = partner_bookmarks_shim_->GetNodeByID( 413 node = partner_bookmarks_shim_->GetNodeByID(
405 static_cast<int64>(node_id)); 414 static_cast<int64>(node_id));
406 } else { 415 } else {
407 node = bookmarks::GetBookmarkNodeByID(bookmark_model_, 416 node = bookmarks::GetBookmarkNodeByID(bookmark_model_,
408 static_cast<int64>(node_id)); 417 static_cast<int64>(node_id));
409 } 418 }
410 return node; 419 return node;
411 } 420 }
412 421
413 const BookmarkNode* BookmarksBridge::GetFolderWithFallback(long folder_id, 422 const BookmarkNode* BookmarksBridge::GetFolderWithFallback(long folder_id,
(...skipping 29 matching lines...) Expand all
443 DCHECK(IsLoaded()); 452 DCHECK(IsLoaded());
444 if (node == partner_bookmarks_shim_->GetPartnerBookmarksRoot()) { 453 if (node == partner_bookmarks_shim_->GetPartnerBookmarksRoot()) {
445 return bookmark_model_->mobile_node(); 454 return bookmark_model_->mobile_node();
446 } else { 455 } else {
447 return node->parent(); 456 return node->parent();
448 } 457 }
449 } 458 }
450 459
451 int BookmarksBridge::GetBookmarkType(const BookmarkNode* node) { 460 int BookmarksBridge::GetBookmarkType(const BookmarkNode* node) {
452 if (partner_bookmarks_shim_->IsPartnerBookmark(node)) 461 if (partner_bookmarks_shim_->IsPartnerBookmark(node))
453 return kBookmarkTypePartner; 462 return BookmarkType::PARTNER;
454 else 463 else
455 return kBookmarkTypeNormal; 464 return BookmarkType::NORMAL;
456 } 465 }
457 466
458 base::string16 BookmarksBridge::GetTitle(const BookmarkNode* node) const { 467 base::string16 BookmarksBridge::GetTitle(const BookmarkNode* node) const {
459 if (partner_bookmarks_shim_->IsPartnerBookmark(node)) 468 if (partner_bookmarks_shim_->IsPartnerBookmark(node))
460 return partner_bookmarks_shim_->GetTitle(node); 469 return partner_bookmarks_shim_->GetTitle(node);
461 return node->GetTitle(); 470 return node->GetTitle();
462 } 471 }
463 472
464 bool BookmarksBridge::IsReachable(const BookmarkNode* node) const { 473 bool BookmarksBridge::IsReachable(const BookmarkNode* node) const {
465 if (!partner_bookmarks_shim_->IsPartnerBookmark(node)) 474 if (!partner_bookmarks_shim_->IsPartnerBookmark(node))
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after
643 BookmarkModelChanged(); 652 BookmarkModelChanged();
644 } 653 }
645 654
646 void BookmarksBridge::PartnerShimLoaded(PartnerBookmarksShim* shim) { 655 void BookmarksBridge::PartnerShimLoaded(PartnerBookmarksShim* shim) {
647 NotifyIfDoneLoading(); 656 NotifyIfDoneLoading();
648 } 657 }
649 658
650 void BookmarksBridge::ShimBeingDeleted(PartnerBookmarksShim* shim) { 659 void BookmarksBridge::ShimBeingDeleted(PartnerBookmarksShim* shim) {
651 partner_bookmarks_shim_ = NULL; 660 partner_bookmarks_shim_ = NULL;
652 } 661 }
OLDNEW
« no previous file with comments | « chrome/browser/android/bookmarks/bookmarks_bridge.h ('k') | chrome/browser/android/chrome_jni_registrar.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698