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

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

Issue 1203713002: Limit access to ChromeBookmarkClient to bookmarks code (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@cleanup_bookmark_client
Patch Set: Rebase Created 5 years, 6 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"
24 #include "chrome/browser/bookmarks/chrome_bookmark_client_factory.h"
25 #include "chrome/browser/browser_process.h" 23 #include "chrome/browser/browser_process.h"
26 #include "chrome/browser/favicon/favicon_service_factory.h" 24 #include "chrome/browser/favicon/favicon_service_factory.h"
27 #include "chrome/browser/history/android/sqlite_cursor.h" 25 #include "chrome/browser/history/android/sqlite_cursor.h"
28 #include "chrome/browser/history/history_service_factory.h" 26 #include "chrome/browser/history/history_service_factory.h"
29 #include "chrome/browser/history/top_sites_factory.h" 27 #include "chrome/browser/history/top_sites_factory.h"
30 #include "chrome/browser/profiles/profile.h" 28 #include "chrome/browser/profiles/profile.h"
31 #include "chrome/browser/profiles/profile_manager.h" 29 #include "chrome/browser/profiles/profile_manager.h"
32 #include "chrome/browser/search_engines/template_url_service_factory.h" 30 #include "chrome/browser/search_engines/template_url_service_factory.h"
33 #include "components/bookmarks/browser/bookmark_model.h" 31 #include "components/bookmarks/browser/bookmark_model.h"
34 #include "components/bookmarks/browser/bookmark_utils.h" 32 #include "components/bookmarks/browser/bookmark_utils.h"
(...skipping 438 matching lines...) Expand 10 before | Expand all | Expand 10 after
473 parent->id(), result); 471 parent->id(), result);
474 } 472 }
475 473
476 private: 474 private:
477 DISALLOW_COPY_AND_ASSIGN(CreateBookmarksFolderOnceTask); 475 DISALLOW_COPY_AND_ASSIGN(CreateBookmarksFolderOnceTask);
478 }; 476 };
479 477
480 // Creates a Java BookmarkNode object for a node given its id. 478 // Creates a Java BookmarkNode object for a node given its id.
481 class GetEditableBookmarkFoldersTask : public BookmarkModelTask { 479 class GetEditableBookmarkFoldersTask : public BookmarkModelTask {
482 public: 480 public:
483 GetEditableBookmarkFoldersTask(ChromeBookmarkClient* client, 481 explicit GetEditableBookmarkFoldersTask(BookmarkModel* model)
484 BookmarkModel* model) 482 : BookmarkModelTask(model) {}
485 : BookmarkModelTask(model), client_(client) {}
486 483
487 void Run(ScopedJavaGlobalRef<jobject>* jroot) { 484 void Run(ScopedJavaGlobalRef<jobject>* jroot) {
488 RunOnUIThreadBlocking::Run( 485 RunOnUIThreadBlocking::Run(base::Bind(
489 base::Bind(&GetEditableBookmarkFoldersTask::RunOnUIThread, 486 &GetEditableBookmarkFoldersTask::RunOnUIThread, model(), jroot));
490 client_, model(), jroot));
491 } 487 }
492 488
493 static void RunOnUIThread(ChromeBookmarkClient* client, 489 static void RunOnUIThread(BookmarkModel* model,
494 BookmarkModel* model,
495 ScopedJavaGlobalRef<jobject>* jroot) { 490 ScopedJavaGlobalRef<jobject>* jroot) {
496 DCHECK_CURRENTLY_ON(BrowserThread::UI); 491 DCHECK_CURRENTLY_ON(BrowserThread::UI);
497 const BookmarkNode* root = model->root_node(); 492 const BookmarkNode* root = model->root_node();
498 if (!root || !root->is_folder()) 493 if (!root || !root->is_folder())
499 return; 494 return;
500 495
501 // The iterative approach is not possible because ScopedGlobalJavaRefs 496 // The iterative approach is not possible because ScopedGlobalJavaRefs
502 // cannot be copy-constructed, and therefore not used in STL containers. 497 // cannot be copy-constructed, and therefore not used in STL containers.
503 ConvertFolderSubtree(client, AttachCurrentThread(), root, 498 ConvertFolderSubtree(model, AttachCurrentThread(), root,
504 ScopedJavaLocalRef<jobject>(), jroot); 499 ScopedJavaLocalRef<jobject>(), jroot);
505 } 500 }
506 501
507 private: 502 private:
508 static void ConvertFolderSubtree(ChromeBookmarkClient* client, 503 static void ConvertFolderSubtree(BookmarkModel* model,
509 JNIEnv* env, 504 JNIEnv* env,
510 const BookmarkNode* node, 505 const BookmarkNode* node,
511 const JavaRef<jobject>& parent_folder, 506 const JavaRef<jobject>& parent_folder,
512 ScopedJavaGlobalRef<jobject>* jfolder) { 507 ScopedJavaGlobalRef<jobject>* jfolder) {
513 DCHECK(node); 508 DCHECK(node);
514 DCHECK(node->is_folder()); 509 DCHECK(node->is_folder());
515 DCHECK(jfolder); 510 DCHECK(jfolder);
516 511
517 // Global refs should be used here for thread-safety reasons as this task 512 // 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. 513 // might be invoked from a thread other than UI. All refs are scoped.
519 ConvertBookmarkNode(node, parent_folder, jfolder); 514 ConvertBookmarkNode(node, parent_folder, jfolder);
520 515
521 for (int i = 0; i < node->child_count(); ++i) { 516 for (int i = 0; i < node->child_count(); ++i) {
522 const BookmarkNode* child = node->GetChild(i); 517 const BookmarkNode* child = node->GetChild(i);
523 if (child->is_folder() && client->CanBeEditedByUser(child)) { 518 if (child->is_folder() && model->CanBeEditedByUser(child)) {
524 ScopedJavaGlobalRef<jobject> jchild; 519 ScopedJavaGlobalRef<jobject> jchild;
525 ConvertFolderSubtree(client, env, child, *jfolder, &jchild); 520 ConvertFolderSubtree(model, env, child, *jfolder, &jchild);
526 521
527 Java_BookmarkNode_addChild(env, jfolder->obj(), jchild.obj()); 522 Java_BookmarkNode_addChild(env, jfolder->obj(), jchild.obj());
528 if (ClearException(env)) { 523 if (ClearException(env)) {
529 LOG(WARNING) << "Java exception while adding child node."; 524 LOG(WARNING) << "Java exception while adding child node.";
530 return; 525 return;
531 } 526 }
532 } 527 }
533 } 528 }
534 } 529 }
535 530
536 ChromeBookmarkClient* client_;
537
538 DISALLOW_COPY_AND_ASSIGN(GetEditableBookmarkFoldersTask); 531 DISALLOW_COPY_AND_ASSIGN(GetEditableBookmarkFoldersTask);
539 }; 532 };
540 533
541 // Creates a Java BookmarkNode object for a node given its id. 534 // Creates a Java BookmarkNode object for a node given its id.
542 class GetBookmarkNodeTask : public BookmarkModelTask { 535 class GetBookmarkNodeTask : public BookmarkModelTask {
543 public: 536 public:
544 explicit GetBookmarkNodeTask(BookmarkModel* model) 537 explicit GetBookmarkNodeTask(BookmarkModel* model)
545 : BookmarkModelTask(model) { 538 : BookmarkModelTask(model) {
546 } 539 }
547 540
(...skipping 949 matching lines...) Expand 10 before | Expand all | Expand 10 after
1497 return kInvalidBookmarkId; 1490 return kInvalidBookmarkId;
1498 1491
1499 CreateBookmarksFolderOnceTask task(bookmark_model_); 1492 CreateBookmarksFolderOnceTask task(bookmark_model_);
1500 return task.Run(title, parent_id); 1493 return task.Run(title, parent_id);
1501 } 1494 }
1502 1495
1503 ScopedJavaLocalRef<jobject> ChromeBrowserProvider::GetEditableBookmarkFolders( 1496 ScopedJavaLocalRef<jobject> ChromeBrowserProvider::GetEditableBookmarkFolders(
1504 JNIEnv* env, 1497 JNIEnv* env,
1505 jobject obj) { 1498 jobject obj) {
1506 ScopedJavaGlobalRef<jobject> jroot; 1499 ScopedJavaGlobalRef<jobject> jroot;
1507 ChromeBookmarkClient* client =
1508 ChromeBookmarkClientFactory::GetForProfile(profile_);
1509 BookmarkModel* model = BookmarkModelFactory::GetForProfile(profile_); 1500 BookmarkModel* model = BookmarkModelFactory::GetForProfile(profile_);
1510 GetEditableBookmarkFoldersTask task(client, model); 1501 GetEditableBookmarkFoldersTask task(model);
1511 task.Run(&jroot); 1502 task.Run(&jroot);
1512 return ScopedJavaLocalRef<jobject>(jroot); 1503 return ScopedJavaLocalRef<jobject>(jroot);
1513 } 1504 }
1514 1505
1515 void ChromeBrowserProvider::RemoveAllUserBookmarks(JNIEnv* env, jobject obj) { 1506 void ChromeBrowserProvider::RemoveAllUserBookmarks(JNIEnv* env, jobject obj) {
1516 LOG(ERROR) << "begin ChromeBrowserProvider::RemoveAllUserBookmarks"; 1507 LOG(ERROR) << "begin ChromeBrowserProvider::RemoveAllUserBookmarks";
1517 RemoveAllUserBookmarksTask task(bookmark_model_); 1508 RemoveAllUserBookmarksTask task(bookmark_model_);
1518 task.Run(); 1509 task.Run();
1519 LOG(ERROR) << "end ChromeBrowserProvider::RemoveAllUserBookmarks"; 1510 LOG(ERROR) << "end ChromeBrowserProvider::RemoveAllUserBookmarks";
1520 } 1511 }
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
1641 ScopedJavaLocalRef<jobject> obj = weak_java_provider_.get(env); 1632 ScopedJavaLocalRef<jobject> obj = weak_java_provider_.get(env);
1642 if (obj.is_null()) 1633 if (obj.is_null())
1643 return; 1634 return;
1644 Java_ChromeBrowserProvider_onSearchTermChanged(env, obj.obj()); 1635 Java_ChromeBrowserProvider_onSearchTermChanged(env, obj.obj());
1645 } 1636 }
1646 1637
1647 void ChromeBrowserProvider::OnKeywordSearchTermDeleted( 1638 void ChromeBrowserProvider::OnKeywordSearchTermDeleted(
1648 history::HistoryService* history_service, 1639 history::HistoryService* history_service,
1649 history::URLID url_id) { 1640 history::URLID url_id) {
1650 } 1641 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698