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

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: added back missing bookmark_type_list.h bookmark_type.h 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 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
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
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
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
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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698