OLD | NEW |
---|---|
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/enhanced_bookmarks/enhanced_bookmarks_bridge.h" | 5 #include "chrome/browser/android/enhanced_bookmarks/enhanced_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/prefs/pref_service.h" | |
9 #include "chrome/browser/bookmarks/bookmark_model_factory.h" | 10 #include "chrome/browser/bookmarks/bookmark_model_factory.h" |
10 #include "chrome/browser/enhanced_bookmarks/chrome_bookmark_server_cluster_servi ce.h" | 11 #include "chrome/browser/enhanced_bookmarks/chrome_bookmark_server_cluster_servi ce.h" |
11 #include "chrome/browser/enhanced_bookmarks/chrome_bookmark_server_cluster_servi ce_factory.h" | 12 #include "chrome/browser/enhanced_bookmarks/chrome_bookmark_server_cluster_servi ce_factory.h" |
12 #include "chrome/browser/enhanced_bookmarks/enhanced_bookmark_model_factory.h" | 13 #include "chrome/browser/enhanced_bookmarks/enhanced_bookmark_model_factory.h" |
13 #include "chrome/browser/profiles/profile_android.h" | 14 #include "chrome/browser/profiles/profile_android.h" |
14 #include "chrome/common/chrome_version_info.h" | 15 #include "chrome/common/chrome_version_info.h" |
16 #include "chrome/common/pref_names.h" | |
15 #include "components/bookmarks/browser/bookmark_model.h" | 17 #include "components/bookmarks/browser/bookmark_model.h" |
16 #include "components/bookmarks/browser/bookmark_utils.h" | 18 #include "components/bookmarks/browser/bookmark_utils.h" |
19 #include "components/bookmarks/common/android/bookmark_id.h" | |
17 #include "components/bookmarks/common/android/bookmark_type.h" | 20 #include "components/bookmarks/common/android/bookmark_type.h" |
18 #include "components/enhanced_bookmarks/enhanced_bookmark_model.h" | 21 #include "components/enhanced_bookmarks/enhanced_bookmark_model.h" |
22 #include "content/public/browser/browser_thread.h" | |
19 #include "jni/EnhancedBookmarksBridge_jni.h" | 23 #include "jni/EnhancedBookmarksBridge_jni.h" |
20 | 24 |
21 using base::android::AttachCurrentThread; | 25 using base::android::AttachCurrentThread; |
26 using bookmarks::android::JavaBookmarkIdCreateBookmarkId; | |
27 using bookmarks::android::JavaBookmarkIdGetId; | |
28 using bookmarks::android::JavaBookmarkIdGetType; | |
22 using bookmarks::BookmarkType; | 29 using bookmarks::BookmarkType; |
30 using content::BrowserThread; | |
23 | 31 |
24 namespace enhanced_bookmarks { | 32 namespace enhanced_bookmarks { |
25 namespace android { | 33 namespace android { |
26 | 34 |
27 EnhancedBookmarksBridge::EnhancedBookmarksBridge(JNIEnv* env, | 35 EnhancedBookmarksBridge::EnhancedBookmarksBridge(JNIEnv* env, |
28 jobject obj, | 36 jobject obj, |
29 Profile* profile) : weak_java_ref_(env, obj) { | 37 Profile* profile) : weak_java_ref_(env, obj) { |
30 profile_ = profile; | 38 profile_ = profile; |
31 enhanced_bookmark_model_ = | 39 enhanced_bookmark_model_ = |
32 EnhancedBookmarkModelFactory::GetForBrowserContext(profile_); | 40 EnhancedBookmarkModelFactory::GetForBrowserContext(profile_); |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
89 | 97 |
90 ScopedJavaLocalRef<jobjectArray> EnhancedBookmarksBridge::GetFilters( | 98 ScopedJavaLocalRef<jobjectArray> EnhancedBookmarksBridge::GetFilters( |
91 JNIEnv* env, | 99 JNIEnv* env, |
92 jobject obj) { | 100 jobject obj) { |
93 DCHECK(enhanced_bookmark_model_->loaded()); | 101 DCHECK(enhanced_bookmark_model_->loaded()); |
94 const std::vector<std::string> filters = | 102 const std::vector<std::string> filters = |
95 cluster_service_->GetClusters(); | 103 cluster_service_->GetClusters(); |
96 return base::android::ToJavaArrayOfStrings(env, filters); | 104 return base::android::ToJavaArrayOfStrings(env, filters); |
97 } | 105 } |
98 | 106 |
107 ScopedJavaLocalRef<jobject> EnhancedBookmarksBridge::AddFolder(JNIEnv* env, | |
108 jobject obj, | |
109 jobject j_parent_id_obj, | |
110 jint index, | |
111 jstring j_title) { | |
112 DCHECK(enhanced_bookmark_model_->loaded()); | |
113 long bookmark_id = JavaBookmarkIdGetId(env, j_parent_id_obj); | |
114 const BookmarkNode* parent = bookmarks::GetBookmarkNodeByID( | |
115 enhanced_bookmark_model_->bookmark_model(), | |
116 static_cast<int64>(bookmark_id)); | |
117 const BookmarkNode* new_node = enhanced_bookmark_model_->AddFolder( | |
118 parent, index, base::android::ConvertJavaStringToUTF16(env, j_title)); | |
119 if (!new_node) { | |
120 NOTREACHED(); | |
121 return ScopedJavaLocalRef<jobject>(); | |
122 } | |
123 ScopedJavaLocalRef<jobject> new_java_obj = | |
124 JavaBookmarkIdCreateBookmarkId(env, new_node->id(), new_node->type()); | |
125 return new_java_obj; | |
126 } | |
127 | |
128 void EnhancedBookmarksBridge::MoveBookmark(JNIEnv* env, | |
129 jobject obj, | |
130 jobject j_bookmark_id_obj, | |
131 jobject j_parent_id_obj, | |
132 jint index) { | |
133 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | |
134 DCHECK(enhanced_bookmark_model_->loaded()); | |
135 | |
136 long bookmark_id = JavaBookmarkIdGetId(env, j_bookmark_id_obj); | |
137 const BookmarkNode* node = bookmarks::GetBookmarkNodeByID( | |
138 enhanced_bookmark_model_->bookmark_model(), | |
139 static_cast<int64>(bookmark_id)); | |
140 if (!IsEditable(node)) { | |
141 NOTREACHED(); | |
142 return; | |
143 } | |
144 bookmark_id = JavaBookmarkIdGetId(env, j_parent_id_obj); | |
145 const BookmarkNode* new_parent_node = bookmarks::GetBookmarkNodeByID( | |
146 enhanced_bookmark_model_->bookmark_model(), | |
147 static_cast<int64>(bookmark_id)); | |
148 enhanced_bookmark_model_->Move(node, new_parent_node, index); | |
149 } | |
150 | |
151 ScopedJavaLocalRef<jobject> EnhancedBookmarksBridge::AddBookmark( | |
152 JNIEnv* env, | |
153 jobject obj, | |
154 jobject j_parent_id_obj, | |
155 jint index, | |
156 jstring j_title, | |
157 jstring j_url) { | |
158 DCHECK(enhanced_bookmark_model_->loaded()); | |
159 long bookmark_id = JavaBookmarkIdGetId(env, j_parent_id_obj); | |
160 const BookmarkNode* parent = bookmarks::GetBookmarkNodeByID( | |
161 enhanced_bookmark_model_->bookmark_model(), | |
162 static_cast<int64>(bookmark_id)); | |
163 | |
164 const BookmarkNode* new_node = enhanced_bookmark_model_->AddURL( | |
165 parent, | |
166 index, | |
167 base::android::ConvertJavaStringToUTF16(env, j_title), | |
168 GURL(base::android::ConvertJavaStringToUTF16(env, j_url)), | |
169 base::Time::Now()); | |
170 if (!new_node) { | |
171 NOTREACHED(); | |
172 return ScopedJavaLocalRef<jobject>(); | |
173 } | |
174 ScopedJavaLocalRef<jobject> new_java_obj = | |
175 JavaBookmarkIdCreateBookmarkId(env, new_node->id(), new_node->type()); | |
176 return new_java_obj; | |
177 } | |
178 | |
99 void EnhancedBookmarksBridge::OnChange(BookmarkServerService* service) { | 179 void EnhancedBookmarksBridge::OnChange(BookmarkServerService* service) { |
100 DCHECK(enhanced_bookmark_model_->loaded()); | 180 DCHECK(enhanced_bookmark_model_->loaded()); |
101 JNIEnv* env = AttachCurrentThread(); | 181 JNIEnv* env = AttachCurrentThread(); |
102 | 182 |
103 ScopedJavaLocalRef<jobject> obj = weak_java_ref_.get(env); | 183 ScopedJavaLocalRef<jobject> obj = weak_java_ref_.get(env); |
104 if (obj.is_null()) | 184 if (obj.is_null()) |
105 return; | 185 return; |
106 | 186 |
107 Java_EnhancedBookmarksBridge_onFiltersChanged(env, obj.obj()); | 187 Java_EnhancedBookmarksBridge_onFiltersChanged(env, obj.obj()); |
108 } | 188 } |
109 | 189 |
190 bool EnhancedBookmarksBridge::IsEditable(const BookmarkNode* node) const { | |
Yaron
2014/10/29 21:50:43
BookmarksBridge::IsEditable has additional safety
danduong
2014/10/29 22:13:40
That's still the right layer. We haven't added any
danduong
2014/10/29 23:54:26
This layer.
| |
191 if (!node || (node->type() != BookmarkNode::FOLDER && | |
192 node->type() != BookmarkNode::URL)) { | |
193 return false; | |
194 } | |
195 return profile_->GetPrefs()->GetBoolean( | |
196 bookmarks::prefs::kEditBookmarksEnabled); | |
197 } | |
198 | |
110 static jlong Init(JNIEnv* env, jobject obj, jobject j_profile) { | 199 static jlong Init(JNIEnv* env, jobject obj, jobject j_profile) { |
111 return reinterpret_cast<jlong>(new EnhancedBookmarksBridge( | 200 return reinterpret_cast<jlong>(new EnhancedBookmarksBridge( |
112 env, obj, ProfileAndroid::FromProfileAndroid(j_profile))); | 201 env, obj, ProfileAndroid::FromProfileAndroid(j_profile))); |
113 } | 202 } |
114 | 203 |
115 bool RegisterEnhancedBookmarksBridge(JNIEnv* env) { | 204 bool RegisterEnhancedBookmarksBridge(JNIEnv* env) { |
116 return RegisterNativesImpl(env); | 205 return RegisterNativesImpl(env); |
117 } | 206 } |
118 | 207 |
119 } // namespace android | 208 } // namespace android |
120 } // namespace enhanced_bookmarks | 209 } // namespace enhanced_bookmarks |
OLD | NEW |