OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 } |
OLD | NEW |