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

Side by Side Diff: chrome/browser/android/provider/chrome_browser_provider.cc

Issue 1233673002: Fix componentization of chrome/browser/bookmarks (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix "gn check" and compilation on Mac Created 5 years, 5 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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/provider/chrome_browser_provider.h" 5 #include "chrome/browser/android/provider/chrome_browser_provider.h"
6 6
7 #include <cmath> 7 #include <cmath>
8 #include <list> 8 #include <list>
9 #include <utility> 9 #include <utility>
10 10
11 #include "base/android/jni_android.h" 11 #include "base/android/jni_android.h"
12 #include "base/android/jni_array.h" 12 #include "base/android/jni_array.h"
13 #include "base/android/jni_string.h" 13 #include "base/android/jni_string.h"
14 #include "base/logging.h" 14 #include "base/logging.h"
15 #include "base/memory/ref_counted_memory.h" 15 #include "base/memory/ref_counted_memory.h"
16 #include "base/strings/utf_string_conversions.h" 16 #include "base/strings/utf_string_conversions.h"
17 #include "base/task/cancelable_task_tracker.h" 17 #include "base/task/cancelable_task_tracker.h"
18 #include "base/time/time.h" 18 #include "base/time/time.h"
19 #include "chrome/browser/android/provider/blocking_ui_thread_async_request.h" 19 #include "chrome/browser/android/provider/blocking_ui_thread_async_request.h"
20 #include "chrome/browser/android/provider/bookmark_model_observer_task.h" 20 #include "chrome/browser/android/provider/bookmark_model_observer_task.h"
21 #include "chrome/browser/android/provider/run_on_ui_thread_blocking.h" 21 #include "chrome/browser/android/provider/run_on_ui_thread_blocking.h"
22 #include "chrome/browser/bookmarks/bookmark_model_factory.h" 22 #include "chrome/browser/bookmarks/bookmark_model_factory.h"
23 #include "chrome/browser/bookmarks/chrome_bookmark_client.h" 23 #include "chrome/browser/bookmarks/managed_bookmark_service_factory.h"
24 #include "chrome/browser/bookmarks/chrome_bookmark_client_factory.h"
25 #include "chrome/browser/browser_process.h" 24 #include "chrome/browser/browser_process.h"
26 #include "chrome/browser/favicon/favicon_service_factory.h" 25 #include "chrome/browser/favicon/favicon_service_factory.h"
27 #include "chrome/browser/history/android/sqlite_cursor.h" 26 #include "chrome/browser/history/android/sqlite_cursor.h"
28 #include "chrome/browser/history/history_service_factory.h" 27 #include "chrome/browser/history/history_service_factory.h"
29 #include "chrome/browser/history/top_sites_factory.h" 28 #include "chrome/browser/history/top_sites_factory.h"
30 #include "chrome/browser/profiles/profile.h" 29 #include "chrome/browser/profiles/profile.h"
31 #include "chrome/browser/profiles/profile_manager.h" 30 #include "chrome/browser/profiles/profile_manager.h"
32 #include "chrome/browser/search_engines/template_url_service_factory.h" 31 #include "chrome/browser/search_engines/template_url_service_factory.h"
33 #include "components/bookmarks/browser/bookmark_model.h" 32 #include "components/bookmarks/browser/bookmark_model.h"
34 #include "components/bookmarks/browser/bookmark_utils.h" 33 #include "components/bookmarks/browser/bookmark_utils.h"
34 #include "components/bookmarks/managed/managed_bookmark_service.h"
35 #include "components/favicon/core/favicon_service.h" 35 #include "components/favicon/core/favicon_service.h"
36 #include "components/history/core/browser/android/android_history_types.h" 36 #include "components/history/core/browser/android/android_history_types.h"
37 #include "components/history/core/browser/history_service.h" 37 #include "components/history/core/browser/history_service.h"
38 #include "components/history/core/browser/top_sites.h" 38 #include "components/history/core/browser/top_sites.h"
39 #include "components/search_engines/template_url.h" 39 #include "components/search_engines/template_url.h"
40 #include "components/search_engines/template_url_service.h" 40 #include "components/search_engines/template_url_service.h"
41 #include "content/public/browser/browser_thread.h" 41 #include "content/public/browser/browser_thread.h"
42 #include "jni/ChromeBrowserProvider_jni.h" 42 #include "jni/ChromeBrowserProvider_jni.h"
43 #include "ui/base/layout.h" 43 #include "ui/base/layout.h"
44 #include "ui/base/resource/resource_bundle.h" 44 #include "ui/base/resource/resource_bundle.h"
45 #include "ui/gfx/favicon_size.h" 45 #include "ui/gfx/favicon_size.h"
46 46
47 using base::android::AttachCurrentThread; 47 using base::android::AttachCurrentThread;
48 using base::android::CheckException; 48 using base::android::CheckException;
49 using base::android::ClearException; 49 using base::android::ClearException;
50 using base::android::ConvertJavaStringToUTF16; 50 using base::android::ConvertJavaStringToUTF16;
51 using base::android::ConvertJavaStringToUTF8; 51 using base::android::ConvertJavaStringToUTF8;
52 using base::android::ConvertUTF8ToJavaString; 52 using base::android::ConvertUTF8ToJavaString;
53 using base::android::ConvertUTF16ToJavaString; 53 using base::android::ConvertUTF16ToJavaString;
54 using base::android::GetClass; 54 using base::android::GetClass;
55 using base::android::MethodID; 55 using base::android::MethodID;
56 using base::android::JavaRef; 56 using base::android::JavaRef;
57 using base::android::ScopedJavaGlobalRef; 57 using base::android::ScopedJavaGlobalRef;
58 using base::android::ScopedJavaLocalRef; 58 using base::android::ScopedJavaLocalRef;
59 using bookmarks::BookmarkModel; 59 using bookmarks::BookmarkModel;
60 using bookmarks::BookmarkNode; 60 using bookmarks::BookmarkNode;
61 using bookmarks::ManagedBookmarkService;
61 using content::BrowserThread; 62 using content::BrowserThread;
62 63
63 // After refactoring the following class hierarchy has been created in order 64 // After refactoring the following class hierarchy has been created in order
64 // to avoid repeating code again for the same basic kind of tasks, to enforce 65 // to avoid repeating code again for the same basic kind of tasks, to enforce
65 // the correct thread usage and to prevent known race conditions and deadlocks. 66 // the correct thread usage and to prevent known race conditions and deadlocks.
66 // 67 //
67 // - RunOnUIThreadBlocking: auxiliary class to run methods in the UI thread 68 // - RunOnUIThreadBlocking: auxiliary class to run methods in the UI thread
68 // blocking the current one until finished. Because of the provider threading 69 // blocking the current one until finished. Because of the provider threading
69 // expectations this cannot be used from the UI thread. 70 // expectations this cannot be used from the UI thread.
70 // 71 //
(...skipping 402 matching lines...) Expand 10 before | Expand all | Expand 10 after
473 parent->id(), result); 474 parent->id(), result);
474 } 475 }
475 476
476 private: 477 private:
477 DISALLOW_COPY_AND_ASSIGN(CreateBookmarksFolderOnceTask); 478 DISALLOW_COPY_AND_ASSIGN(CreateBookmarksFolderOnceTask);
478 }; 479 };
479 480
480 // Creates a Java BookmarkNode object for a node given its id. 481 // Creates a Java BookmarkNode object for a node given its id.
481 class GetEditableBookmarkFoldersTask : public BookmarkModelTask { 482 class GetEditableBookmarkFoldersTask : public BookmarkModelTask {
482 public: 483 public:
483 GetEditableBookmarkFoldersTask(ChromeBookmarkClient* client, 484 GetEditableBookmarkFoldersTask(
484 BookmarkModel* model) 485 ManagedBookmarkService* managed_bookmark_service,
485 : BookmarkModelTask(model), client_(client) {} 486 BookmarkModel* model)
487 : BookmarkModelTask(model),
488 managed_bookmark_service_(managed_bookmark_service) {}
486 489
487 void Run(ScopedJavaGlobalRef<jobject>* jroot) { 490 void Run(ScopedJavaGlobalRef<jobject>* jroot) {
488 RunOnUIThreadBlocking::Run( 491 RunOnUIThreadBlocking::Run(
489 base::Bind(&GetEditableBookmarkFoldersTask::RunOnUIThread, 492 base::Bind(&GetEditableBookmarkFoldersTask::RunOnUIThread,
490 client_, model(), jroot)); 493 managed_bookmark_service_, model(), jroot));
491 } 494 }
492 495
493 static void RunOnUIThread(ChromeBookmarkClient* client, 496 static void RunOnUIThread(ManagedBookmarkService* managed,
494 BookmarkModel* model, 497 BookmarkModel* model,
495 ScopedJavaGlobalRef<jobject>* jroot) { 498 ScopedJavaGlobalRef<jobject>* jroot) {
496 DCHECK_CURRENTLY_ON(BrowserThread::UI); 499 DCHECK_CURRENTLY_ON(BrowserThread::UI);
497 const BookmarkNode* root = model->root_node(); 500 const BookmarkNode* root = model->root_node();
498 if (!root || !root->is_folder()) 501 if (!root || !root->is_folder())
499 return; 502 return;
500 503
501 // The iterative approach is not possible because ScopedGlobalJavaRefs 504 // The iterative approach is not possible because ScopedGlobalJavaRefs
502 // cannot be copy-constructed, and therefore not used in STL containers. 505 // cannot be copy-constructed, and therefore not used in STL containers.
503 ConvertFolderSubtree(client, AttachCurrentThread(), root, 506 ConvertFolderSubtree(managed, AttachCurrentThread(), root,
504 ScopedJavaLocalRef<jobject>(), jroot); 507 ScopedJavaLocalRef<jobject>(), jroot);
505 } 508 }
506 509
507 private: 510 private:
508 static void ConvertFolderSubtree(ChromeBookmarkClient* client, 511 static void ConvertFolderSubtree(ManagedBookmarkService* managed,
509 JNIEnv* env, 512 JNIEnv* env,
510 const BookmarkNode* node, 513 const BookmarkNode* node,
511 const JavaRef<jobject>& parent_folder, 514 const JavaRef<jobject>& parent_folder,
512 ScopedJavaGlobalRef<jobject>* jfolder) { 515 ScopedJavaGlobalRef<jobject>* jfolder) {
513 DCHECK(node); 516 DCHECK(node);
514 DCHECK(node->is_folder()); 517 DCHECK(node->is_folder());
515 DCHECK(jfolder); 518 DCHECK(jfolder);
516 519
517 // Global refs should be used here for thread-safety reasons as this task 520 // Global refs should be used here for thread-safety reasons as this task
518 // might be invoked from a thread other than UI. All refs are scoped. 521 // might be invoked from a thread other than UI. All refs are scoped.
519 ConvertBookmarkNode(node, parent_folder, jfolder); 522 ConvertBookmarkNode(node, parent_folder, jfolder);
520 523
521 for (int i = 0; i < node->child_count(); ++i) { 524 for (int i = 0; i < node->child_count(); ++i) {
522 const BookmarkNode* child = node->GetChild(i); 525 const BookmarkNode* child = node->GetChild(i);
523 if (child->is_folder() && client->CanBeEditedByUser(child)) { 526 if (child->is_folder() && managed->CanBeEditedByUser(child)) {
524 ScopedJavaGlobalRef<jobject> jchild; 527 ScopedJavaGlobalRef<jobject> jchild;
525 ConvertFolderSubtree(client, env, child, *jfolder, &jchild); 528 ConvertFolderSubtree(managed, env, child, *jfolder, &jchild);
526 529
527 Java_BookmarkNode_addChild(env, jfolder->obj(), jchild.obj()); 530 Java_BookmarkNode_addChild(env, jfolder->obj(), jchild.obj());
528 if (ClearException(env)) { 531 if (ClearException(env)) {
529 LOG(WARNING) << "Java exception while adding child node."; 532 LOG(WARNING) << "Java exception while adding child node.";
530 return; 533 return;
531 } 534 }
532 } 535 }
533 } 536 }
534 } 537 }
535 538
536 ChromeBookmarkClient* client_; 539 ManagedBookmarkService* managed_bookmark_service_;
537 540
538 DISALLOW_COPY_AND_ASSIGN(GetEditableBookmarkFoldersTask); 541 DISALLOW_COPY_AND_ASSIGN(GetEditableBookmarkFoldersTask);
539 }; 542 };
540 543
541 // Creates a Java BookmarkNode object for a node given its id. 544 // Creates a Java BookmarkNode object for a node given its id.
542 class GetBookmarkNodeTask : public BookmarkModelTask { 545 class GetBookmarkNodeTask : public BookmarkModelTask {
543 public: 546 public:
544 explicit GetBookmarkNodeTask(BookmarkModel* model) 547 explicit GetBookmarkNodeTask(BookmarkModel* model)
545 : BookmarkModelTask(model) { 548 : BookmarkModelTask(model) {
546 } 549 }
(...skipping 950 matching lines...) Expand 10 before | Expand all | Expand 10 after
1497 return kInvalidBookmarkId; 1500 return kInvalidBookmarkId;
1498 1501
1499 CreateBookmarksFolderOnceTask task(bookmark_model_); 1502 CreateBookmarksFolderOnceTask task(bookmark_model_);
1500 return task.Run(title, parent_id); 1503 return task.Run(title, parent_id);
1501 } 1504 }
1502 1505
1503 ScopedJavaLocalRef<jobject> ChromeBrowserProvider::GetEditableBookmarkFolders( 1506 ScopedJavaLocalRef<jobject> ChromeBrowserProvider::GetEditableBookmarkFolders(
1504 JNIEnv* env, 1507 JNIEnv* env,
1505 jobject obj) { 1508 jobject obj) {
1506 ScopedJavaGlobalRef<jobject> jroot; 1509 ScopedJavaGlobalRef<jobject> jroot;
1507 ChromeBookmarkClient* client = 1510 ManagedBookmarkService* managed =
1508 ChromeBookmarkClientFactory::GetForProfile(profile_); 1511 ManagedBookmarkServiceFactory::GetForProfile(profile_);
1509 BookmarkModel* model = BookmarkModelFactory::GetForProfile(profile_); 1512 BookmarkModel* model = BookmarkModelFactory::GetForProfile(profile_);
1510 GetEditableBookmarkFoldersTask task(client, model); 1513 GetEditableBookmarkFoldersTask task(managed, model);
1511 task.Run(&jroot); 1514 task.Run(&jroot);
1512 return ScopedJavaLocalRef<jobject>(jroot); 1515 return ScopedJavaLocalRef<jobject>(jroot);
1513 } 1516 }
1514 1517
1515 void ChromeBrowserProvider::RemoveAllUserBookmarks(JNIEnv* env, jobject obj) { 1518 void ChromeBrowserProvider::RemoveAllUserBookmarks(JNIEnv* env, jobject obj) {
1516 LOG(ERROR) << "begin ChromeBrowserProvider::RemoveAllUserBookmarks"; 1519 LOG(ERROR) << "begin ChromeBrowserProvider::RemoveAllUserBookmarks";
1517 RemoveAllUserBookmarksTask task(bookmark_model_); 1520 RemoveAllUserBookmarksTask task(bookmark_model_);
1518 task.Run(); 1521 task.Run();
1519 LOG(ERROR) << "end ChromeBrowserProvider::RemoveAllUserBookmarks"; 1522 LOG(ERROR) << "end ChromeBrowserProvider::RemoveAllUserBookmarks";
1520 } 1523 }
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
1641 ScopedJavaLocalRef<jobject> obj = weak_java_provider_.get(env); 1644 ScopedJavaLocalRef<jobject> obj = weak_java_provider_.get(env);
1642 if (obj.is_null()) 1645 if (obj.is_null())
1643 return; 1646 return;
1644 Java_ChromeBrowserProvider_onSearchTermChanged(env, obj.obj()); 1647 Java_ChromeBrowserProvider_onSearchTermChanged(env, obj.obj());
1645 } 1648 }
1646 1649
1647 void ChromeBrowserProvider::OnKeywordSearchTermDeleted( 1650 void ChromeBrowserProvider::OnKeywordSearchTermDeleted(
1648 history::HistoryService* history_service, 1651 history::HistoryService* history_service,
1649 history::URLID url_id) { 1652 history::URLID url_id) {
1650 } 1653 }
OLDNEW
« no previous file with comments | « chrome/browser/android/bookmarks/bookmarks_bridge.cc ('k') | chrome/browser/android/tab_android.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698