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/bookmark_bridge.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 | 9 |
10 #include "base/android/jni_array.h" | 10 #include "base/android/jni_array.h" |
11 #include "base/android/jni_string.h" | 11 #include "base/android/jni_string.h" |
12 #include "base/containers/stack_container.h" | 12 #include "base/containers/stack_container.h" |
13 #include "base/i18n/string_compare.h" | 13 #include "base/i18n/string_compare.h" |
14 #include "chrome/browser/bookmarks/bookmark_model_factory.h" | 14 #include "chrome/browser/bookmarks/bookmark_model_factory.h" |
15 #include "chrome/browser/bookmarks/managed_bookmark_service_factory.h" | 15 #include "chrome/browser/bookmarks/managed_bookmark_service_factory.h" |
16 #include "chrome/browser/profiles/incognito_helpers.h" | 16 #include "chrome/browser/profiles/incognito_helpers.h" |
17 #include "chrome/browser/profiles/profile.h" | 17 #include "chrome/browser/profiles/profile.h" |
18 #include "chrome/browser/profiles/profile_android.h" | 18 #include "chrome/browser/profiles/profile_android.h" |
19 #include "chrome/browser/signin/signin_manager_factory.h" | 19 #include "chrome/browser/signin/signin_manager_factory.h" |
20 #include "chrome/browser/undo/bookmark_undo_service_factory.h" | 20 #include "chrome/browser/undo/bookmark_undo_service_factory.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/common/bookmark_pref_names.h" | 26 #include "components/bookmarks/common/bookmark_pref_names.h" |
27 #include "components/bookmarks/managed/managed_bookmark_service.h" | 27 #include "components/bookmarks/managed/managed_bookmark_service.h" |
28 #include "components/prefs/pref_service.h" | 28 #include "components/prefs/pref_service.h" |
29 #include "components/query_parser/query_parser.h" | 29 #include "components/query_parser/query_parser.h" |
30 #include "components/signin/core/browser/signin_manager.h" | 30 #include "components/signin/core/browser/signin_manager.h" |
31 #include "components/undo/bookmark_undo_service.h" | 31 #include "components/undo/bookmark_undo_service.h" |
32 #include "components/undo/undo_manager.h" | 32 #include "components/undo/undo_manager.h" |
33 #include "content/public/browser/browser_thread.h" | 33 #include "content/public/browser/browser_thread.h" |
34 #include "grit/components_strings.h" | 34 #include "grit/components_strings.h" |
35 #include "jni/BookmarksBridge_jni.h" | 35 #include "jni/BookmarkBridge_jni.h" |
36 #include "ui/base/l10n/l10n_util.h" | 36 #include "ui/base/l10n/l10n_util.h" |
37 | 37 |
38 using base::android::AttachCurrentThread; | 38 using base::android::AttachCurrentThread; |
39 using base::android::ConvertUTF8ToJavaString; | 39 using base::android::ConvertUTF8ToJavaString; |
40 using base::android::ConvertUTF16ToJavaString; | 40 using base::android::ConvertUTF16ToJavaString; |
41 using base::android::ScopedJavaLocalRef; | 41 using base::android::ScopedJavaLocalRef; |
42 using base::android::ScopedJavaGlobalRef; | 42 using base::android::ScopedJavaGlobalRef; |
43 using base::android::ToJavaIntArray; | 43 using base::android::ToJavaIntArray; |
44 using bookmarks::android::JavaBookmarkIdCreateBookmarkId; | 44 using bookmarks::android::JavaBookmarkIdCreateBookmarkId; |
45 using bookmarks::android::JavaBookmarkIdGetId; | 45 using bookmarks::android::JavaBookmarkIdGetId; |
46 using bookmarks::android::JavaBookmarkIdGetType; | 46 using bookmarks::android::JavaBookmarkIdGetType; |
47 using bookmarks::BookmarkModel; | 47 using bookmarks::BookmarkModel; |
48 using bookmarks::BookmarkNode; | 48 using bookmarks::BookmarkNode; |
49 using bookmarks::BookmarkPermanentNode; | 49 using bookmarks::BookmarkPermanentNode; |
50 using bookmarks::BookmarkType; | 50 using bookmarks::BookmarkType; |
51 using content::BrowserThread; | 51 using content::BrowserThread; |
52 | 52 |
53 namespace { | 53 namespace { |
54 | 54 |
55 class BookmarkNodeCreationTimeCompareFunctor { | 55 class BookmarkNodeCreationTimeCompareFunctor { |
56 public: | 56 public: |
57 bool operator()(const BookmarkNode* lhs, const BookmarkNode* rhs) { | 57 bool operator()(const BookmarkNode* lhs, const BookmarkNode* rhs) { |
58 return lhs->date_added().ToJavaTime() > rhs->date_added().ToJavaTime(); | 58 return lhs->date_added().ToJavaTime() > rhs->date_added().ToJavaTime(); |
59 } | 59 } |
60 }; | 60 }; |
61 | 61 |
62 class BookmarkTitleComparer { | 62 class BookmarkTitleComparer { |
63 public: | 63 public: |
64 explicit BookmarkTitleComparer(BookmarksBridge* bookmarks_bridge, | 64 explicit BookmarkTitleComparer(BookmarkBridge* bookmark_bridge, |
65 const icu::Collator* collator) | 65 const icu::Collator* collator) |
66 : bookmarks_bridge_(bookmarks_bridge), | 66 : bookmark_bridge_(bookmark_bridge), |
67 collator_(collator) {} | 67 collator_(collator) {} |
68 | 68 |
69 bool operator()(const BookmarkNode* lhs, const BookmarkNode* rhs) { | 69 bool operator()(const BookmarkNode* lhs, const BookmarkNode* rhs) { |
70 if (collator_) { | 70 if (collator_) { |
71 return base::i18n::CompareString16WithCollator( | 71 return base::i18n::CompareString16WithCollator( |
72 *collator_, bookmarks_bridge_->GetTitle(lhs), | 72 *collator_, bookmark_bridge_->GetTitle(lhs), |
73 bookmarks_bridge_->GetTitle(rhs)) == UCOL_LESS; | 73 bookmark_bridge_->GetTitle(rhs)) == UCOL_LESS; |
74 } else { | 74 } else { |
75 return lhs->GetTitle() < rhs->GetTitle(); | 75 return lhs->GetTitle() < rhs->GetTitle(); |
76 } | 76 } |
77 } | 77 } |
78 | 78 |
79 private: | 79 private: |
80 BookmarksBridge* bookmarks_bridge_; // weak | 80 BookmarkBridge* bookmark_bridge_; // weak |
81 const icu::Collator* collator_; | 81 const icu::Collator* collator_; |
82 }; | 82 }; |
83 | 83 |
84 scoped_ptr<icu::Collator> GetICUCollator() { | 84 scoped_ptr<icu::Collator> GetICUCollator() { |
85 UErrorCode error = U_ZERO_ERROR; | 85 UErrorCode error = U_ZERO_ERROR; |
86 scoped_ptr<icu::Collator> collator_; | 86 scoped_ptr<icu::Collator> collator_; |
87 collator_.reset(icu::Collator::createInstance(error)); | 87 collator_.reset(icu::Collator::createInstance(error)); |
88 if (U_FAILURE(error)) | 88 if (U_FAILURE(error)) |
89 collator_.reset(NULL); | 89 collator_.reset(NULL); |
90 | 90 |
91 return collator_; | 91 return collator_; |
92 } | 92 } |
93 | 93 |
94 } // namespace | 94 } // namespace |
95 | 95 |
96 BookmarksBridge::BookmarksBridge(JNIEnv* env, jobject obj, jobject j_profile) | 96 BookmarkBridge::BookmarkBridge(JNIEnv* env, jobject obj, jobject j_profile) |
97 : weak_java_ref_(env, obj), | 97 : weak_java_ref_(env, obj), |
98 bookmark_model_(NULL), | 98 bookmark_model_(NULL), |
99 managed_bookmark_service_(NULL), | 99 managed_bookmark_service_(NULL), |
100 partner_bookmarks_shim_(NULL) { | 100 partner_bookmarks_shim_(NULL) { |
101 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 101 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
102 profile_ = ProfileAndroid::FromProfileAndroid(j_profile); | 102 profile_ = ProfileAndroid::FromProfileAndroid(j_profile); |
103 bookmark_model_ = BookmarkModelFactory::GetForProfile(profile_); | 103 bookmark_model_ = BookmarkModelFactory::GetForProfile(profile_); |
104 managed_bookmark_service_ = | 104 managed_bookmark_service_ = |
105 ManagedBookmarkServiceFactory::GetForProfile(profile_); | 105 ManagedBookmarkServiceFactory::GetForProfile(profile_); |
106 | 106 |
107 // Registers the notifications we are interested. | 107 // Registers the notifications we are interested. |
108 bookmark_model_->AddObserver(this); | 108 bookmark_model_->AddObserver(this); |
109 | 109 |
110 // Create the partner Bookmarks shim as early as possible (but don't attach). | 110 // Create the partner Bookmarks shim as early as possible (but don't attach). |
111 partner_bookmarks_shim_ = PartnerBookmarksShim::BuildForBrowserContext( | 111 partner_bookmarks_shim_ = PartnerBookmarksShim::BuildForBrowserContext( |
112 chrome::GetBrowserContextRedirectedInIncognito(profile_)); | 112 chrome::GetBrowserContextRedirectedInIncognito(profile_)); |
113 partner_bookmarks_shim_->AddObserver(this); | 113 partner_bookmarks_shim_->AddObserver(this); |
114 | 114 |
115 pref_change_registrar_.Init(profile_->GetPrefs()); | 115 pref_change_registrar_.Init(profile_->GetPrefs()); |
116 pref_change_registrar_.Add( | 116 pref_change_registrar_.Add( |
117 bookmarks::prefs::kEditBookmarksEnabled, | 117 bookmarks::prefs::kEditBookmarksEnabled, |
118 base::Bind(&BookmarksBridge::EditBookmarksEnabledChanged, | 118 base::Bind(&BookmarkBridge::EditBookmarksEnabledChanged, |
119 base::Unretained(this))); | 119 base::Unretained(this))); |
120 | 120 |
121 NotifyIfDoneLoading(); | 121 NotifyIfDoneLoading(); |
122 | 122 |
123 // Since a sync or import could have started before this class is | 123 // Since a sync or import could have started before this class is |
124 // initialized, we need to make sure that our initial state is | 124 // initialized, we need to make sure that our initial state is |
125 // up to date. | 125 // up to date. |
126 if (bookmark_model_->IsDoingExtensiveChanges()) | 126 if (bookmark_model_->IsDoingExtensiveChanges()) |
127 ExtensiveBookmarkChangesBeginning(bookmark_model_); | 127 ExtensiveBookmarkChangesBeginning(bookmark_model_); |
128 } | 128 } |
129 | 129 |
130 BookmarksBridge::~BookmarksBridge() { | 130 BookmarkBridge::~BookmarkBridge() { |
131 bookmark_model_->RemoveObserver(this); | 131 bookmark_model_->RemoveObserver(this); |
132 if (partner_bookmarks_shim_) | 132 if (partner_bookmarks_shim_) |
133 partner_bookmarks_shim_->RemoveObserver(this); | 133 partner_bookmarks_shim_->RemoveObserver(this); |
134 } | 134 } |
135 | 135 |
136 void BookmarksBridge::Destroy(JNIEnv*, const JavaParamRef<jobject>&) { | 136 void BookmarkBridge::Destroy(JNIEnv*, const JavaParamRef<jobject>&) { |
137 delete this; | 137 delete this; |
138 } | 138 } |
139 | 139 |
140 // static | 140 // static |
141 bool BookmarksBridge::RegisterBookmarksBridge(JNIEnv* env) { | 141 bool BookmarkBridge::RegisterBookmarkBridge(JNIEnv* env) { |
142 return RegisterNativesImpl(env); | 142 return RegisterNativesImpl(env); |
143 } | 143 } |
144 | 144 |
145 static jlong Init(JNIEnv* env, | 145 static jlong Init(JNIEnv* env, |
146 const JavaParamRef<jobject>& obj, | 146 const JavaParamRef<jobject>& obj, |
147 const JavaParamRef<jobject>& j_profile) { | 147 const JavaParamRef<jobject>& j_profile) { |
148 BookmarksBridge* delegate = new BookmarksBridge(env, obj, j_profile); | 148 BookmarkBridge* delegate = new BookmarkBridge(env, obj, j_profile); |
149 return reinterpret_cast<intptr_t>(delegate); | 149 return reinterpret_cast<intptr_t>(delegate); |
150 } | 150 } |
151 | 151 |
152 jboolean BookmarksBridge::IsEditBookmarksEnabled( | 152 jboolean BookmarkBridge::IsEditBookmarksEnabled( |
153 JNIEnv* env, | 153 JNIEnv* env, |
154 const JavaParamRef<jobject>& obj) { | 154 const JavaParamRef<jobject>& obj) { |
155 return IsEditBookmarksEnabled(); | 155 return IsEditBookmarksEnabled(); |
156 } | 156 } |
157 | 157 |
158 void BookmarksBridge::LoadEmptyPartnerBookmarkShimForTesting( | 158 void BookmarkBridge::LoadEmptyPartnerBookmarkShimForTesting( |
159 JNIEnv* env, | 159 JNIEnv* env, |
160 const JavaParamRef<jobject>& obj) { | 160 const JavaParamRef<jobject>& obj) { |
161 if (partner_bookmarks_shim_->IsLoaded()) | 161 if (partner_bookmarks_shim_->IsLoaded()) |
162 return; | 162 return; |
163 partner_bookmarks_shim_->SetPartnerBookmarksRoot( | 163 partner_bookmarks_shim_->SetPartnerBookmarksRoot( |
164 new BookmarkPermanentNode(0)); | 164 new BookmarkPermanentNode(0)); |
165 DCHECK(partner_bookmarks_shim_->IsLoaded()); | 165 DCHECK(partner_bookmarks_shim_->IsLoaded()); |
166 } | 166 } |
167 | 167 |
168 ScopedJavaLocalRef<jobject> BookmarksBridge::GetBookmarkByID( | 168 ScopedJavaLocalRef<jobject> BookmarkBridge::GetBookmarkByID( |
169 JNIEnv* env, | 169 JNIEnv* env, |
170 const JavaParamRef<jobject>& obj, | 170 const JavaParamRef<jobject>& obj, |
171 jlong id, | 171 jlong id, |
172 jint type) { | 172 jint type) { |
173 DCHECK(IsLoaded()); | 173 DCHECK(IsLoaded()); |
174 const BookmarkNode* node = GetNodeByID(id, type); | 174 const BookmarkNode* node = GetNodeByID(id, type); |
175 return node ? CreateJavaBookmark(node) : ScopedJavaLocalRef<jobject>(); | 175 return node ? CreateJavaBookmark(node) : ScopedJavaLocalRef<jobject>(); |
176 } | 176 } |
177 | 177 |
178 bool BookmarksBridge::IsDoingExtensiveChanges( | 178 bool BookmarkBridge::IsDoingExtensiveChanges( |
179 JNIEnv* env, | 179 JNIEnv* env, |
180 const JavaParamRef<jobject>& obj) { | 180 const JavaParamRef<jobject>& obj) { |
181 return bookmark_model_->IsDoingExtensiveChanges(); | 181 return bookmark_model_->IsDoingExtensiveChanges(); |
182 } | 182 } |
183 | 183 |
184 void BookmarksBridge::GetPermanentNodeIDs( | 184 void BookmarkBridge::GetPermanentNodeIDs( |
185 JNIEnv* env, | 185 JNIEnv* env, |
186 const JavaParamRef<jobject>& obj, | 186 const JavaParamRef<jobject>& obj, |
187 const JavaParamRef<jobject>& j_result_obj) { | 187 const JavaParamRef<jobject>& j_result_obj) { |
188 // TODO(kkimlabs): Remove this function. | 188 // TODO(kkimlabs): Remove this function. |
189 DCHECK(IsLoaded()); | 189 DCHECK(IsLoaded()); |
190 | 190 |
191 base::StackVector<const BookmarkNode*, 8> permanent_nodes; | 191 base::StackVector<const BookmarkNode*, 8> permanent_nodes; |
192 | 192 |
193 // Save all the permanent nodes. | 193 // Save all the permanent nodes. |
194 const BookmarkNode* root_node = bookmark_model_->root_node(); | 194 const BookmarkNode* root_node = bookmark_model_->root_node(); |
195 permanent_nodes->push_back(root_node); | 195 permanent_nodes->push_back(root_node); |
196 for (int i = 0; i < root_node->child_count(); ++i) { | 196 for (int i = 0; i < root_node->child_count(); ++i) { |
197 permanent_nodes->push_back(root_node->GetChild(i)); | 197 permanent_nodes->push_back(root_node->GetChild(i)); |
198 } | 198 } |
199 permanent_nodes->push_back( | 199 permanent_nodes->push_back( |
200 partner_bookmarks_shim_->GetPartnerBookmarksRoot()); | 200 partner_bookmarks_shim_->GetPartnerBookmarksRoot()); |
201 | 201 |
202 // Write the permanent nodes to |j_result_obj|. | 202 // Write the permanent nodes to |j_result_obj|. |
203 for (base::StackVector<const BookmarkNode*, 8>::ContainerType::const_iterator | 203 for (base::StackVector<const BookmarkNode*, 8>::ContainerType::const_iterator |
204 it = permanent_nodes->begin(); | 204 it = permanent_nodes->begin(); |
205 it != permanent_nodes->end(); | 205 it != permanent_nodes->end(); |
206 ++it) { | 206 ++it) { |
207 if (*it != NULL) { | 207 if (*it != NULL) { |
208 Java_BookmarksBridge_addToBookmarkIdList( | 208 Java_BookmarkBridge_addToBookmarkIdList( |
209 env, j_result_obj, (*it)->id(), GetBookmarkType(*it)); | 209 env, j_result_obj, (*it)->id(), GetBookmarkType(*it)); |
210 } | 210 } |
211 } | 211 } |
212 } | 212 } |
213 | 213 |
214 void BookmarksBridge::GetTopLevelFolderParentIDs( | 214 void BookmarkBridge::GetTopLevelFolderParentIDs( |
215 JNIEnv* env, | 215 JNIEnv* env, |
216 const JavaParamRef<jobject>& obj, | 216 const JavaParamRef<jobject>& obj, |
217 const JavaParamRef<jobject>& j_result_obj) { | 217 const JavaParamRef<jobject>& j_result_obj) { |
218 Java_BookmarksBridge_addToBookmarkIdList( | 218 Java_BookmarkBridge_addToBookmarkIdList( |
219 env, j_result_obj, bookmark_model_->root_node()->id(), | 219 env, j_result_obj, bookmark_model_->root_node()->id(), |
220 GetBookmarkType(bookmark_model_->root_node())); | 220 GetBookmarkType(bookmark_model_->root_node())); |
221 } | 221 } |
222 | 222 |
223 void BookmarksBridge::GetTopLevelFolderIDs( | 223 void BookmarkBridge::GetTopLevelFolderIDs( |
224 JNIEnv* env, | 224 JNIEnv* env, |
225 const JavaParamRef<jobject>& obj, | 225 const JavaParamRef<jobject>& obj, |
226 jboolean get_special, | 226 jboolean get_special, |
227 jboolean get_normal, | 227 jboolean get_normal, |
228 const JavaParamRef<jobject>& j_result_obj) { | 228 const JavaParamRef<jobject>& j_result_obj) { |
229 DCHECK(IsLoaded()); | 229 DCHECK(IsLoaded()); |
230 std::vector<const BookmarkNode*> top_level_folders; | 230 std::vector<const BookmarkNode*> top_level_folders; |
231 | 231 |
232 if (get_special) { | 232 if (get_special) { |
233 if (managed_bookmark_service_->managed_node() && | 233 if (managed_bookmark_service_->managed_node() && |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
275 } | 275 } |
276 | 276 |
277 scoped_ptr<icu::Collator> collator = GetICUCollator(); | 277 scoped_ptr<icu::Collator> collator = GetICUCollator(); |
278 std::stable_sort(top_level_folders.begin() + special_count, | 278 std::stable_sort(top_level_folders.begin() + special_count, |
279 top_level_folders.end(), | 279 top_level_folders.end(), |
280 BookmarkTitleComparer(this, collator.get())); | 280 BookmarkTitleComparer(this, collator.get())); |
281 } | 281 } |
282 | 282 |
283 for (std::vector<const BookmarkNode*>::const_iterator it = | 283 for (std::vector<const BookmarkNode*>::const_iterator it = |
284 top_level_folders.begin(); it != top_level_folders.end(); ++it) { | 284 top_level_folders.begin(); it != top_level_folders.end(); ++it) { |
285 Java_BookmarksBridge_addToBookmarkIdList(env, | 285 Java_BookmarkBridge_addToBookmarkIdList(env, |
286 j_result_obj, | 286 j_result_obj, |
287 (*it)->id(), | 287 (*it)->id(), |
288 GetBookmarkType(*it)); | 288 GetBookmarkType(*it)); |
289 } | 289 } |
290 } | 290 } |
291 | 291 |
292 void BookmarksBridge::GetAllFoldersWithDepths( | 292 void BookmarkBridge::GetAllFoldersWithDepths( |
293 JNIEnv* env, | 293 JNIEnv* env, |
294 const JavaParamRef<jobject>& obj, | 294 const JavaParamRef<jobject>& obj, |
295 const JavaParamRef<jobject>& j_folders_obj, | 295 const JavaParamRef<jobject>& j_folders_obj, |
296 const JavaParamRef<jobject>& j_depths_obj) { | 296 const JavaParamRef<jobject>& j_depths_obj) { |
297 DCHECK(IsLoaded()); | 297 DCHECK(IsLoaded()); |
298 | 298 |
299 scoped_ptr<icu::Collator> collator = GetICUCollator(); | 299 scoped_ptr<icu::Collator> collator = GetICUCollator(); |
300 | 300 |
301 // Vector to temporarily contain all child bookmarks at same level for sorting | 301 // Vector to temporarily contain all child bookmarks at same level for sorting |
302 std::vector<const BookmarkNode*> bookmarkList; | 302 std::vector<const BookmarkNode*> bookmarkList; |
(...skipping 13 matching lines...) Expand all Loading... |
316 bookmarkList.rbegin(); | 316 bookmarkList.rbegin(); |
317 it != bookmarkList.rend(); | 317 it != bookmarkList.rend(); |
318 ++it) { | 318 ++it) { |
319 stk.push(std::make_pair(*it, 0)); | 319 stk.push(std::make_pair(*it, 0)); |
320 } | 320 } |
321 | 321 |
322 while (!stk.empty()) { | 322 while (!stk.empty()) { |
323 const BookmarkNode* node = stk.top().first; | 323 const BookmarkNode* node = stk.top().first; |
324 int depth = stk.top().second; | 324 int depth = stk.top().second; |
325 stk.pop(); | 325 stk.pop(); |
326 Java_BookmarksBridge_addToBookmarkIdListWithDepth(env, | 326 Java_BookmarkBridge_addToBookmarkIdListWithDepth(env, |
327 j_folders_obj, | 327 j_folders_obj, |
328 node->id(), | 328 node->id(), |
329 GetBookmarkType(node), | 329 GetBookmarkType(node), |
330 j_depths_obj, | 330 j_depths_obj, |
331 depth); | 331 depth); |
332 bookmarkList.clear(); | 332 bookmarkList.clear(); |
333 for (int i = 0; i < node->child_count(); ++i) { | 333 for (int i = 0; i < node->child_count(); ++i) { |
334 const BookmarkNode* child = node->GetChild(i); | 334 const BookmarkNode* child = node->GetChild(i); |
335 if (child->is_folder() && | 335 if (child->is_folder() && |
336 managed_bookmark_service_->CanBeEditedByUser(child)) { | 336 managed_bookmark_service_->CanBeEditedByUser(child)) { |
337 bookmarkList.push_back(node->GetChild(i)); | 337 bookmarkList.push_back(node->GetChild(i)); |
338 } | 338 } |
339 } | 339 } |
340 std::stable_sort(bookmarkList.begin(), | 340 std::stable_sort(bookmarkList.begin(), |
341 bookmarkList.end(), | 341 bookmarkList.end(), |
342 BookmarkTitleComparer(this, collator.get())); | 342 BookmarkTitleComparer(this, collator.get())); |
343 for (std::vector<const BookmarkNode*>::reverse_iterator it = | 343 for (std::vector<const BookmarkNode*>::reverse_iterator it = |
344 bookmarkList.rbegin(); | 344 bookmarkList.rbegin(); |
345 it != bookmarkList.rend(); | 345 it != bookmarkList.rend(); |
346 ++it) { | 346 ++it) { |
347 stk.push(std::make_pair(*it, depth + 1)); | 347 stk.push(std::make_pair(*it, depth + 1)); |
348 } | 348 } |
349 } | 349 } |
350 } | 350 } |
351 | 351 |
352 ScopedJavaLocalRef<jobject> BookmarksBridge::GetRootFolderId( | 352 ScopedJavaLocalRef<jobject> BookmarkBridge::GetRootFolderId( |
353 JNIEnv* env, | 353 JNIEnv* env, |
354 const JavaParamRef<jobject>& obj) { | 354 const JavaParamRef<jobject>& obj) { |
355 const BookmarkNode* root_node = bookmark_model_->root_node(); | 355 const BookmarkNode* root_node = bookmark_model_->root_node(); |
356 ScopedJavaLocalRef<jobject> folder_id_obj = | 356 ScopedJavaLocalRef<jobject> folder_id_obj = |
357 JavaBookmarkIdCreateBookmarkId( | 357 JavaBookmarkIdCreateBookmarkId( |
358 env, root_node->id(), GetBookmarkType(root_node)); | 358 env, root_node->id(), GetBookmarkType(root_node)); |
359 return folder_id_obj; | 359 return folder_id_obj; |
360 } | 360 } |
361 | 361 |
362 ScopedJavaLocalRef<jobject> BookmarksBridge::GetMobileFolderId( | 362 ScopedJavaLocalRef<jobject> BookmarkBridge::GetMobileFolderId( |
363 JNIEnv* env, | 363 JNIEnv* env, |
364 const JavaParamRef<jobject>& obj) { | 364 const JavaParamRef<jobject>& obj) { |
365 const BookmarkNode* mobile_node = bookmark_model_->mobile_node(); | 365 const BookmarkNode* mobile_node = bookmark_model_->mobile_node(); |
366 ScopedJavaLocalRef<jobject> folder_id_obj = | 366 ScopedJavaLocalRef<jobject> folder_id_obj = |
367 JavaBookmarkIdCreateBookmarkId( | 367 JavaBookmarkIdCreateBookmarkId( |
368 env, mobile_node->id(), GetBookmarkType(mobile_node)); | 368 env, mobile_node->id(), GetBookmarkType(mobile_node)); |
369 return folder_id_obj; | 369 return folder_id_obj; |
370 } | 370 } |
371 | 371 |
372 ScopedJavaLocalRef<jobject> BookmarksBridge::GetOtherFolderId( | 372 ScopedJavaLocalRef<jobject> BookmarkBridge::GetOtherFolderId( |
373 JNIEnv* env, | 373 JNIEnv* env, |
374 const JavaParamRef<jobject>& obj) { | 374 const JavaParamRef<jobject>& obj) { |
375 const BookmarkNode* other_node = bookmark_model_->other_node(); | 375 const BookmarkNode* other_node = bookmark_model_->other_node(); |
376 ScopedJavaLocalRef<jobject> folder_id_obj = | 376 ScopedJavaLocalRef<jobject> folder_id_obj = |
377 JavaBookmarkIdCreateBookmarkId( | 377 JavaBookmarkIdCreateBookmarkId( |
378 env, other_node->id(), GetBookmarkType(other_node)); | 378 env, other_node->id(), GetBookmarkType(other_node)); |
379 return folder_id_obj; | 379 return folder_id_obj; |
380 } | 380 } |
381 | 381 |
382 ScopedJavaLocalRef<jobject> BookmarksBridge::GetDesktopFolderId( | 382 ScopedJavaLocalRef<jobject> BookmarkBridge::GetDesktopFolderId( |
383 JNIEnv* env, | 383 JNIEnv* env, |
384 const JavaParamRef<jobject>& obj) { | 384 const JavaParamRef<jobject>& obj) { |
385 const BookmarkNode* desktop_node = bookmark_model_->bookmark_bar_node(); | 385 const BookmarkNode* desktop_node = bookmark_model_->bookmark_bar_node(); |
386 ScopedJavaLocalRef<jobject> folder_id_obj = | 386 ScopedJavaLocalRef<jobject> folder_id_obj = |
387 JavaBookmarkIdCreateBookmarkId( | 387 JavaBookmarkIdCreateBookmarkId( |
388 env, desktop_node->id(), GetBookmarkType(desktop_node)); | 388 env, desktop_node->id(), GetBookmarkType(desktop_node)); |
389 return folder_id_obj; | 389 return folder_id_obj; |
390 } | 390 } |
391 | 391 |
392 jint BookmarksBridge::GetChildCount(JNIEnv* env, | 392 jint BookmarkBridge::GetChildCount(JNIEnv* env, |
393 const JavaParamRef<jobject>& obj, | 393 const JavaParamRef<jobject>& obj, |
394 jlong id, | 394 jlong id, |
395 jint type) { | 395 jint type) { |
396 DCHECK(IsLoaded()); | 396 DCHECK(IsLoaded()); |
397 const BookmarkNode* node = GetNodeByID(id, type); | 397 const BookmarkNode* node = GetNodeByID(id, type); |
398 return node->child_count(); | 398 return node->child_count(); |
399 } | 399 } |
400 | 400 |
401 void BookmarksBridge::GetChildIDs(JNIEnv* env, | 401 void BookmarkBridge::GetChildIDs(JNIEnv* env, |
402 const JavaParamRef<jobject>& obj, | 402 const JavaParamRef<jobject>& obj, |
403 jlong id, | 403 jlong id, |
404 jint type, | 404 jint type, |
405 jboolean get_folders, | 405 jboolean get_folders, |
406 jboolean get_bookmarks, | 406 jboolean get_bookmarks, |
407 const JavaParamRef<jobject>& j_result_obj) { | 407 const JavaParamRef<jobject>& j_result_obj) { |
408 DCHECK(IsLoaded()); | 408 DCHECK(IsLoaded()); |
409 | 409 |
410 const BookmarkNode* parent = GetNodeByID(id, type); | 410 const BookmarkNode* parent = GetNodeByID(id, type); |
411 if (!parent->is_folder() || !IsReachable(parent)) | 411 if (!parent->is_folder() || !IsReachable(parent)) |
412 return; | 412 return; |
413 | 413 |
414 // Get the folder contents | 414 // Get the folder contents |
415 for (int i = 0; i < parent->child_count(); ++i) { | 415 for (int i = 0; i < parent->child_count(); ++i) { |
416 const BookmarkNode* child = parent->GetChild(i); | 416 const BookmarkNode* child = parent->GetChild(i); |
417 if (!IsFolderAvailable(child) || !IsReachable(child)) | 417 if (!IsFolderAvailable(child) || !IsReachable(child)) |
418 continue; | 418 continue; |
419 | 419 |
420 if ((child->is_folder() && get_folders) || | 420 if ((child->is_folder() && get_folders) || |
421 (!child->is_folder() && get_bookmarks)) { | 421 (!child->is_folder() && get_bookmarks)) { |
422 Java_BookmarksBridge_addToBookmarkIdList( | 422 Java_BookmarkBridge_addToBookmarkIdList( |
423 env, j_result_obj, child->id(), GetBookmarkType(child)); | 423 env, j_result_obj, child->id(), GetBookmarkType(child)); |
424 } | 424 } |
425 } | 425 } |
426 | 426 |
427 // Partner bookmark root node is under mobile node. | 427 // Partner bookmark root node is under mobile node. |
428 if (parent == bookmark_model_->mobile_node() && get_folders && | 428 if (parent == bookmark_model_->mobile_node() && get_folders && |
429 partner_bookmarks_shim_->HasPartnerBookmarks() && | 429 partner_bookmarks_shim_->HasPartnerBookmarks() && |
430 IsReachable(partner_bookmarks_shim_->GetPartnerBookmarksRoot())) { | 430 IsReachable(partner_bookmarks_shim_->GetPartnerBookmarksRoot())) { |
431 Java_BookmarksBridge_addToBookmarkIdList( | 431 Java_BookmarkBridge_addToBookmarkIdList( |
432 env, | 432 env, |
433 j_result_obj, | 433 j_result_obj, |
434 partner_bookmarks_shim_->GetPartnerBookmarksRoot()->id(), | 434 partner_bookmarks_shim_->GetPartnerBookmarksRoot()->id(), |
435 BookmarkType::BOOKMARK_TYPE_PARTNER); | 435 BookmarkType::BOOKMARK_TYPE_PARTNER); |
436 } | 436 } |
437 } | 437 } |
438 | 438 |
439 ScopedJavaLocalRef<jobject> BookmarksBridge::GetChildAt( | 439 ScopedJavaLocalRef<jobject> BookmarkBridge::GetChildAt( |
440 JNIEnv* env, | 440 JNIEnv* env, |
441 const JavaParamRef<jobject>& obj, | 441 const JavaParamRef<jobject>& obj, |
442 jlong id, | 442 jlong id, |
443 jint type, | 443 jint type, |
444 jint index) { | 444 jint index) { |
445 DCHECK(IsLoaded()); | 445 DCHECK(IsLoaded()); |
446 | 446 |
447 const BookmarkNode* parent = GetNodeByID(id, type); | 447 const BookmarkNode* parent = GetNodeByID(id, type); |
448 DCHECK(parent); | 448 DCHECK(parent); |
449 const BookmarkNode* child = parent->GetChild(index); | 449 const BookmarkNode* child = parent->GetChild(index); |
450 return JavaBookmarkIdCreateBookmarkId( | 450 return JavaBookmarkIdCreateBookmarkId( |
451 env, child->id(), GetBookmarkType(child)); | 451 env, child->id(), GetBookmarkType(child)); |
452 } | 452 } |
453 | 453 |
454 void BookmarksBridge::GetAllBookmarkIDsOrderedByCreationDate( | 454 void BookmarkBridge::GetAllBookmarkIDsOrderedByCreationDate( |
455 JNIEnv* env, | 455 JNIEnv* env, |
456 const JavaParamRef<jobject>& obj, | 456 const JavaParamRef<jobject>& obj, |
457 const JavaParamRef<jobject>& j_result_obj) { | 457 const JavaParamRef<jobject>& j_result_obj) { |
458 DCHECK(IsLoaded()); | 458 DCHECK(IsLoaded()); |
459 std::list<const BookmarkNode*> folders; | 459 std::list<const BookmarkNode*> folders; |
460 std::vector<const BookmarkNode*> result; | 460 std::vector<const BookmarkNode*> result; |
461 folders.push_back(bookmark_model_->root_node()); | 461 folders.push_back(bookmark_model_->root_node()); |
462 | 462 |
463 for (std::list<const BookmarkNode*>::iterator folder_iter = folders.begin(); | 463 for (std::list<const BookmarkNode*>::iterator folder_iter = folders.begin(); |
464 folder_iter != folders.end(); ++folder_iter) { | 464 folder_iter != folders.end(); ++folder_iter) { |
(...skipping 21 matching lines...) Expand all Loading... |
486 } | 486 } |
487 } | 487 } |
488 | 488 |
489 std::sort( | 489 std::sort( |
490 result.begin(), result.end(), BookmarkNodeCreationTimeCompareFunctor()); | 490 result.begin(), result.end(), BookmarkNodeCreationTimeCompareFunctor()); |
491 | 491 |
492 for (std::vector<const BookmarkNode*>::const_iterator iter = result.begin(); | 492 for (std::vector<const BookmarkNode*>::const_iterator iter = result.begin(); |
493 iter != result.end(); | 493 iter != result.end(); |
494 ++iter) { | 494 ++iter) { |
495 const BookmarkNode* bookmark = *iter; | 495 const BookmarkNode* bookmark = *iter; |
496 Java_BookmarksBridge_addToBookmarkIdList( | 496 Java_BookmarkBridge_addToBookmarkIdList( |
497 env, j_result_obj, bookmark->id(), GetBookmarkType(bookmark)); | 497 env, j_result_obj, bookmark->id(), GetBookmarkType(bookmark)); |
498 } | 498 } |
499 } | 499 } |
500 | 500 |
501 void BookmarksBridge::SetBookmarkTitle(JNIEnv* env, | 501 void BookmarkBridge::SetBookmarkTitle(JNIEnv* env, |
502 const JavaParamRef<jobject>& obj, | 502 const JavaParamRef<jobject>& obj, |
503 jlong id, | 503 jlong id, |
504 jint type, | 504 jint type, |
505 const JavaParamRef<jstring>& j_title) { | 505 const JavaParamRef<jstring>& j_title) { |
506 DCHECK(IsLoaded()); | 506 DCHECK(IsLoaded()); |
507 const BookmarkNode* bookmark = GetNodeByID(id, type); | 507 const BookmarkNode* bookmark = GetNodeByID(id, type); |
508 const base::string16 title = | 508 const base::string16 title = |
509 base::android::ConvertJavaStringToUTF16(env, j_title); | 509 base::android::ConvertJavaStringToUTF16(env, j_title); |
510 | 510 |
511 if (partner_bookmarks_shim_->IsPartnerBookmark(bookmark)) { | 511 if (partner_bookmarks_shim_->IsPartnerBookmark(bookmark)) { |
512 partner_bookmarks_shim_->RenameBookmark(bookmark, title); | 512 partner_bookmarks_shim_->RenameBookmark(bookmark, title); |
513 } else { | 513 } else { |
514 bookmark_model_->SetTitle(bookmark, title); | 514 bookmark_model_->SetTitle(bookmark, title); |
515 } | 515 } |
516 } | 516 } |
517 | 517 |
518 void BookmarksBridge::SetBookmarkUrl(JNIEnv* env, | 518 void BookmarkBridge::SetBookmarkUrl(JNIEnv* env, |
519 const JavaParamRef<jobject>& obj, | 519 const JavaParamRef<jobject>& obj, |
520 jlong id, | 520 jlong id, |
521 jint type, | 521 jint type, |
522 const JavaParamRef<jstring>& url) { | 522 const JavaParamRef<jstring>& url) { |
523 DCHECK(IsLoaded()); | 523 DCHECK(IsLoaded()); |
524 bookmark_model_->SetURL( | 524 bookmark_model_->SetURL( |
525 GetNodeByID(id, type), | 525 GetNodeByID(id, type), |
526 GURL(base::android::ConvertJavaStringToUTF16(env, url))); | 526 GURL(base::android::ConvertJavaStringToUTF16(env, url))); |
527 } | 527 } |
528 | 528 |
529 bool BookmarksBridge::DoesBookmarkExist(JNIEnv* env, | 529 bool BookmarkBridge::DoesBookmarkExist(JNIEnv* env, |
530 const JavaParamRef<jobject>& obj, | 530 const JavaParamRef<jobject>& obj, |
531 jlong id, | 531 jlong id, |
532 jint type) { | 532 jint type) { |
533 DCHECK(IsLoaded()); | 533 DCHECK(IsLoaded()); |
534 | 534 |
535 const BookmarkNode* node = GetNodeByID(id, type); | 535 const BookmarkNode* node = GetNodeByID(id, type); |
536 | 536 |
537 if (!node) | 537 if (!node) |
538 return false; | 538 return false; |
539 | 539 |
540 if (type == BookmarkType::BOOKMARK_TYPE_NORMAL) { | 540 if (type == BookmarkType::BOOKMARK_TYPE_NORMAL) { |
541 return true; | 541 return true; |
542 } else { | 542 } else { |
543 DCHECK(type == BookmarkType::BOOKMARK_TYPE_PARTNER); | 543 DCHECK(type == BookmarkType::BOOKMARK_TYPE_PARTNER); |
544 return partner_bookmarks_shim_->IsReachable(node); | 544 return partner_bookmarks_shim_->IsReachable(node); |
545 } | 545 } |
546 } | 546 } |
547 | 547 |
548 void BookmarksBridge::GetBookmarksForFolder( | 548 void BookmarkBridge::GetBookmarksForFolder( |
549 JNIEnv* env, | 549 JNIEnv* env, |
550 const JavaParamRef<jobject>& obj, | 550 const JavaParamRef<jobject>& obj, |
551 const JavaParamRef<jobject>& j_folder_id_obj, | 551 const JavaParamRef<jobject>& j_folder_id_obj, |
552 const JavaParamRef<jobject>& j_callback_obj, | 552 const JavaParamRef<jobject>& j_callback_obj, |
553 const JavaParamRef<jobject>& j_result_obj) { | 553 const JavaParamRef<jobject>& j_result_obj) { |
554 DCHECK(IsLoaded()); | 554 DCHECK(IsLoaded()); |
555 long folder_id = JavaBookmarkIdGetId(env, j_folder_id_obj); | 555 long folder_id = JavaBookmarkIdGetId(env, j_folder_id_obj); |
556 int type = JavaBookmarkIdGetType(env, j_folder_id_obj); | 556 int type = JavaBookmarkIdGetType(env, j_folder_id_obj); |
557 const BookmarkNode* folder = GetFolderWithFallback(folder_id, type); | 557 const BookmarkNode* folder = GetFolderWithFallback(folder_id, type); |
558 | 558 |
(...skipping 19 matching lines...) Expand all Loading... |
578 partner_bookmarks_shim_->GetPartnerBookmarksRoot(), | 578 partner_bookmarks_shim_->GetPartnerBookmarksRoot(), |
579 j_result_obj); | 579 j_result_obj); |
580 } | 580 } |
581 | 581 |
582 if (j_callback_obj) { | 582 if (j_callback_obj) { |
583 Java_BookmarksCallback_onBookmarksAvailable( | 583 Java_BookmarksCallback_onBookmarksAvailable( |
584 env, j_callback_obj, folder_id_obj.obj(), j_result_obj); | 584 env, j_callback_obj, folder_id_obj.obj(), j_result_obj); |
585 } | 585 } |
586 } | 586 } |
587 | 587 |
588 jboolean BookmarksBridge::IsFolderVisible(JNIEnv* env, | 588 jboolean BookmarkBridge::IsFolderVisible(JNIEnv* env, |
589 const JavaParamRef<jobject>& obj, | 589 const JavaParamRef<jobject>& obj, |
590 jlong id, | 590 jlong id, |
591 jint type) { | 591 jint type) { |
592 if (type == BookmarkType::BOOKMARK_TYPE_NORMAL) { | 592 if (type == BookmarkType::BOOKMARK_TYPE_NORMAL) { |
593 const BookmarkNode* node = bookmarks::GetBookmarkNodeByID( | 593 const BookmarkNode* node = bookmarks::GetBookmarkNodeByID( |
594 bookmark_model_, static_cast<int64_t>(id)); | 594 bookmark_model_, static_cast<int64_t>(id)); |
595 return node->IsVisible(); | 595 return node->IsVisible(); |
596 } else if (type == BookmarkType::BOOKMARK_TYPE_PARTNER) { | 596 } else if (type == BookmarkType::BOOKMARK_TYPE_PARTNER) { |
597 const BookmarkNode* node = partner_bookmarks_shim_->GetNodeByID( | 597 const BookmarkNode* node = partner_bookmarks_shim_->GetNodeByID( |
598 static_cast<long>(id)); | 598 static_cast<long>(id)); |
599 return partner_bookmarks_shim_->IsReachable(node); | 599 return partner_bookmarks_shim_->IsReachable(node); |
600 } | 600 } |
601 | 601 |
602 NOTREACHED(); | 602 NOTREACHED(); |
603 return false; | 603 return false; |
604 } | 604 } |
605 | 605 |
606 void BookmarksBridge::GetCurrentFolderHierarchy( | 606 void BookmarkBridge::GetCurrentFolderHierarchy( |
607 JNIEnv* env, | 607 JNIEnv* env, |
608 const JavaParamRef<jobject>& obj, | 608 const JavaParamRef<jobject>& obj, |
609 const JavaParamRef<jobject>& j_folder_id_obj, | 609 const JavaParamRef<jobject>& j_folder_id_obj, |
610 const JavaParamRef<jobject>& j_callback_obj, | 610 const JavaParamRef<jobject>& j_callback_obj, |
611 const JavaParamRef<jobject>& j_result_obj) { | 611 const JavaParamRef<jobject>& j_result_obj) { |
612 DCHECK(IsLoaded()); | 612 DCHECK(IsLoaded()); |
613 long folder_id = JavaBookmarkIdGetId(env, j_folder_id_obj); | 613 long folder_id = JavaBookmarkIdGetId(env, j_folder_id_obj); |
614 int type = JavaBookmarkIdGetType(env, j_folder_id_obj); | 614 int type = JavaBookmarkIdGetType(env, j_folder_id_obj); |
615 const BookmarkNode* folder = GetFolderWithFallback(folder_id, type); | 615 const BookmarkNode* folder = GetFolderWithFallback(folder_id, type); |
616 | 616 |
617 if (!folder->is_folder() || !IsReachable(folder)) | 617 if (!folder->is_folder() || !IsReachable(folder)) |
618 return; | 618 return; |
619 | 619 |
620 // Recreate the java bookmarkId object due to fallback. | 620 // Recreate the java bookmarkId object due to fallback. |
621 ScopedJavaLocalRef<jobject> folder_id_obj = | 621 ScopedJavaLocalRef<jobject> folder_id_obj = |
622 JavaBookmarkIdCreateBookmarkId( | 622 JavaBookmarkIdCreateBookmarkId( |
623 env, folder->id(), GetBookmarkType(folder)); | 623 env, folder->id(), GetBookmarkType(folder)); |
624 | 624 |
625 // Get the folder hierarchy. | 625 // Get the folder hierarchy. |
626 const BookmarkNode* node = folder; | 626 const BookmarkNode* node = folder; |
627 while (node) { | 627 while (node) { |
628 ExtractBookmarkNodeInformation(node, j_result_obj); | 628 ExtractBookmarkNodeInformation(node, j_result_obj); |
629 node = GetParentNode(node); | 629 node = GetParentNode(node); |
630 } | 630 } |
631 | 631 |
632 Java_BookmarksCallback_onBookmarksFolderHierarchyAvailable( | 632 Java_BookmarksCallback_onBookmarksFolderHierarchyAvailable( |
633 env, j_callback_obj, folder_id_obj.obj(), j_result_obj); | 633 env, j_callback_obj, folder_id_obj.obj(), j_result_obj); |
634 } | 634 } |
635 | 635 |
636 void BookmarksBridge::SearchBookmarks(JNIEnv* env, | 636 void BookmarkBridge::SearchBookmarks(JNIEnv* env, |
637 const JavaParamRef<jobject>& obj, | 637 const JavaParamRef<jobject>& obj, |
638 const JavaParamRef<jobject>& j_list, | 638 const JavaParamRef<jobject>& j_list, |
639 const JavaParamRef<jstring>& j_query, | 639 const JavaParamRef<jstring>& j_query, |
640 jint max_results) { | 640 jint max_results) { |
641 DCHECK(bookmark_model_->loaded()); | 641 DCHECK(bookmark_model_->loaded()); |
642 | 642 |
643 std::vector<bookmarks::BookmarkMatch> results; | 643 std::vector<bookmarks::BookmarkMatch> results; |
644 bookmark_model_->GetBookmarksMatching( | 644 bookmark_model_->GetBookmarksMatching( |
645 base::android::ConvertJavaStringToUTF16(env, j_query), | 645 base::android::ConvertJavaStringToUTF16(env, j_query), |
646 max_results, | 646 max_results, |
647 query_parser::MatchingAlgorithm::ALWAYS_PREFIX_SEARCH, | 647 query_parser::MatchingAlgorithm::ALWAYS_PREFIX_SEARCH, |
648 &results); | 648 &results); |
649 for (const bookmarks::BookmarkMatch& match : results) { | 649 for (const bookmarks::BookmarkMatch& match : results) { |
650 const BookmarkNode* node = match.node; | 650 const BookmarkNode* node = match.node; |
651 | 651 |
652 std::vector<int> title_match_start_positions; | 652 std::vector<int> title_match_start_positions; |
653 std::vector<int> title_match_end_positions; | 653 std::vector<int> title_match_end_positions; |
654 for (auto position : match.title_match_positions) { | 654 for (auto position : match.title_match_positions) { |
655 title_match_start_positions.push_back(position.first); | 655 title_match_start_positions.push_back(position.first); |
656 title_match_end_positions.push_back(position.second); | 656 title_match_end_positions.push_back(position.second); |
657 } | 657 } |
658 | 658 |
659 std::vector<int> url_match_start_positions; | 659 std::vector<int> url_match_start_positions; |
660 std::vector<int> url_match_end_positions; | 660 std::vector<int> url_match_end_positions; |
661 for (auto position : match.url_match_positions) { | 661 for (auto position : match.url_match_positions) { |
662 url_match_start_positions.push_back(position.first); | 662 url_match_start_positions.push_back(position.first); |
663 url_match_end_positions.push_back(position.second); | 663 url_match_end_positions.push_back(position.second); |
664 } | 664 } |
665 | 665 |
666 Java_BookmarksBridge_addToBookmarkMatchList( | 666 Java_BookmarkBridge_addToBookmarkMatchList( |
667 env, j_list, node->id(), node->type(), | 667 env, j_list, node->id(), node->type(), |
668 ToJavaIntArray(env, title_match_start_positions).obj(), | 668 ToJavaIntArray(env, title_match_start_positions).obj(), |
669 ToJavaIntArray(env, title_match_end_positions).obj(), | 669 ToJavaIntArray(env, title_match_end_positions).obj(), |
670 ToJavaIntArray(env, url_match_start_positions).obj(), | 670 ToJavaIntArray(env, url_match_start_positions).obj(), |
671 ToJavaIntArray(env, url_match_end_positions).obj()); | 671 ToJavaIntArray(env, url_match_end_positions).obj()); |
672 } | 672 } |
673 } | 673 } |
674 | 674 |
675 ScopedJavaLocalRef<jobject> BookmarksBridge::AddFolder( | 675 ScopedJavaLocalRef<jobject> BookmarkBridge::AddFolder( |
676 JNIEnv* env, | 676 JNIEnv* env, |
677 const JavaParamRef<jobject>& obj, | 677 const JavaParamRef<jobject>& obj, |
678 const JavaParamRef<jobject>& j_parent_id_obj, | 678 const JavaParamRef<jobject>& j_parent_id_obj, |
679 jint index, | 679 jint index, |
680 const JavaParamRef<jstring>& j_title) { | 680 const JavaParamRef<jstring>& j_title) { |
681 DCHECK(IsLoaded()); | 681 DCHECK(IsLoaded()); |
682 long bookmark_id = JavaBookmarkIdGetId(env, j_parent_id_obj); | 682 long bookmark_id = JavaBookmarkIdGetId(env, j_parent_id_obj); |
683 int type = JavaBookmarkIdGetType(env, j_parent_id_obj); | 683 int type = JavaBookmarkIdGetType(env, j_parent_id_obj); |
684 const BookmarkNode* parent = GetNodeByID(bookmark_id, type); | 684 const BookmarkNode* parent = GetNodeByID(bookmark_id, type); |
685 | 685 |
686 const BookmarkNode* new_node = bookmark_model_->AddFolder( | 686 const BookmarkNode* new_node = bookmark_model_->AddFolder( |
687 parent, index, base::android::ConvertJavaStringToUTF16(env, j_title)); | 687 parent, index, base::android::ConvertJavaStringToUTF16(env, j_title)); |
688 if (!new_node) { | 688 if (!new_node) { |
689 NOTREACHED(); | 689 NOTREACHED(); |
690 return ScopedJavaLocalRef<jobject>(); | 690 return ScopedJavaLocalRef<jobject>(); |
691 } | 691 } |
692 ScopedJavaLocalRef<jobject> new_java_obj = | 692 ScopedJavaLocalRef<jobject> new_java_obj = |
693 JavaBookmarkIdCreateBookmarkId( | 693 JavaBookmarkIdCreateBookmarkId( |
694 env, new_node->id(), GetBookmarkType(new_node)); | 694 env, new_node->id(), GetBookmarkType(new_node)); |
695 return new_java_obj; | 695 return new_java_obj; |
696 } | 696 } |
697 | 697 |
698 void BookmarksBridge::DeleteBookmark( | 698 void BookmarkBridge::DeleteBookmark( |
699 JNIEnv* env, | 699 JNIEnv* env, |
700 const JavaParamRef<jobject>& obj, | 700 const JavaParamRef<jobject>& obj, |
701 const JavaParamRef<jobject>& j_bookmark_id_obj) { | 701 const JavaParamRef<jobject>& j_bookmark_id_obj) { |
702 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 702 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
703 DCHECK(IsLoaded()); | 703 DCHECK(IsLoaded()); |
704 | 704 |
705 long bookmark_id = JavaBookmarkIdGetId(env, j_bookmark_id_obj); | 705 long bookmark_id = JavaBookmarkIdGetId(env, j_bookmark_id_obj); |
706 int type = JavaBookmarkIdGetType(env, j_bookmark_id_obj); | 706 int type = JavaBookmarkIdGetType(env, j_bookmark_id_obj); |
707 const BookmarkNode* node = GetNodeByID(bookmark_id, type); | 707 const BookmarkNode* node = GetNodeByID(bookmark_id, type); |
708 if (!IsEditable(node)) { | 708 if (!IsEditable(node)) { |
709 NOTREACHED(); | 709 NOTREACHED(); |
710 return; | 710 return; |
711 } | 711 } |
712 | 712 |
713 if (partner_bookmarks_shim_->IsPartnerBookmark(node)) | 713 if (partner_bookmarks_shim_->IsPartnerBookmark(node)) |
714 partner_bookmarks_shim_->RemoveBookmark(node); | 714 partner_bookmarks_shim_->RemoveBookmark(node); |
715 else | 715 else |
716 bookmark_model_->Remove(node); | 716 bookmark_model_->Remove(node); |
717 } | 717 } |
718 | 718 |
719 void BookmarksBridge::MoveBookmark( | 719 void BookmarkBridge::MoveBookmark( |
720 JNIEnv* env, | 720 JNIEnv* env, |
721 const JavaParamRef<jobject>& obj, | 721 const JavaParamRef<jobject>& obj, |
722 const JavaParamRef<jobject>& j_bookmark_id_obj, | 722 const JavaParamRef<jobject>& j_bookmark_id_obj, |
723 const JavaParamRef<jobject>& j_parent_id_obj, | 723 const JavaParamRef<jobject>& j_parent_id_obj, |
724 jint index) { | 724 jint index) { |
725 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 725 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
726 DCHECK(IsLoaded()); | 726 DCHECK(IsLoaded()); |
727 | 727 |
728 long bookmark_id = JavaBookmarkIdGetId(env, j_bookmark_id_obj); | 728 long bookmark_id = JavaBookmarkIdGetId(env, j_bookmark_id_obj); |
729 int type = JavaBookmarkIdGetType(env, j_bookmark_id_obj); | 729 int type = JavaBookmarkIdGetType(env, j_bookmark_id_obj); |
730 const BookmarkNode* node = GetNodeByID(bookmark_id, type); | 730 const BookmarkNode* node = GetNodeByID(bookmark_id, type); |
731 if (!IsEditable(node)) { | 731 if (!IsEditable(node)) { |
732 NOTREACHED(); | 732 NOTREACHED(); |
733 return; | 733 return; |
734 } | 734 } |
735 bookmark_id = JavaBookmarkIdGetId(env, j_parent_id_obj); | 735 bookmark_id = JavaBookmarkIdGetId(env, j_parent_id_obj); |
736 type = JavaBookmarkIdGetType(env, j_parent_id_obj); | 736 type = JavaBookmarkIdGetType(env, j_parent_id_obj); |
737 const BookmarkNode* new_parent_node = GetNodeByID(bookmark_id, type); | 737 const BookmarkNode* new_parent_node = GetNodeByID(bookmark_id, type); |
738 bookmark_model_->Move(node, new_parent_node, index); | 738 bookmark_model_->Move(node, new_parent_node, index); |
739 } | 739 } |
740 | 740 |
741 ScopedJavaLocalRef<jobject> BookmarksBridge::AddBookmark( | 741 ScopedJavaLocalRef<jobject> BookmarkBridge::AddBookmark( |
742 JNIEnv* env, | 742 JNIEnv* env, |
743 const JavaParamRef<jobject>& obj, | 743 const JavaParamRef<jobject>& obj, |
744 const JavaParamRef<jobject>& j_parent_id_obj, | 744 const JavaParamRef<jobject>& j_parent_id_obj, |
745 jint index, | 745 jint index, |
746 const JavaParamRef<jstring>& j_title, | 746 const JavaParamRef<jstring>& j_title, |
747 const JavaParamRef<jstring>& j_url) { | 747 const JavaParamRef<jstring>& j_url) { |
748 DCHECK(IsLoaded()); | 748 DCHECK(IsLoaded()); |
749 long bookmark_id = JavaBookmarkIdGetId(env, j_parent_id_obj); | 749 long bookmark_id = JavaBookmarkIdGetId(env, j_parent_id_obj); |
750 int type = JavaBookmarkIdGetType(env, j_parent_id_obj); | 750 int type = JavaBookmarkIdGetType(env, j_parent_id_obj); |
751 const BookmarkNode* parent = GetNodeByID(bookmark_id, type); | 751 const BookmarkNode* parent = GetNodeByID(bookmark_id, type); |
752 | 752 |
753 const BookmarkNode* new_node = bookmark_model_->AddURL( | 753 const BookmarkNode* new_node = bookmark_model_->AddURL( |
754 parent, | 754 parent, |
755 index, | 755 index, |
756 base::android::ConvertJavaStringToUTF16(env, j_title), | 756 base::android::ConvertJavaStringToUTF16(env, j_title), |
757 GURL(base::android::ConvertJavaStringToUTF16(env, j_url))); | 757 GURL(base::android::ConvertJavaStringToUTF16(env, j_url))); |
758 if (!new_node) { | 758 if (!new_node) { |
759 NOTREACHED(); | 759 NOTREACHED(); |
760 return ScopedJavaLocalRef<jobject>(); | 760 return ScopedJavaLocalRef<jobject>(); |
761 } | 761 } |
762 ScopedJavaLocalRef<jobject> new_java_obj = | 762 ScopedJavaLocalRef<jobject> new_java_obj = |
763 JavaBookmarkIdCreateBookmarkId( | 763 JavaBookmarkIdCreateBookmarkId( |
764 env, new_node->id(), GetBookmarkType(new_node)); | 764 env, new_node->id(), GetBookmarkType(new_node)); |
765 return new_java_obj; | 765 return new_java_obj; |
766 } | 766 } |
767 | 767 |
768 void BookmarksBridge::Undo(JNIEnv* env, const JavaParamRef<jobject>& obj) { | 768 void BookmarkBridge::Undo(JNIEnv* env, const JavaParamRef<jobject>& obj) { |
769 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 769 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
770 DCHECK(IsLoaded()); | 770 DCHECK(IsLoaded()); |
771 BookmarkUndoService* undo_service = | 771 BookmarkUndoService* undo_service = |
772 BookmarkUndoServiceFactory::GetForProfile(profile_); | 772 BookmarkUndoServiceFactory::GetForProfile(profile_); |
773 UndoManager* undo_manager = undo_service->undo_manager(); | 773 UndoManager* undo_manager = undo_service->undo_manager(); |
774 undo_manager->Undo(); | 774 undo_manager->Undo(); |
775 } | 775 } |
776 | 776 |
777 void BookmarksBridge::StartGroupingUndos(JNIEnv* env, | 777 void BookmarkBridge::StartGroupingUndos(JNIEnv* env, |
778 const JavaParamRef<jobject>& obj) { | 778 const JavaParamRef<jobject>& obj) { |
779 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 779 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
780 DCHECK(IsLoaded()); | 780 DCHECK(IsLoaded()); |
781 DCHECK(!grouped_bookmark_actions_.get()); // shouldn't have started already | 781 DCHECK(!grouped_bookmark_actions_.get()); // shouldn't have started already |
782 grouped_bookmark_actions_.reset( | 782 grouped_bookmark_actions_.reset( |
783 new bookmarks::ScopedGroupBookmarkActions(bookmark_model_)); | 783 new bookmarks::ScopedGroupBookmarkActions(bookmark_model_)); |
784 } | 784 } |
785 | 785 |
786 void BookmarksBridge::EndGroupingUndos(JNIEnv* env, | 786 void BookmarkBridge::EndGroupingUndos(JNIEnv* env, |
787 const JavaParamRef<jobject>& obj) { | 787 const JavaParamRef<jobject>& obj) { |
788 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 788 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
789 DCHECK(IsLoaded()); | 789 DCHECK(IsLoaded()); |
790 DCHECK(grouped_bookmark_actions_.get()); // should only call after start | 790 DCHECK(grouped_bookmark_actions_.get()); // should only call after start |
791 grouped_bookmark_actions_.reset(); | 791 grouped_bookmark_actions_.reset(); |
792 } | 792 } |
793 | 793 |
794 base::string16 BookmarksBridge::GetTitle(const BookmarkNode* node) const { | 794 base::string16 BookmarkBridge::GetTitle(const BookmarkNode* node) const { |
795 if (partner_bookmarks_shim_->IsPartnerBookmark(node)) | 795 if (partner_bookmarks_shim_->IsPartnerBookmark(node)) |
796 return partner_bookmarks_shim_->GetTitle(node); | 796 return partner_bookmarks_shim_->GetTitle(node); |
797 | 797 |
798 return node->GetTitle(); | 798 return node->GetTitle(); |
799 } | 799 } |
800 | 800 |
801 ScopedJavaLocalRef<jobject> BookmarksBridge::CreateJavaBookmark( | 801 ScopedJavaLocalRef<jobject> BookmarkBridge::CreateJavaBookmark( |
802 const BookmarkNode* node) { | 802 const BookmarkNode* node) { |
803 JNIEnv* env = AttachCurrentThread(); | 803 JNIEnv* env = AttachCurrentThread(); |
804 | 804 |
805 const BookmarkNode* parent = GetParentNode(node); | 805 const BookmarkNode* parent = GetParentNode(node); |
806 int64_t parent_id = parent ? parent->id() : -1; | 806 int64_t parent_id = parent ? parent->id() : -1; |
807 | 807 |
808 std::string url; | 808 std::string url; |
809 if (node->is_url()) | 809 if (node->is_url()) |
810 url = node->url().spec(); | 810 url = node->url().spec(); |
811 | 811 |
812 return Java_BookmarksBridge_createBookmarkItem( | 812 return Java_BookmarkBridge_createBookmarkItem( |
813 env, | 813 env, |
814 node->id(), | 814 node->id(), |
815 GetBookmarkType(node), | 815 GetBookmarkType(node), |
816 ConvertUTF16ToJavaString(env, GetTitle(node)).obj(), | 816 ConvertUTF16ToJavaString(env, GetTitle(node)).obj(), |
817 ConvertUTF8ToJavaString(env, url).obj(), | 817 ConvertUTF8ToJavaString(env, url).obj(), |
818 node->is_folder(), | 818 node->is_folder(), |
819 parent_id, | 819 parent_id, |
820 GetBookmarkType(parent), | 820 GetBookmarkType(parent), |
821 IsEditable(node), | 821 IsEditable(node), |
822 IsManaged(node)); | 822 IsManaged(node)); |
823 } | 823 } |
824 | 824 |
825 void BookmarksBridge::ExtractBookmarkNodeInformation(const BookmarkNode* node, | 825 void BookmarkBridge::ExtractBookmarkNodeInformation(const BookmarkNode* node, |
826 jobject j_result_obj) { | 826 jobject j_result_obj) { |
827 JNIEnv* env = AttachCurrentThread(); | 827 JNIEnv* env = AttachCurrentThread(); |
828 if (!IsReachable(node)) | 828 if (!IsReachable(node)) |
829 return; | 829 return; |
830 Java_BookmarksBridge_addToList( | 830 Java_BookmarkBridge_addToList( |
831 env, j_result_obj, CreateJavaBookmark(node).obj()); | 831 env, j_result_obj, CreateJavaBookmark(node).obj()); |
832 } | 832 } |
833 | 833 |
834 const BookmarkNode* BookmarksBridge::GetNodeByID(long node_id, int type) { | 834 const BookmarkNode* BookmarkBridge::GetNodeByID(long node_id, int type) { |
835 const BookmarkNode* node; | 835 const BookmarkNode* node; |
836 if (type == BookmarkType::BOOKMARK_TYPE_PARTNER) { | 836 if (type == BookmarkType::BOOKMARK_TYPE_PARTNER) { |
837 node = partner_bookmarks_shim_->GetNodeByID(static_cast<int64_t>(node_id)); | 837 node = partner_bookmarks_shim_->GetNodeByID(static_cast<int64_t>(node_id)); |
838 } else { | 838 } else { |
839 node = bookmarks::GetBookmarkNodeByID(bookmark_model_, | 839 node = bookmarks::GetBookmarkNodeByID(bookmark_model_, |
840 static_cast<int64_t>(node_id)); | 840 static_cast<int64_t>(node_id)); |
841 } | 841 } |
842 return node; | 842 return node; |
843 } | 843 } |
844 | 844 |
845 const BookmarkNode* BookmarksBridge::GetFolderWithFallback(long folder_id, | 845 const BookmarkNode* BookmarkBridge::GetFolderWithFallback(long folder_id, |
846 int type) { | 846 int type) { |
847 const BookmarkNode* folder = GetNodeByID(folder_id, type); | 847 const BookmarkNode* folder = GetNodeByID(folder_id, type); |
848 if (!folder || folder->type() == BookmarkNode::URL || | 848 if (!folder || folder->type() == BookmarkNode::URL || |
849 !IsFolderAvailable(folder)) { | 849 !IsFolderAvailable(folder)) { |
850 if (!managed_bookmark_service_->managed_node()->empty()) | 850 if (!managed_bookmark_service_->managed_node()->empty()) |
851 folder = managed_bookmark_service_->managed_node(); | 851 folder = managed_bookmark_service_->managed_node(); |
852 else | 852 else |
853 folder = bookmark_model_->mobile_node(); | 853 folder = bookmark_model_->mobile_node(); |
854 } | 854 } |
855 return folder; | 855 return folder; |
856 } | 856 } |
857 | 857 |
858 bool BookmarksBridge::IsEditBookmarksEnabled() const { | 858 bool BookmarkBridge::IsEditBookmarksEnabled() const { |
859 return profile_->GetPrefs()->GetBoolean( | 859 return profile_->GetPrefs()->GetBoolean( |
860 bookmarks::prefs::kEditBookmarksEnabled); | 860 bookmarks::prefs::kEditBookmarksEnabled); |
861 } | 861 } |
862 | 862 |
863 void BookmarksBridge::EditBookmarksEnabledChanged() { | 863 void BookmarkBridge::EditBookmarksEnabledChanged() { |
864 JNIEnv* env = AttachCurrentThread(); | 864 JNIEnv* env = AttachCurrentThread(); |
865 ScopedJavaLocalRef<jobject> obj = weak_java_ref_.get(env); | 865 ScopedJavaLocalRef<jobject> obj = weak_java_ref_.get(env); |
866 if (obj.is_null()) | 866 if (obj.is_null()) |
867 return; | 867 return; |
868 Java_BookmarksBridge_editBookmarksEnabledChanged(env, obj.obj()); | 868 Java_BookmarkBridge_editBookmarksEnabledChanged(env, obj.obj()); |
869 } | 869 } |
870 | 870 |
871 bool BookmarksBridge::IsEditable(const BookmarkNode* node) const { | 871 bool BookmarkBridge::IsEditable(const BookmarkNode* node) const { |
872 if (!node || (node->type() != BookmarkNode::FOLDER && | 872 if (!node || (node->type() != BookmarkNode::FOLDER && |
873 node->type() != BookmarkNode::URL)) { | 873 node->type() != BookmarkNode::URL)) { |
874 return false; | 874 return false; |
875 } | 875 } |
876 if (!IsEditBookmarksEnabled()) | 876 if (!IsEditBookmarksEnabled()) |
877 return false; | 877 return false; |
878 if (partner_bookmarks_shim_->IsPartnerBookmark(node)) | 878 if (partner_bookmarks_shim_->IsPartnerBookmark(node)) |
879 return partner_bookmarks_shim_->IsEditable(node); | 879 return partner_bookmarks_shim_->IsEditable(node); |
880 return managed_bookmark_service_->CanBeEditedByUser(node); | 880 return managed_bookmark_service_->CanBeEditedByUser(node); |
881 } | 881 } |
882 | 882 |
883 bool BookmarksBridge::IsManaged(const BookmarkNode* node) const { | 883 bool BookmarkBridge::IsManaged(const BookmarkNode* node) const { |
884 return bookmarks::IsDescendantOf(node, | 884 return bookmarks::IsDescendantOf(node, |
885 managed_bookmark_service_->managed_node()); | 885 managed_bookmark_service_->managed_node()); |
886 } | 886 } |
887 | 887 |
888 const BookmarkNode* BookmarksBridge::GetParentNode(const BookmarkNode* node) { | 888 const BookmarkNode* BookmarkBridge::GetParentNode(const BookmarkNode* node) { |
889 DCHECK(IsLoaded()); | 889 DCHECK(IsLoaded()); |
890 if (node == partner_bookmarks_shim_->GetPartnerBookmarksRoot()) { | 890 if (node == partner_bookmarks_shim_->GetPartnerBookmarksRoot()) { |
891 return bookmark_model_->mobile_node(); | 891 return bookmark_model_->mobile_node(); |
892 } else { | 892 } else { |
893 return node->parent(); | 893 return node->parent(); |
894 } | 894 } |
895 } | 895 } |
896 | 896 |
897 int BookmarksBridge::GetBookmarkType(const BookmarkNode* node) { | 897 int BookmarkBridge::GetBookmarkType(const BookmarkNode* node) { |
898 if (partner_bookmarks_shim_->IsPartnerBookmark(node)) | 898 if (partner_bookmarks_shim_->IsPartnerBookmark(node)) |
899 return BookmarkType::BOOKMARK_TYPE_PARTNER; | 899 return BookmarkType::BOOKMARK_TYPE_PARTNER; |
900 else | 900 else |
901 return BookmarkType::BOOKMARK_TYPE_NORMAL; | 901 return BookmarkType::BOOKMARK_TYPE_NORMAL; |
902 } | 902 } |
903 | 903 |
904 bool BookmarksBridge::IsReachable(const BookmarkNode* node) const { | 904 bool BookmarkBridge::IsReachable(const BookmarkNode* node) const { |
905 if (!partner_bookmarks_shim_->IsPartnerBookmark(node)) | 905 if (!partner_bookmarks_shim_->IsPartnerBookmark(node)) |
906 return true; | 906 return true; |
907 return partner_bookmarks_shim_->IsReachable(node); | 907 return partner_bookmarks_shim_->IsReachable(node); |
908 } | 908 } |
909 | 909 |
910 bool BookmarksBridge::IsLoaded() const { | 910 bool BookmarkBridge::IsLoaded() const { |
911 return (bookmark_model_->loaded() && partner_bookmarks_shim_->IsLoaded()); | 911 return (bookmark_model_->loaded() && partner_bookmarks_shim_->IsLoaded()); |
912 } | 912 } |
913 | 913 |
914 bool BookmarksBridge::IsFolderAvailable( | 914 bool BookmarkBridge::IsFolderAvailable( |
915 const BookmarkNode* folder) const { | 915 const BookmarkNode* folder) const { |
916 // The managed bookmarks folder is not shown if there are no bookmarks | 916 // The managed bookmarks folder is not shown if there are no bookmarks |
917 // configured via policy. | 917 // configured via policy. |
918 if (folder == managed_bookmark_service_->managed_node() && folder->empty()) | 918 if (folder == managed_bookmark_service_->managed_node() && folder->empty()) |
919 return false; | 919 return false; |
920 // Similarly, the supervised bookmarks folder is not shown if there are no | 920 // Similarly, the supervised bookmarks folder is not shown if there are no |
921 // bookmarks configured by the custodian. | 921 // bookmarks configured by the custodian. |
922 if (folder == managed_bookmark_service_->supervised_node() && folder->empty()) | 922 if (folder == managed_bookmark_service_->supervised_node() && folder->empty()) |
923 return false; | 923 return false; |
924 | 924 |
925 SigninManager* signin = SigninManagerFactory::GetForProfile( | 925 SigninManager* signin = SigninManagerFactory::GetForProfile( |
926 profile_->GetOriginalProfile()); | 926 profile_->GetOriginalProfile()); |
927 return (folder->type() != BookmarkNode::BOOKMARK_BAR && | 927 return (folder->type() != BookmarkNode::BOOKMARK_BAR && |
928 folder->type() != BookmarkNode::OTHER_NODE) || | 928 folder->type() != BookmarkNode::OTHER_NODE) || |
929 (signin && signin->IsAuthenticated()); | 929 (signin && signin->IsAuthenticated()); |
930 } | 930 } |
931 | 931 |
932 void BookmarksBridge::NotifyIfDoneLoading() { | 932 void BookmarkBridge::NotifyIfDoneLoading() { |
933 if (!IsLoaded()) | 933 if (!IsLoaded()) |
934 return; | 934 return; |
935 JNIEnv* env = AttachCurrentThread(); | 935 JNIEnv* env = AttachCurrentThread(); |
936 ScopedJavaLocalRef<jobject> obj = weak_java_ref_.get(env); | 936 ScopedJavaLocalRef<jobject> obj = weak_java_ref_.get(env); |
937 if (obj.is_null()) | 937 if (obj.is_null()) |
938 return; | 938 return; |
939 Java_BookmarksBridge_bookmarkModelLoaded(env, obj.obj()); | 939 Java_BookmarkBridge_bookmarkModelLoaded(env, obj.obj()); |
940 } | 940 } |
941 | 941 |
942 // ------------- Observer-related methods ------------- // | 942 // ------------- Observer-related methods ------------- // |
943 | 943 |
944 void BookmarksBridge::BookmarkModelChanged() { | 944 void BookmarkBridge::BookmarkModelChanged() { |
945 if (!IsLoaded()) | 945 if (!IsLoaded()) |
946 return; | 946 return; |
947 | 947 |
948 // Called when there are changes to the bookmark model. It is most | 948 // Called when there are changes to the bookmark model. It is most |
949 // likely changes to the partner bookmarks. | 949 // likely changes to the partner bookmarks. |
950 JNIEnv* env = AttachCurrentThread(); | 950 JNIEnv* env = AttachCurrentThread(); |
951 ScopedJavaLocalRef<jobject> obj = weak_java_ref_.get(env); | 951 ScopedJavaLocalRef<jobject> obj = weak_java_ref_.get(env); |
952 if (obj.is_null()) | 952 if (obj.is_null()) |
953 return; | 953 return; |
954 Java_BookmarksBridge_bookmarkModelChanged(env, obj.obj()); | 954 Java_BookmarkBridge_bookmarkModelChanged(env, obj.obj()); |
955 } | 955 } |
956 | 956 |
957 void BookmarksBridge::BookmarkModelLoaded(BookmarkModel* model, | 957 void BookmarkBridge::BookmarkModelLoaded(BookmarkModel* model, |
958 bool ids_reassigned) { | 958 bool ids_reassigned) { |
959 NotifyIfDoneLoading(); | 959 NotifyIfDoneLoading(); |
960 } | 960 } |
961 | 961 |
962 void BookmarksBridge::BookmarkModelBeingDeleted(BookmarkModel* model) { | 962 void BookmarkBridge::BookmarkModelBeingDeleted(BookmarkModel* model) { |
963 if (!IsLoaded()) | 963 if (!IsLoaded()) |
964 return; | 964 return; |
965 | 965 |
966 JNIEnv* env = AttachCurrentThread(); | 966 JNIEnv* env = AttachCurrentThread(); |
967 ScopedJavaLocalRef<jobject> obj = weak_java_ref_.get(env); | 967 ScopedJavaLocalRef<jobject> obj = weak_java_ref_.get(env); |
968 if (obj.is_null()) | 968 if (obj.is_null()) |
969 return; | 969 return; |
970 Java_BookmarksBridge_bookmarkModelDeleted(env, obj.obj()); | 970 Java_BookmarkBridge_bookmarkModelDeleted(env, obj.obj()); |
971 } | 971 } |
972 | 972 |
973 void BookmarksBridge::BookmarkNodeMoved(BookmarkModel* model, | 973 void BookmarkBridge::BookmarkNodeMoved(BookmarkModel* model, |
974 const BookmarkNode* old_parent, | 974 const BookmarkNode* old_parent, |
975 int old_index, | 975 int old_index, |
976 const BookmarkNode* new_parent, | 976 const BookmarkNode* new_parent, |
977 int new_index) { | 977 int new_index) { |
978 if (!IsLoaded()) | 978 if (!IsLoaded()) |
979 return; | 979 return; |
980 | 980 |
981 JNIEnv* env = AttachCurrentThread(); | 981 JNIEnv* env = AttachCurrentThread(); |
982 ScopedJavaLocalRef<jobject> obj = weak_java_ref_.get(env); | 982 ScopedJavaLocalRef<jobject> obj = weak_java_ref_.get(env); |
983 if (obj.is_null()) | 983 if (obj.is_null()) |
984 return; | 984 return; |
985 Java_BookmarksBridge_bookmarkNodeMoved( | 985 Java_BookmarkBridge_bookmarkNodeMoved( |
986 env, | 986 env, |
987 obj.obj(), | 987 obj.obj(), |
988 CreateJavaBookmark(old_parent).obj(), | 988 CreateJavaBookmark(old_parent).obj(), |
989 old_index, | 989 old_index, |
990 CreateJavaBookmark(new_parent).obj(), | 990 CreateJavaBookmark(new_parent).obj(), |
991 new_index); | 991 new_index); |
992 } | 992 } |
993 | 993 |
994 void BookmarksBridge::BookmarkNodeAdded(BookmarkModel* model, | 994 void BookmarkBridge::BookmarkNodeAdded(BookmarkModel* model, |
995 const BookmarkNode* parent, | 995 const BookmarkNode* parent, |
996 int index) { | 996 int index) { |
997 if (!IsLoaded()) | 997 if (!IsLoaded()) |
998 return; | 998 return; |
999 | 999 |
1000 JNIEnv* env = AttachCurrentThread(); | 1000 JNIEnv* env = AttachCurrentThread(); |
1001 ScopedJavaLocalRef<jobject> obj = weak_java_ref_.get(env); | 1001 ScopedJavaLocalRef<jobject> obj = weak_java_ref_.get(env); |
1002 if (obj.is_null()) | 1002 if (obj.is_null()) |
1003 return; | 1003 return; |
1004 Java_BookmarksBridge_bookmarkNodeAdded( | 1004 Java_BookmarkBridge_bookmarkNodeAdded( |
1005 env, | 1005 env, |
1006 obj.obj(), | 1006 obj.obj(), |
1007 CreateJavaBookmark(parent).obj(), | 1007 CreateJavaBookmark(parent).obj(), |
1008 index); | 1008 index); |
1009 } | 1009 } |
1010 | 1010 |
1011 void BookmarksBridge::BookmarkNodeRemoved(BookmarkModel* model, | 1011 void BookmarkBridge::BookmarkNodeRemoved(BookmarkModel* model, |
1012 const BookmarkNode* parent, | 1012 const BookmarkNode* parent, |
1013 int old_index, | 1013 int old_index, |
1014 const BookmarkNode* node, | 1014 const BookmarkNode* node, |
1015 const std::set<GURL>& removed_urls) { | 1015 const std::set<GURL>& removed_urls) { |
1016 if (!IsLoaded()) | 1016 if (!IsLoaded()) |
1017 return; | 1017 return; |
1018 | 1018 |
1019 JNIEnv* env = AttachCurrentThread(); | 1019 JNIEnv* env = AttachCurrentThread(); |
1020 ScopedJavaLocalRef<jobject> obj = weak_java_ref_.get(env); | 1020 ScopedJavaLocalRef<jobject> obj = weak_java_ref_.get(env); |
1021 if (obj.is_null()) | 1021 if (obj.is_null()) |
1022 return; | 1022 return; |
1023 Java_BookmarksBridge_bookmarkNodeRemoved( | 1023 Java_BookmarkBridge_bookmarkNodeRemoved( |
1024 env, | 1024 env, |
1025 obj.obj(), | 1025 obj.obj(), |
1026 CreateJavaBookmark(parent).obj(), | 1026 CreateJavaBookmark(parent).obj(), |
1027 old_index, | 1027 old_index, |
1028 CreateJavaBookmark(node).obj()); | 1028 CreateJavaBookmark(node).obj()); |
1029 } | 1029 } |
1030 | 1030 |
1031 void BookmarksBridge::BookmarkAllUserNodesRemoved( | 1031 void BookmarkBridge::BookmarkAllUserNodesRemoved( |
1032 BookmarkModel* model, | 1032 BookmarkModel* model, |
1033 const std::set<GURL>& removed_urls) { | 1033 const std::set<GURL>& removed_urls) { |
1034 if (!IsLoaded()) | 1034 if (!IsLoaded()) |
1035 return; | 1035 return; |
1036 | 1036 |
1037 JNIEnv* env = AttachCurrentThread(); | 1037 JNIEnv* env = AttachCurrentThread(); |
1038 ScopedJavaLocalRef<jobject> obj = weak_java_ref_.get(env); | 1038 ScopedJavaLocalRef<jobject> obj = weak_java_ref_.get(env); |
1039 if (obj.is_null()) | 1039 if (obj.is_null()) |
1040 return; | 1040 return; |
1041 Java_BookmarksBridge_bookmarkAllUserNodesRemoved(env, obj.obj()); | 1041 Java_BookmarkBridge_bookmarkAllUserNodesRemoved(env, obj.obj()); |
1042 } | 1042 } |
1043 | 1043 |
1044 void BookmarksBridge::BookmarkNodeChanged(BookmarkModel* model, | 1044 void BookmarkBridge::BookmarkNodeChanged(BookmarkModel* model, |
1045 const BookmarkNode* node) { | 1045 const BookmarkNode* node) { |
1046 if (!IsLoaded()) | 1046 if (!IsLoaded()) |
1047 return; | 1047 return; |
1048 | 1048 |
1049 JNIEnv* env = AttachCurrentThread(); | 1049 JNIEnv* env = AttachCurrentThread(); |
1050 ScopedJavaLocalRef<jobject> obj = weak_java_ref_.get(env); | 1050 ScopedJavaLocalRef<jobject> obj = weak_java_ref_.get(env); |
1051 if (obj.is_null()) | 1051 if (obj.is_null()) |
1052 return; | 1052 return; |
1053 Java_BookmarksBridge_bookmarkNodeChanged( | 1053 Java_BookmarkBridge_bookmarkNodeChanged( |
1054 env, | 1054 env, |
1055 obj.obj(), | 1055 obj.obj(), |
1056 CreateJavaBookmark(node).obj()); | 1056 CreateJavaBookmark(node).obj()); |
1057 } | 1057 } |
1058 | 1058 |
1059 void BookmarksBridge::BookmarkNodeChildrenReordered(BookmarkModel* model, | 1059 void BookmarkBridge::BookmarkNodeChildrenReordered(BookmarkModel* model, |
1060 const BookmarkNode* node) { | 1060 const BookmarkNode* node) { |
1061 if (!IsLoaded()) | 1061 if (!IsLoaded()) |
1062 return; | 1062 return; |
1063 | 1063 |
1064 JNIEnv* env = AttachCurrentThread(); | 1064 JNIEnv* env = AttachCurrentThread(); |
1065 ScopedJavaLocalRef<jobject> obj = weak_java_ref_.get(env); | 1065 ScopedJavaLocalRef<jobject> obj = weak_java_ref_.get(env); |
1066 if (obj.is_null()) | 1066 if (obj.is_null()) |
1067 return; | 1067 return; |
1068 Java_BookmarksBridge_bookmarkNodeChildrenReordered( | 1068 Java_BookmarkBridge_bookmarkNodeChildrenReordered( |
1069 env, | 1069 env, |
1070 obj.obj(), | 1070 obj.obj(), |
1071 CreateJavaBookmark(node).obj()); | 1071 CreateJavaBookmark(node).obj()); |
1072 } | 1072 } |
1073 | 1073 |
1074 void BookmarksBridge::ExtensiveBookmarkChangesBeginning(BookmarkModel* model) { | 1074 void BookmarkBridge::ExtensiveBookmarkChangesBeginning(BookmarkModel* model) { |
1075 if (!IsLoaded()) | 1075 if (!IsLoaded()) |
1076 return; | 1076 return; |
1077 | 1077 |
1078 JNIEnv* env = AttachCurrentThread(); | 1078 JNIEnv* env = AttachCurrentThread(); |
1079 ScopedJavaLocalRef<jobject> obj = weak_java_ref_.get(env); | 1079 ScopedJavaLocalRef<jobject> obj = weak_java_ref_.get(env); |
1080 if (obj.is_null()) | 1080 if (obj.is_null()) |
1081 return; | 1081 return; |
1082 Java_BookmarksBridge_extensiveBookmarkChangesBeginning(env, obj.obj()); | 1082 Java_BookmarkBridge_extensiveBookmarkChangesBeginning(env, obj.obj()); |
1083 } | 1083 } |
1084 | 1084 |
1085 void BookmarksBridge::ExtensiveBookmarkChangesEnded(BookmarkModel* model) { | 1085 void BookmarkBridge::ExtensiveBookmarkChangesEnded(BookmarkModel* model) { |
1086 if (!IsLoaded()) | 1086 if (!IsLoaded()) |
1087 return; | 1087 return; |
1088 | 1088 |
1089 JNIEnv* env = AttachCurrentThread(); | 1089 JNIEnv* env = AttachCurrentThread(); |
1090 ScopedJavaLocalRef<jobject> obj = weak_java_ref_.get(env); | 1090 ScopedJavaLocalRef<jobject> obj = weak_java_ref_.get(env); |
1091 if (obj.is_null()) | 1091 if (obj.is_null()) |
1092 return; | 1092 return; |
1093 Java_BookmarksBridge_extensiveBookmarkChangesEnded(env, obj.obj()); | 1093 Java_BookmarkBridge_extensiveBookmarkChangesEnded(env, obj.obj()); |
1094 } | 1094 } |
1095 | 1095 |
1096 void BookmarksBridge::PartnerShimChanged(PartnerBookmarksShim* shim) { | 1096 void BookmarkBridge::PartnerShimChanged(PartnerBookmarksShim* shim) { |
1097 if (!IsLoaded()) | 1097 if (!IsLoaded()) |
1098 return; | 1098 return; |
1099 | 1099 |
1100 BookmarkModelChanged(); | 1100 BookmarkModelChanged(); |
1101 } | 1101 } |
1102 | 1102 |
1103 void BookmarksBridge::PartnerShimLoaded(PartnerBookmarksShim* shim) { | 1103 void BookmarkBridge::PartnerShimLoaded(PartnerBookmarksShim* shim) { |
1104 NotifyIfDoneLoading(); | 1104 NotifyIfDoneLoading(); |
1105 } | 1105 } |
1106 | 1106 |
1107 void BookmarksBridge::ShimBeingDeleted(PartnerBookmarksShim* shim) { | 1107 void BookmarkBridge::ShimBeingDeleted(PartnerBookmarksShim* shim) { |
1108 partner_bookmarks_shim_ = NULL; | 1108 partner_bookmarks_shim_ = NULL; |
1109 } | 1109 } |
OLD | NEW |