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

Side by Side Diff: chrome/browser/android/bookmarks/bookmarks_bridge.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 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_array.h" 7 #include "base/android/jni_array.h"
8 #include "base/android/jni_string.h" 8 #include "base/android/jni_string.h"
9 #include "base/containers/stack_container.h" 9 #include "base/containers/stack_container.h"
10 #include "base/i18n/string_compare.h" 10 #include "base/i18n/string_compare.h"
11 #include "base/prefs/pref_service.h" 11 #include "base/prefs/pref_service.h"
12 #include "chrome/browser/bookmarks/bookmark_model_factory.h" 12 #include "chrome/browser/bookmarks/bookmark_model_factory.h"
13 #include "chrome/browser/bookmarks/chrome_bookmark_client_factory.h"
14 #include "chrome/browser/bookmarks/enhanced_bookmarks_features.h" 13 #include "chrome/browser/bookmarks/enhanced_bookmarks_features.h"
14 #include "chrome/browser/bookmarks/managed_bookmark_service_factory.h"
15 #include "chrome/browser/profiles/incognito_helpers.h" 15 #include "chrome/browser/profiles/incognito_helpers.h"
16 #include "chrome/browser/profiles/profile.h" 16 #include "chrome/browser/profiles/profile.h"
17 #include "chrome/browser/profiles/profile_android.h" 17 #include "chrome/browser/profiles/profile_android.h"
18 #include "chrome/browser/signin/signin_manager_factory.h" 18 #include "chrome/browser/signin/signin_manager_factory.h"
19 #include "chrome/browser/undo/bookmark_undo_service_factory.h" 19 #include "chrome/browser/undo/bookmark_undo_service_factory.h"
20 #include "chrome/common/pref_names.h" 20 #include "chrome/common/pref_names.h"
21 #include "components/bookmarks/browser/bookmark_match.h" 21 #include "components/bookmarks/browser/bookmark_match.h"
22 #include "components/bookmarks/browser/bookmark_model.h" 22 #include "components/bookmarks/browser/bookmark_model.h"
23 #include "components/bookmarks/browser/bookmark_utils.h" 23 #include "components/bookmarks/browser/bookmark_utils.h"
24 #include "components/bookmarks/browser/scoped_group_bookmark_actions.h" 24 #include "components/bookmarks/browser/scoped_group_bookmark_actions.h"
25 #include "components/bookmarks/common/android/bookmark_type.h" 25 #include "components/bookmarks/common/android/bookmark_type.h"
26 #include "components/bookmarks/managed/managed_bookmark_service.h"
26 #include "components/query_parser/query_parser.h" 27 #include "components/query_parser/query_parser.h"
27 #include "components/signin/core/browser/signin_manager.h" 28 #include "components/signin/core/browser/signin_manager.h"
28 #include "components/undo/bookmark_undo_service.h" 29 #include "components/undo/bookmark_undo_service.h"
29 #include "components/undo/undo_manager.h" 30 #include "components/undo/undo_manager.h"
30 #include "content/public/browser/browser_thread.h" 31 #include "content/public/browser/browser_thread.h"
31 #include "grit/components_strings.h" 32 #include "grit/components_strings.h"
32 #include "jni/BookmarksBridge_jni.h" 33 #include "jni/BookmarksBridge_jni.h"
33 #include "ui/base/l10n/l10n_util.h" 34 #include "ui/base/l10n/l10n_util.h"
34 35
35 using base::android::AttachCurrentThread; 36 using base::android::AttachCurrentThread;
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
83 scoped_ptr<icu::Collator> collator_; 84 scoped_ptr<icu::Collator> collator_;
84 collator_.reset(icu::Collator::createInstance(error)); 85 collator_.reset(icu::Collator::createInstance(error));
85 if (U_FAILURE(error)) 86 if (U_FAILURE(error))
86 collator_.reset(NULL); 87 collator_.reset(NULL);
87 88
88 return collator_.Pass(); 89 return collator_.Pass();
89 } 90 }
90 91
91 } // namespace 92 } // namespace
92 93
93 BookmarksBridge::BookmarksBridge(JNIEnv* env, 94 BookmarksBridge::BookmarksBridge(JNIEnv* env, jobject obj, jobject j_profile)
94 jobject obj,
95 jobject j_profile)
96 : weak_java_ref_(env, obj), 95 : weak_java_ref_(env, obj),
97 bookmark_model_(NULL), 96 bookmark_model_(NULL),
98 client_(NULL), 97 managed_bookmark_service_(NULL),
99 partner_bookmarks_shim_(NULL) { 98 partner_bookmarks_shim_(NULL) {
100 DCHECK_CURRENTLY_ON(BrowserThread::UI); 99 DCHECK_CURRENTLY_ON(BrowserThread::UI);
101 profile_ = ProfileAndroid::FromProfileAndroid(j_profile); 100 profile_ = ProfileAndroid::FromProfileAndroid(j_profile);
102 bookmark_model_ = BookmarkModelFactory::GetForProfile(profile_); 101 bookmark_model_ = BookmarkModelFactory::GetForProfile(profile_);
103 client_ = ChromeBookmarkClientFactory::GetForProfile(profile_); 102 managed_bookmark_service_ =
103 ManagedBookmarkServiceFactory::GetForProfile(profile_);
104 104
105 // Registers the notifications we are interested. 105 // Registers the notifications we are interested.
106 bookmark_model_->AddObserver(this); 106 bookmark_model_->AddObserver(this);
107 107
108 // Create the partner Bookmarks shim as early as possible (but don't attach). 108 // Create the partner Bookmarks shim as early as possible (but don't attach).
109 partner_bookmarks_shim_ = PartnerBookmarksShim::BuildForBrowserContext( 109 partner_bookmarks_shim_ = PartnerBookmarksShim::BuildForBrowserContext(
110 chrome::GetBrowserContextRedirectedInIncognito(profile_)); 110 chrome::GetBrowserContextRedirectedInIncognito(profile_));
111 partner_bookmarks_shim_->AddObserver(this); 111 partner_bookmarks_shim_->AddObserver(this);
112 112
113 NotifyIfDoneLoading(); 113 NotifyIfDoneLoading();
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
217 217
218 void BookmarksBridge::GetTopLevelFolderIDs(JNIEnv* env, 218 void BookmarksBridge::GetTopLevelFolderIDs(JNIEnv* env,
219 jobject obj, 219 jobject obj,
220 jboolean get_special, 220 jboolean get_special,
221 jboolean get_normal, 221 jboolean get_normal,
222 jobject j_result_obj) { 222 jobject j_result_obj) {
223 DCHECK(IsLoaded()); 223 DCHECK(IsLoaded());
224 std::vector<const BookmarkNode*> top_level_folders; 224 std::vector<const BookmarkNode*> top_level_folders;
225 225
226 if (get_special) { 226 if (get_special) {
227 if (client_->managed_node() && 227 if (managed_bookmark_service_->managed_node() &&
228 client_->managed_node()->child_count() > 0) { 228 managed_bookmark_service_->managed_node()->child_count() > 0) {
229 top_level_folders.push_back(client_->managed_node()); 229 top_level_folders.push_back(managed_bookmark_service_->managed_node());
230 } 230 }
231 if (client_->supervised_node() && 231 if (managed_bookmark_service_->supervised_node() &&
232 client_->supervised_node()->child_count() > 0) { 232 managed_bookmark_service_->supervised_node()->child_count() > 0) {
233 top_level_folders.push_back(client_->supervised_node()); 233 top_level_folders.push_back(managed_bookmark_service_->supervised_node());
234 } 234 }
235 if (partner_bookmarks_shim_->HasPartnerBookmarks() 235 if (partner_bookmarks_shim_->HasPartnerBookmarks()
236 && IsReachable(partner_bookmarks_shim_->GetPartnerBookmarksRoot())) { 236 && IsReachable(partner_bookmarks_shim_->GetPartnerBookmarksRoot())) {
237 top_level_folders.push_back( 237 top_level_folders.push_back(
238 partner_bookmarks_shim_->GetPartnerBookmarksRoot()); 238 partner_bookmarks_shim_->GetPartnerBookmarksRoot());
239 } 239 }
240 } 240 }
241 std::size_t special_count = top_level_folders.size(); 241 std::size_t special_count = top_level_folders.size();
242 242
243 if (get_normal) { 243 if (get_normal) {
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
318 stk.pop(); 318 stk.pop();
319 Java_BookmarksBridge_addToBookmarkIdListWithDepth(env, 319 Java_BookmarksBridge_addToBookmarkIdListWithDepth(env,
320 j_folders_obj, 320 j_folders_obj,
321 node->id(), 321 node->id(),
322 GetBookmarkType(node), 322 GetBookmarkType(node),
323 j_depths_obj, 323 j_depths_obj,
324 depth); 324 depth);
325 bookmarkList.clear(); 325 bookmarkList.clear();
326 for (int i = 0; i < node->child_count(); ++i) { 326 for (int i = 0; i < node->child_count(); ++i) {
327 const BookmarkNode* child = node->GetChild(i); 327 const BookmarkNode* child = node->GetChild(i);
328 if (child->is_folder() && client_->CanBeEditedByUser(child)) 328 if (child->is_folder() &&
329 managed_bookmark_service_->CanBeEditedByUser(child)) {
329 bookmarkList.push_back(node->GetChild(i)); 330 bookmarkList.push_back(node->GetChild(i));
331 }
330 } 332 }
331 std::stable_sort(bookmarkList.begin(), 333 std::stable_sort(bookmarkList.begin(),
332 bookmarkList.end(), 334 bookmarkList.end(),
333 BookmarkTitleComparer(this, collator.get())); 335 BookmarkTitleComparer(this, collator.get()));
334 for (std::vector<const BookmarkNode*>::reverse_iterator it = 336 for (std::vector<const BookmarkNode*>::reverse_iterator it =
335 bookmarkList.rbegin(); 337 bookmarkList.rbegin();
336 it != bookmarkList.rend(); 338 it != bookmarkList.rend();
337 ++it) { 339 ++it) {
338 stk.push(std::make_pair(*it, depth + 1)); 340 stk.push(std::make_pair(*it, depth + 1));
339 } 341 }
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
441 folder_iter != folders.end(); ++folder_iter) { 443 folder_iter != folders.end(); ++folder_iter) {
442 if (*folder_iter == NULL) 444 if (*folder_iter == NULL)
443 continue; 445 continue;
444 446
445 std::list<const BookmarkNode*>::iterator insert_iter = folder_iter; 447 std::list<const BookmarkNode*>::iterator insert_iter = folder_iter;
446 ++insert_iter; 448 ++insert_iter;
447 449
448 for (int i = 0; i < (*folder_iter)->child_count(); ++i) { 450 for (int i = 0; i < (*folder_iter)->child_count(); ++i) {
449 const BookmarkNode* child = (*folder_iter)->GetChild(i); 451 const BookmarkNode* child = (*folder_iter)->GetChild(i);
450 if (!IsReachable(child) || 452 if (!IsReachable(child) ||
451 bookmarks::IsDescendantOf(child, client_->managed_node()) || 453 bookmarks::IsDescendantOf(
452 bookmarks::IsDescendantOf(child, client_->supervised_node())) { 454 child, managed_bookmark_service_->managed_node()) ||
455 bookmarks::IsDescendantOf(
456 child, managed_bookmark_service_->supervised_node())) {
453 continue; 457 continue;
454 } 458 }
455 459
456 if (child->is_folder()) { 460 if (child->is_folder()) {
457 insert_iter = folders.insert(insert_iter, child); 461 insert_iter = folders.insert(insert_iter, child);
458 } else { 462 } else {
459 result.push_back(child); 463 result.push_back(child);
460 } 464 }
461 } 465 }
462 } 466 }
(...skipping 303 matching lines...) Expand 10 before | Expand all | Expand 10 after
766 static_cast<int64>(node_id)); 770 static_cast<int64>(node_id));
767 } 771 }
768 return node; 772 return node;
769 } 773 }
770 774
771 const BookmarkNode* BookmarksBridge::GetFolderWithFallback(long folder_id, 775 const BookmarkNode* BookmarksBridge::GetFolderWithFallback(long folder_id,
772 int type) { 776 int type) {
773 const BookmarkNode* folder = GetNodeByID(folder_id, type); 777 const BookmarkNode* folder = GetNodeByID(folder_id, type);
774 if (!folder || folder->type() == BookmarkNode::URL || 778 if (!folder || folder->type() == BookmarkNode::URL ||
775 !IsFolderAvailable(folder)) { 779 !IsFolderAvailable(folder)) {
776 if (!client_->managed_node()->empty()) 780 if (!managed_bookmark_service_->managed_node()->empty())
777 folder = client_->managed_node(); 781 folder = managed_bookmark_service_->managed_node();
778 else 782 else
779 folder = bookmark_model_->mobile_node(); 783 folder = bookmark_model_->mobile_node();
780 } 784 }
781 return folder; 785 return folder;
782 } 786 }
783 787
784 bool BookmarksBridge::IsEditable(const BookmarkNode* node) const { 788 bool BookmarksBridge::IsEditable(const BookmarkNode* node) const {
785 if (!node || (node->type() != BookmarkNode::FOLDER && 789 if (!node || (node->type() != BookmarkNode::FOLDER &&
786 node->type() != BookmarkNode::URL)) { 790 node->type() != BookmarkNode::URL)) {
787 return false; 791 return false;
788 } 792 }
789 if (!IsEditBookmarksEnabled(profile_)) 793 if (!IsEditBookmarksEnabled(profile_))
790 return false; 794 return false;
791 if (partner_bookmarks_shim_->IsPartnerBookmark(node)) 795 if (partner_bookmarks_shim_->IsPartnerBookmark(node))
792 return partner_bookmarks_shim_->IsEditable(node); 796 return partner_bookmarks_shim_->IsEditable(node);
793 return client_->CanBeEditedByUser(node); 797 return managed_bookmark_service_->CanBeEditedByUser(node);
794 } 798 }
795 799
796 bool BookmarksBridge::IsManaged(const BookmarkNode* node) const { 800 bool BookmarksBridge::IsManaged(const BookmarkNode* node) const {
797 return bookmarks::IsDescendantOf(node, client_->managed_node()); 801 return bookmarks::IsDescendantOf(node,
802 managed_bookmark_service_->managed_node());
798 } 803 }
799 804
800 const BookmarkNode* BookmarksBridge::GetParentNode(const BookmarkNode* node) { 805 const BookmarkNode* BookmarksBridge::GetParentNode(const BookmarkNode* node) {
801 DCHECK(IsLoaded()); 806 DCHECK(IsLoaded());
802 if (node == partner_bookmarks_shim_->GetPartnerBookmarksRoot()) { 807 if (node == partner_bookmarks_shim_->GetPartnerBookmarksRoot()) {
803 return bookmark_model_->mobile_node(); 808 return bookmark_model_->mobile_node();
804 } else { 809 } else {
805 return node->parent(); 810 return node->parent();
806 } 811 }
807 } 812 }
(...skipping 12 matching lines...) Expand all
820 } 825 }
821 826
822 bool BookmarksBridge::IsLoaded() const { 827 bool BookmarksBridge::IsLoaded() const {
823 return (bookmark_model_->loaded() && partner_bookmarks_shim_->IsLoaded()); 828 return (bookmark_model_->loaded() && partner_bookmarks_shim_->IsLoaded());
824 } 829 }
825 830
826 bool BookmarksBridge::IsFolderAvailable( 831 bool BookmarksBridge::IsFolderAvailable(
827 const BookmarkNode* folder) const { 832 const BookmarkNode* folder) const {
828 // The managed bookmarks folder is not shown if there are no bookmarks 833 // The managed bookmarks folder is not shown if there are no bookmarks
829 // configured via policy. 834 // configured via policy.
830 if (folder == client_->managed_node() && folder->empty()) 835 if (folder == managed_bookmark_service_->managed_node() && folder->empty())
831 return false; 836 return false;
832 // Similarly, the supervised bookmarks folder is not shown if there are no 837 // Similarly, the supervised bookmarks folder is not shown if there are no
833 // bookmarks configured by the custodian. 838 // bookmarks configured by the custodian.
834 if (folder == client_->supervised_node() && folder->empty()) 839 if (folder == managed_bookmark_service_->supervised_node() && folder->empty())
835 return false; 840 return false;
836 841
837 SigninManager* signin = SigninManagerFactory::GetForProfile( 842 SigninManager* signin = SigninManagerFactory::GetForProfile(
838 profile_->GetOriginalProfile()); 843 profile_->GetOriginalProfile());
839 return (folder->type() != BookmarkNode::BOOKMARK_BAR && 844 return (folder->type() != BookmarkNode::BOOKMARK_BAR &&
840 folder->type() != BookmarkNode::OTHER_NODE) || 845 folder->type() != BookmarkNode::OTHER_NODE) ||
841 (signin && signin->IsAuthenticated()); 846 (signin && signin->IsAuthenticated());
842 } 847 }
843 848
844 void BookmarksBridge::NotifyIfDoneLoading() { 849 void BookmarksBridge::NotifyIfDoneLoading() {
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after
1012 BookmarkModelChanged(); 1017 BookmarkModelChanged();
1013 } 1018 }
1014 1019
1015 void BookmarksBridge::PartnerShimLoaded(PartnerBookmarksShim* shim) { 1020 void BookmarksBridge::PartnerShimLoaded(PartnerBookmarksShim* shim) {
1016 NotifyIfDoneLoading(); 1021 NotifyIfDoneLoading();
1017 } 1022 }
1018 1023
1019 void BookmarksBridge::ShimBeingDeleted(PartnerBookmarksShim* shim) { 1024 void BookmarksBridge::ShimBeingDeleted(PartnerBookmarksShim* shim) {
1020 partner_bookmarks_shim_ = NULL; 1025 partner_bookmarks_shim_ = NULL;
1021 } 1026 }
OLDNEW
« no previous file with comments | « chrome/browser/android/bookmarks/bookmarks_bridge.h ('k') | chrome/browser/android/provider/chrome_browser_provider.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698