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

Side by Side Diff: chrome/browser/android/bookmarks/bookmarks_bridge.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 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"
15 #include "chrome/browser/profiles/incognito_helpers.h" 14 #include "chrome/browser/profiles/incognito_helpers.h"
16 #include "chrome/browser/profiles/profile.h" 15 #include "chrome/browser/profiles/profile.h"
17 #include "chrome/browser/profiles/profile_android.h" 16 #include "chrome/browser/profiles/profile_android.h"
18 #include "chrome/browser/signin/signin_manager_factory.h" 17 #include "chrome/browser/signin/signin_manager_factory.h"
19 #include "chrome/browser/undo/bookmark_undo_service_factory.h" 18 #include "chrome/browser/undo/bookmark_undo_service_factory.h"
20 #include "chrome/common/pref_names.h" 19 #include "chrome/common/pref_names.h"
21 #include "components/bookmarks/browser/bookmark_match.h" 20 #include "components/bookmarks/browser/bookmark_match.h"
22 #include "components/bookmarks/browser/bookmark_model.h" 21 #include "components/bookmarks/browser/bookmark_model.h"
23 #include "components/bookmarks/browser/bookmark_utils.h" 22 #include "components/bookmarks/browser/bookmark_utils.h"
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
88 return collator_.Pass(); 87 return collator_.Pass();
89 } 88 }
90 89
91 } // namespace 90 } // namespace
92 91
93 BookmarksBridge::BookmarksBridge(JNIEnv* env, 92 BookmarksBridge::BookmarksBridge(JNIEnv* env,
94 jobject obj, 93 jobject obj,
95 jobject j_profile) 94 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),
99 partner_bookmarks_shim_(NULL) { 97 partner_bookmarks_shim_(NULL) {
100 DCHECK_CURRENTLY_ON(BrowserThread::UI); 98 DCHECK_CURRENTLY_ON(BrowserThread::UI);
101 profile_ = ProfileAndroid::FromProfileAndroid(j_profile); 99 profile_ = ProfileAndroid::FromProfileAndroid(j_profile);
102 bookmark_model_ = BookmarkModelFactory::GetForProfile(profile_); 100 bookmark_model_ = BookmarkModelFactory::GetForProfile(profile_);
103 client_ = ChromeBookmarkClientFactory::GetForProfile(profile_);
104 101
105 // Registers the notifications we are interested. 102 // Registers the notifications we are interested.
106 bookmark_model_->AddObserver(this); 103 bookmark_model_->AddObserver(this);
107 104
108 // Create the partner Bookmarks shim as early as possible (but don't attach). 105 // Create the partner Bookmarks shim as early as possible (but don't attach).
109 partner_bookmarks_shim_ = PartnerBookmarksShim::BuildForBrowserContext( 106 partner_bookmarks_shim_ = PartnerBookmarksShim::BuildForBrowserContext(
110 chrome::GetBrowserContextRedirectedInIncognito(profile_)); 107 chrome::GetBrowserContextRedirectedInIncognito(profile_));
111 partner_bookmarks_shim_->AddObserver(this); 108 partner_bookmarks_shim_->AddObserver(this);
112 109
113 NotifyIfDoneLoading(); 110 NotifyIfDoneLoading();
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
217 214
218 void BookmarksBridge::GetTopLevelFolderIDs(JNIEnv* env, 215 void BookmarksBridge::GetTopLevelFolderIDs(JNIEnv* env,
219 jobject obj, 216 jobject obj,
220 jboolean get_special, 217 jboolean get_special,
221 jboolean get_normal, 218 jboolean get_normal,
222 jobject j_result_obj) { 219 jobject j_result_obj) {
223 DCHECK(IsLoaded()); 220 DCHECK(IsLoaded());
224 std::vector<const BookmarkNode*> top_level_folders; 221 std::vector<const BookmarkNode*> top_level_folders;
225 222
226 if (get_special) { 223 if (get_special) {
227 if (client_->managed_node() && 224 if (bookmark_model_->managed_node() &&
228 client_->managed_node()->child_count() > 0) { 225 bookmark_model_->managed_node()->child_count() > 0) {
229 top_level_folders.push_back(client_->managed_node()); 226 top_level_folders.push_back(bookmark_model_->managed_node());
230 } 227 }
231 if (client_->supervised_node() && 228 if (bookmark_model_->supervised_node() &&
232 client_->supervised_node()->child_count() > 0) { 229 bookmark_model_->supervised_node()->child_count() > 0) {
233 top_level_folders.push_back(client_->supervised_node()); 230 top_level_folders.push_back(bookmark_model_->supervised_node());
234 } 231 }
235 if (partner_bookmarks_shim_->HasPartnerBookmarks() 232 if (partner_bookmarks_shim_->HasPartnerBookmarks()
236 && IsReachable(partner_bookmarks_shim_->GetPartnerBookmarksRoot())) { 233 && IsReachable(partner_bookmarks_shim_->GetPartnerBookmarksRoot())) {
237 top_level_folders.push_back( 234 top_level_folders.push_back(
238 partner_bookmarks_shim_->GetPartnerBookmarksRoot()); 235 partner_bookmarks_shim_->GetPartnerBookmarksRoot());
239 } 236 }
240 } 237 }
241 std::size_t special_count = top_level_folders.size(); 238 std::size_t special_count = top_level_folders.size();
242 239
243 if (get_normal) { 240 if (get_normal) {
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
318 stk.pop(); 315 stk.pop();
319 Java_BookmarksBridge_addToBookmarkIdListWithDepth(env, 316 Java_BookmarksBridge_addToBookmarkIdListWithDepth(env,
320 j_folders_obj, 317 j_folders_obj,
321 node->id(), 318 node->id(),
322 GetBookmarkType(node), 319 GetBookmarkType(node),
323 j_depths_obj, 320 j_depths_obj,
324 depth); 321 depth);
325 bookmarkList.clear(); 322 bookmarkList.clear();
326 for (int i = 0; i < node->child_count(); ++i) { 323 for (int i = 0; i < node->child_count(); ++i) {
327 const BookmarkNode* child = node->GetChild(i); 324 const BookmarkNode* child = node->GetChild(i);
328 if (child->is_folder() && client_->CanBeEditedByUser(child)) 325 if (child->is_folder() && bookmark_model_->CanBeEditedByUser(child))
329 bookmarkList.push_back(node->GetChild(i)); 326 bookmarkList.push_back(node->GetChild(i));
330 } 327 }
331 std::stable_sort(bookmarkList.begin(), 328 std::stable_sort(bookmarkList.begin(),
332 bookmarkList.end(), 329 bookmarkList.end(),
333 BookmarkTitleComparer(this, collator.get())); 330 BookmarkTitleComparer(this, collator.get()));
334 for (std::vector<const BookmarkNode*>::reverse_iterator it = 331 for (std::vector<const BookmarkNode*>::reverse_iterator it =
335 bookmarkList.rbegin(); 332 bookmarkList.rbegin();
336 it != bookmarkList.rend(); 333 it != bookmarkList.rend();
337 ++it) { 334 ++it) {
338 stk.push(std::make_pair(*it, depth + 1)); 335 stk.push(std::make_pair(*it, depth + 1));
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
441 folder_iter != folders.end(); ++folder_iter) { 438 folder_iter != folders.end(); ++folder_iter) {
442 if (*folder_iter == NULL) 439 if (*folder_iter == NULL)
443 continue; 440 continue;
444 441
445 std::list<const BookmarkNode*>::iterator insert_iter = folder_iter; 442 std::list<const BookmarkNode*>::iterator insert_iter = folder_iter;
446 ++insert_iter; 443 ++insert_iter;
447 444
448 for (int i = 0; i < (*folder_iter)->child_count(); ++i) { 445 for (int i = 0; i < (*folder_iter)->child_count(); ++i) {
449 const BookmarkNode* child = (*folder_iter)->GetChild(i); 446 const BookmarkNode* child = (*folder_iter)->GetChild(i);
450 if (!IsReachable(child) || 447 if (!IsReachable(child) ||
451 bookmarks::IsDescendantOf(child, client_->managed_node()) || 448 bookmarks::IsDescendantOf(child, bookmark_model_->managed_node()) ||
452 bookmarks::IsDescendantOf(child, client_->supervised_node())) { 449 bookmarks::IsDescendantOf(child,
450 bookmark_model_->supervised_node())) {
453 continue; 451 continue;
454 } 452 }
455 453
456 if (child->is_folder()) { 454 if (child->is_folder()) {
457 insert_iter = folders.insert(insert_iter, child); 455 insert_iter = folders.insert(insert_iter, child);
458 } else { 456 } else {
459 result.push_back(child); 457 result.push_back(child);
460 } 458 }
461 } 459 }
462 } 460 }
(...skipping 300 matching lines...) Expand 10 before | Expand all | Expand 10 after
763 static_cast<int64>(node_id)); 761 static_cast<int64>(node_id));
764 } 762 }
765 return node; 763 return node;
766 } 764 }
767 765
768 const BookmarkNode* BookmarksBridge::GetFolderWithFallback(long folder_id, 766 const BookmarkNode* BookmarksBridge::GetFolderWithFallback(long folder_id,
769 int type) { 767 int type) {
770 const BookmarkNode* folder = GetNodeByID(folder_id, type); 768 const BookmarkNode* folder = GetNodeByID(folder_id, type);
771 if (!folder || folder->type() == BookmarkNode::URL || 769 if (!folder || folder->type() == BookmarkNode::URL ||
772 !IsFolderAvailable(folder)) { 770 !IsFolderAvailable(folder)) {
773 if (!client_->managed_node()->empty()) 771 if (!bookmark_model_->managed_node()->empty())
774 folder = client_->managed_node(); 772 folder = bookmark_model_->managed_node();
775 else 773 else
776 folder = bookmark_model_->mobile_node(); 774 folder = bookmark_model_->mobile_node();
777 } 775 }
778 return folder; 776 return folder;
779 } 777 }
780 778
781 bool BookmarksBridge::IsEditable(const BookmarkNode* node) const { 779 bool BookmarksBridge::IsEditable(const BookmarkNode* node) const {
782 if (!node || (node->type() != BookmarkNode::FOLDER && 780 if (!node || (node->type() != BookmarkNode::FOLDER &&
783 node->type() != BookmarkNode::URL)) { 781 node->type() != BookmarkNode::URL)) {
784 return false; 782 return false;
785 } 783 }
786 if (!IsEditBookmarksEnabled(profile_)) 784 if (!IsEditBookmarksEnabled(profile_))
787 return false; 785 return false;
788 if (partner_bookmarks_shim_->IsPartnerBookmark(node)) 786 if (partner_bookmarks_shim_->IsPartnerBookmark(node))
789 return partner_bookmarks_shim_->IsEditable(node); 787 return partner_bookmarks_shim_->IsEditable(node);
790 return client_->CanBeEditedByUser(node); 788 return bookmark_model_->CanBeEditedByUser(node);
791 } 789 }
792 790
793 bool BookmarksBridge::IsManaged(const BookmarkNode* node) const { 791 bool BookmarksBridge::IsManaged(const BookmarkNode* node) const {
794 return bookmarks::IsDescendantOf(node, client_->managed_node()); 792 return bookmarks::IsDescendantOf(node, bookmark_model_->managed_node());
795 } 793 }
796 794
797 const BookmarkNode* BookmarksBridge::GetParentNode(const BookmarkNode* node) { 795 const BookmarkNode* BookmarksBridge::GetParentNode(const BookmarkNode* node) {
798 DCHECK(IsLoaded()); 796 DCHECK(IsLoaded());
799 if (node == partner_bookmarks_shim_->GetPartnerBookmarksRoot()) { 797 if (node == partner_bookmarks_shim_->GetPartnerBookmarksRoot()) {
800 return bookmark_model_->mobile_node(); 798 return bookmark_model_->mobile_node();
801 } else { 799 } else {
802 return node->parent(); 800 return node->parent();
803 } 801 }
804 } 802 }
(...skipping 12 matching lines...) Expand all
817 } 815 }
818 816
819 bool BookmarksBridge::IsLoaded() const { 817 bool BookmarksBridge::IsLoaded() const {
820 return (bookmark_model_->loaded() && partner_bookmarks_shim_->IsLoaded()); 818 return (bookmark_model_->loaded() && partner_bookmarks_shim_->IsLoaded());
821 } 819 }
822 820
823 bool BookmarksBridge::IsFolderAvailable( 821 bool BookmarksBridge::IsFolderAvailable(
824 const BookmarkNode* folder) const { 822 const BookmarkNode* folder) const {
825 // The managed bookmarks folder is not shown if there are no bookmarks 823 // The managed bookmarks folder is not shown if there are no bookmarks
826 // configured via policy. 824 // configured via policy.
827 if (folder == client_->managed_node() && folder->empty()) 825 if (folder == bookmark_model_->managed_node() && folder->empty())
828 return false; 826 return false;
829 // Similarly, the supervised bookmarks folder is not shown if there are no 827 // Similarly, the supervised bookmarks folder is not shown if there are no
830 // bookmarks configured by the custodian. 828 // bookmarks configured by the custodian.
831 if (folder == client_->supervised_node() && folder->empty()) 829 if (folder == bookmark_model_->supervised_node() && folder->empty())
832 return false; 830 return false;
833 831
834 SigninManager* signin = SigninManagerFactory::GetForProfile( 832 SigninManager* signin = SigninManagerFactory::GetForProfile(
835 profile_->GetOriginalProfile()); 833 profile_->GetOriginalProfile());
836 return (folder->type() != BookmarkNode::BOOKMARK_BAR && 834 return (folder->type() != BookmarkNode::BOOKMARK_BAR &&
837 folder->type() != BookmarkNode::OTHER_NODE) || 835 folder->type() != BookmarkNode::OTHER_NODE) ||
838 (signin && signin->IsAuthenticated()); 836 (signin && signin->IsAuthenticated());
839 } 837 }
840 838
841 void BookmarksBridge::NotifyIfDoneLoading() { 839 void BookmarksBridge::NotifyIfDoneLoading() {
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after
1009 BookmarkModelChanged(); 1007 BookmarkModelChanged();
1010 } 1008 }
1011 1009
1012 void BookmarksBridge::PartnerShimLoaded(PartnerBookmarksShim* shim) { 1010 void BookmarksBridge::PartnerShimLoaded(PartnerBookmarksShim* shim) {
1013 NotifyIfDoneLoading(); 1011 NotifyIfDoneLoading();
1014 } 1012 }
1015 1013
1016 void BookmarksBridge::ShimBeingDeleted(PartnerBookmarksShim* shim) { 1014 void BookmarksBridge::ShimBeingDeleted(PartnerBookmarksShim* shim) {
1017 partner_bookmarks_shim_ = NULL; 1015 partner_bookmarks_shim_ = NULL;
1018 } 1016 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698