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

Side by Side Diff: chrome/browser/android/offline_pages/offline_page_bridge.cc

Issue 1694863003: Refactor the offline page storage to include client namespace and id. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: address comments. Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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/offline_pages/offline_page_bridge.h" 5 #include "chrome/browser/android/offline_pages/offline_page_bridge.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/android/jni_array.h" 9 #include "base/android/jni_array.h"
10 #include "base/android/jni_string.h" 10 #include "base/android/jni_string.h"
11 #include "chrome/browser/android/offline_pages/offline_page_mhtml_archiver.h" 11 #include "chrome/browser/android/offline_pages/offline_page_mhtml_archiver.h"
12 #include "chrome/browser/android/offline_pages/offline_page_model_factory.h" 12 #include "chrome/browser/android/offline_pages/offline_page_model_factory.h"
13 #include "chrome/browser/android/offline_pages/offline_page_utils.h" 13 #include "chrome/browser/android/offline_pages/offline_page_utils.h"
14 #include "chrome/browser/profiles/profile.h" 14 #include "chrome/browser/profiles/profile.h"
15 #include "chrome/browser/profiles/profile_android.h" 15 #include "chrome/browser/profiles/profile_android.h"
16 #include "components/offline_pages/offline_page_feature.h" 16 #include "components/offline_pages/offline_page_feature.h"
17 #include "components/offline_pages/offline_page_item.h" 17 #include "components/offline_pages/offline_page_item.h"
18 #include "components/offline_pages/offline_page_model.h" 18 #include "components/offline_pages/offline_page_model.h"
19 #include "components/offline_pages/proto/offline_pages.pb.h"
19 #include "content/public/browser/browser_context.h" 20 #include "content/public/browser/browser_context.h"
20 #include "content/public/browser/web_contents.h" 21 #include "content/public/browser/web_contents.h"
21 #include "jni/OfflinePageBridge_jni.h" 22 #include "jni/OfflinePageBridge_jni.h"
22 #include "net/base/filename_util.h" 23 #include "net/base/filename_util.h"
23 24
24 using base::android::ConvertJavaStringToUTF8; 25 using base::android::ConvertJavaStringToUTF8;
25 using base::android::ConvertUTF8ToJavaString; 26 using base::android::ConvertUTF8ToJavaString;
26 using base::android::ScopedJavaGlobalRef; 27 using base::android::ScopedJavaGlobalRef;
27 using base::android::ScopedJavaLocalRef; 28 using base::android::ScopedJavaLocalRef;
28 29
(...skipping 20 matching lines...) Expand all
49 env, j_callback_obj.obj(), static_cast<int>(result)); 50 env, j_callback_obj.obj(), static_cast<int>(result));
50 } 51 }
51 52
52 void ToJavaOfflinePageList(JNIEnv* env, 53 void ToJavaOfflinePageList(JNIEnv* env,
53 jobject j_result_obj, 54 jobject j_result_obj,
54 const std::vector<OfflinePageItem>& offline_pages) { 55 const std::vector<OfflinePageItem>& offline_pages) {
55 for (const OfflinePageItem& offline_page : offline_pages) { 56 for (const OfflinePageItem& offline_page : offline_pages) {
56 Java_OfflinePageBridge_createOfflinePageAndAddToList( 57 Java_OfflinePageBridge_createOfflinePageAndAddToList(
57 env, j_result_obj, 58 env, j_result_obj,
58 ConvertUTF8ToJavaString(env, offline_page.url.spec()).obj(), 59 ConvertUTF8ToJavaString(env, offline_page.url.spec()).obj(),
59 offline_page.bookmark_id, 60 offline_page.offline_id,
60 ConvertUTF8ToJavaString(env, offline_page.GetOfflineURL().spec()).obj(), 61 ConvertUTF8ToJavaString(env, offline_page.GetOfflineURL().spec()).obj(),
61 offline_page.file_size, 62 offline_page.file_size,
62 offline_page.creation_time.ToJavaTime(), 63 offline_page.creation_time.ToJavaTime(),
63 offline_page.access_count, 64 offline_page.access_count,
64 offline_page.last_access_time.ToJavaTime()); 65 offline_page.last_access_time.ToJavaTime());
65 } 66 }
66 } 67 }
67 68
68 } // namespace 69 } // namespace
69 70
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
101 102
102 void OfflinePageBridge::OfflinePageModelChanged(OfflinePageModel* model) { 103 void OfflinePageBridge::OfflinePageModelChanged(OfflinePageModel* model) {
103 DCHECK_EQ(offline_page_model_, model); 104 DCHECK_EQ(offline_page_model_, model);
104 JNIEnv* env = base::android::AttachCurrentThread(); 105 JNIEnv* env = base::android::AttachCurrentThread();
105 ScopedJavaLocalRef<jobject> obj = weak_java_ref_.get(env); 106 ScopedJavaLocalRef<jobject> obj = weak_java_ref_.get(env);
106 if (obj.is_null()) 107 if (obj.is_null())
107 return; 108 return;
108 Java_OfflinePageBridge_offlinePageModelChanged(env, obj.obj()); 109 Java_OfflinePageBridge_offlinePageModelChanged(env, obj.obj());
109 } 110 }
110 111
111 void OfflinePageBridge::OfflinePageDeleted(int64_t bookmark_id) { 112 void OfflinePageBridge::OfflinePageDeleted(int64_t offline_id) {
112 JNIEnv* env = base::android::AttachCurrentThread(); 113 JNIEnv* env = base::android::AttachCurrentThread();
113 ScopedJavaLocalRef<jobject> obj = weak_java_ref_.get(env); 114 ScopedJavaLocalRef<jobject> obj = weak_java_ref_.get(env);
114 if (obj.is_null()) 115 if (obj.is_null())
115 return; 116 return;
116 Java_OfflinePageBridge_offlinePageDeleted(env, obj.obj(), bookmark_id); 117 Java_OfflinePageBridge_offlinePageDeleted(env, obj.obj(), offline_id);
117 } 118 }
118 119
119 void OfflinePageBridge::GetAllPages(JNIEnv* env, 120 void OfflinePageBridge::GetAllPages(JNIEnv* env,
120 const JavaParamRef<jobject>& obj, 121 const JavaParamRef<jobject>& obj,
121 const JavaParamRef<jobject>& j_result_obj) { 122 const JavaParamRef<jobject>& j_result_obj) {
122 DCHECK(offline_page_model_->is_loaded()); 123 DCHECK(offline_page_model_->is_loaded());
123 DCHECK(j_result_obj); 124 DCHECK(j_result_obj);
124 const std::vector<OfflinePageItem> offline_pages = 125 const std::vector<OfflinePageItem> offline_pages =
125 offline_page_model_->GetAllPages(); 126 offline_page_model_->GetAllPages();
126 ToJavaOfflinePageList(env, j_result_obj, offline_pages); 127 ToJavaOfflinePageList(env, j_result_obj, offline_pages);
127 } 128 }
128 129
129 void OfflinePageBridge::GetPagesToCleanUp( 130 void OfflinePageBridge::GetPagesToCleanUp(
130 JNIEnv* env, 131 JNIEnv* env,
131 const JavaParamRef<jobject>& obj, 132 const JavaParamRef<jobject>& obj,
132 const JavaParamRef<jobject>& j_result_obj) { 133 const JavaParamRef<jobject>& j_result_obj) {
133 DCHECK(offline_page_model_->is_loaded()); 134 DCHECK(offline_page_model_->is_loaded());
134 DCHECK(j_result_obj); 135 DCHECK(j_result_obj);
135 const std::vector<OfflinePageItem> offline_pages = 136 const std::vector<OfflinePageItem> offline_pages =
136 offline_page_model_->GetPagesToCleanUp(); 137 offline_page_model_->GetPagesToCleanUp();
137 ToJavaOfflinePageList(env, j_result_obj, offline_pages); 138 ToJavaOfflinePageList(env, j_result_obj, offline_pages);
138 } 139 }
139 140
140 ScopedJavaLocalRef<jobject> OfflinePageBridge::GetPageByBookmarkId( 141 ScopedJavaLocalRef<jlongArray> OfflinePageBridge::GetOfflineIdsForClientId(
141 JNIEnv* env, 142 JNIEnv* env,
142 const JavaParamRef<jobject>& obj, 143 const JavaParamRef<jobject>& obj,
143 jlong bookmark_id) { 144 const JavaParamRef<jstring>& client_id_namespace,
145 const JavaParamRef<jstring>& client_id) {
146 DCHECK(offline_page_model_->is_loaded());
147 offline_pages::ClientId cid;
148 cid.name_space = ConvertJavaStringToUTF8(env, client_id_namespace);
149 cid.id = ConvertJavaStringToUTF8(env, client_id);
150
151 std::vector<int64_t> results = offline_page_model_->GetOfflineIdsForClientId(
152 cid);
153
154 return base::android::ToJavaLongArray(env, results);
155 }
156
157 ScopedJavaLocalRef<jobject> OfflinePageBridge::GetPageByOfflineId(
158 JNIEnv* env,
159 const JavaParamRef<jobject>& obj,
160 jlong offline_id) {
144 const OfflinePageItem* offline_page = 161 const OfflinePageItem* offline_page =
145 offline_page_model_->GetPageByBookmarkId(bookmark_id); 162 offline_page_model_->GetPageByOfflineId(offline_id);
146 if (!offline_page) 163 if (!offline_page)
147 return ScopedJavaLocalRef<jobject>(); 164 return ScopedJavaLocalRef<jobject>();
148 return CreateOfflinePageItem(env, *offline_page); 165 return CreateOfflinePageItem(env, *offline_page);
149 } 166 }
150 167
151 ScopedJavaLocalRef<jobject> OfflinePageBridge::GetPageByOnlineURL( 168 ScopedJavaLocalRef<jobject> OfflinePageBridge::GetPageByOnlineURL(
152 JNIEnv* env, 169 JNIEnv* env,
153 const JavaParamRef<jobject>& obj, 170 const JavaParamRef<jobject>& obj,
154 const JavaParamRef<jstring>& online_url) { 171 const JavaParamRef<jstring>& online_url) {
155 const OfflinePageItem* offline_page = offline_page_model_->GetPageByOnlineURL( 172 const OfflinePageItem* offline_page = offline_page_model_->GetPageByOnlineURL(
156 GURL(ConvertJavaStringToUTF8(env, online_url))); 173 GURL(ConvertJavaStringToUTF8(env, online_url)));
157 if (!offline_page) 174 if (!offline_page)
158 return ScopedJavaLocalRef<jobject>(); 175 return ScopedJavaLocalRef<jobject>();
159 return CreateOfflinePageItem(env, *offline_page); 176 return CreateOfflinePageItem(env, *offline_page);
160 } 177 }
161 178
162 void OfflinePageBridge::SavePage(JNIEnv* env, 179 void OfflinePageBridge::SavePage(JNIEnv* env,
163 const JavaParamRef<jobject>& obj, 180 const JavaParamRef<jobject>& obj,
164 const JavaParamRef<jobject>& j_callback_obj, 181 const JavaParamRef<jobject>& j_callback_obj,
165 const JavaParamRef<jobject>& j_web_contents, 182 const JavaParamRef<jobject>& j_web_contents,
166 jlong bookmark_id) { 183 jlong offline_id,
184 const JavaParamRef<jstring>&
185 client_id_namespace,
fgorski 2016/02/23 17:15:30 did git cl format break this line like that? also
bburns 2016/02/23 19:25:38 No, its > 80 cols, so we have to line break, that'
186 const JavaParamRef<jstring>& client_id) {
fgorski 2016/02/23 17:15:30 j_client_id
bburns 2016/02/23 19:25:38 Done.
167 DCHECK(j_callback_obj); 187 DCHECK(j_callback_obj);
168 DCHECK(j_web_contents); 188 DCHECK(j_web_contents);
169 189
170 ScopedJavaGlobalRef<jobject> j_callback_ref; 190 ScopedJavaGlobalRef<jobject> j_callback_ref;
171 j_callback_ref.Reset(env, j_callback_obj); 191 j_callback_ref.Reset(env, j_callback_obj);
172 192
173 content::WebContents* web_contents = 193 content::WebContents* web_contents =
174 content::WebContents::FromJavaWebContents(j_web_contents); 194 content::WebContents::FromJavaWebContents(j_web_contents);
175 GURL url(web_contents->GetLastCommittedURL()); 195 GURL url(web_contents->GetLastCommittedURL());
176 196
177 scoped_ptr<OfflinePageArchiver> archiver( 197 scoped_ptr<OfflinePageArchiver> archiver(
178 new OfflinePageMHTMLArchiver(web_contents)); 198 new OfflinePageMHTMLArchiver(web_contents));
179 199
200 offline_pages::ClientId cid;
201 cid.name_space = ConvertJavaStringToUTF8(env, client_id_namespace);
fgorski 2016/02/23 17:15:30 seems like we need a better name than namespace he
bburns 2016/02/23 19:25:38 Namespace seems like the correct name, but I'm ok
202 cid.id = ConvertJavaStringToUTF8(env, client_id);
203
180 offline_page_model_->SavePage( 204 offline_page_model_->SavePage(
181 url, bookmark_id, std::move(archiver), 205 url, offline_id, cid, std::move(archiver),
182 base::Bind(&SavePageCallback, j_callback_ref, url)); 206 base::Bind(&SavePageCallback, j_callback_ref, url));
183 } 207 }
184 208
185 void OfflinePageBridge::MarkPageAccessed(JNIEnv* env, 209 void OfflinePageBridge::MarkPageAccessed(JNIEnv* env,
186 const JavaParamRef<jobject>& obj, 210 const JavaParamRef<jobject>& obj,
187 jlong bookmark_id) { 211 jlong offline_id) {
188 offline_page_model_->MarkPageAccessed(bookmark_id); 212 offline_page_model_->MarkPageAccessed(offline_id);
189 } 213 }
190 214
191 void OfflinePageBridge::DeletePage(JNIEnv* env, 215 void OfflinePageBridge::DeletePage(JNIEnv* env,
192 const JavaParamRef<jobject>& obj, 216 const JavaParamRef<jobject>& obj,
193 const JavaParamRef<jobject>& j_callback_obj, 217 const JavaParamRef<jobject>& j_callback_obj,
194 jlong bookmark_id) { 218 jlong offline_id) {
195 DCHECK(j_callback_obj); 219 DCHECK(j_callback_obj);
196 220
197 ScopedJavaGlobalRef<jobject> j_callback_ref; 221 ScopedJavaGlobalRef<jobject> j_callback_ref;
198 j_callback_ref.Reset(env, j_callback_obj); 222 j_callback_ref.Reset(env, j_callback_obj);
199 223
200 offline_page_model_->DeletePageByBookmarkId(bookmark_id, base::Bind( 224 offline_page_model_->DeletePageByOfflineId(offline_id, base::Bind(
201 &DeletePageCallback, j_callback_ref)); 225 &DeletePageCallback, j_callback_ref));
202 } 226 }
203 227
204 void OfflinePageBridge::DeletePages( 228 void OfflinePageBridge::DeletePages(
205 JNIEnv* env, 229 JNIEnv* env,
206 const JavaParamRef<jobject>& obj, 230 const JavaParamRef<jobject>& obj,
207 const JavaParamRef<jobject>& j_callback_obj, 231 const JavaParamRef<jobject>& j_callback_obj,
208 const JavaParamRef<jlongArray>& bookmark_ids_array) { 232 const JavaParamRef<jlongArray>& offline_ids_array) {
209 DCHECK(j_callback_obj); 233 DCHECK(j_callback_obj);
210 234
211 ScopedJavaGlobalRef<jobject> j_callback_ref; 235 ScopedJavaGlobalRef<jobject> j_callback_ref;
212 j_callback_ref.Reset(env, j_callback_obj); 236 j_callback_ref.Reset(env, j_callback_obj);
213 237
214 std::vector<int64_t> bookmark_ids; 238 std::vector<int64_t> offline_ids;
215 base::android::JavaLongArrayToInt64Vector(env, bookmark_ids_array, 239 base::android::JavaLongArrayToInt64Vector(env, offline_ids_array,
216 &bookmark_ids); 240 &offline_ids);
217 241
218 offline_page_model_->DeletePagesByBookmarkId( 242 offline_page_model_->DeletePagesByOfflineId(
219 bookmark_ids, 243 offline_ids,
220 base::Bind(&DeletePageCallback, j_callback_ref)); 244 base::Bind(&DeletePageCallback, j_callback_ref));
221 } 245 }
222 246
223 void OfflinePageBridge::CheckMetadataConsistency( 247 void OfflinePageBridge::CheckMetadataConsistency(
224 JNIEnv* env, 248 JNIEnv* env,
225 const JavaParamRef<jobject>& obj) { 249 const JavaParamRef<jobject>& obj) {
226 offline_page_model_->CheckForExternalFileDeletion(); 250 offline_page_model_->CheckForExternalFileDeletion();
227 } 251 }
228 252
229 ScopedJavaLocalRef<jstring> OfflinePageBridge::GetOfflineUrlForOnlineUrl( 253 ScopedJavaLocalRef<jstring> OfflinePageBridge::GetOfflineUrlForOnlineUrl(
(...skipping 24 matching lines...) Expand all
254 if (obj.is_null()) 278 if (obj.is_null())
255 return; 279 return;
256 Java_OfflinePageBridge_offlinePageModelLoaded(env, obj.obj()); 280 Java_OfflinePageBridge_offlinePageModelLoaded(env, obj.obj());
257 } 281 }
258 282
259 ScopedJavaLocalRef<jobject> OfflinePageBridge::CreateOfflinePageItem( 283 ScopedJavaLocalRef<jobject> OfflinePageBridge::CreateOfflinePageItem(
260 JNIEnv* env, 284 JNIEnv* env,
261 const OfflinePageItem& offline_page) const { 285 const OfflinePageItem& offline_page) const {
262 return Java_OfflinePageBridge_createOfflinePageItem( 286 return Java_OfflinePageBridge_createOfflinePageItem(
263 env, ConvertUTF8ToJavaString(env, offline_page.url.spec()).obj(), 287 env, ConvertUTF8ToJavaString(env, offline_page.url.spec()).obj(),
264 offline_page.bookmark_id, 288 offline_page.offline_id,
265 ConvertUTF8ToJavaString(env, offline_page.GetOfflineURL().spec()).obj(), 289 ConvertUTF8ToJavaString(env, offline_page.GetOfflineURL().spec()).obj(),
266 offline_page.file_size, 290 offline_page.file_size,
267 offline_page.creation_time.ToJavaTime(), 291 offline_page.creation_time.ToJavaTime(),
268 offline_page.access_count, 292 offline_page.access_count,
269 offline_page.last_access_time.ToJavaTime()); 293 offline_page.last_access_time.ToJavaTime());
270 } 294 }
271 295
272 static jlong Init(JNIEnv* env, 296 static jlong Init(JNIEnv* env,
273 const JavaParamRef<jobject>& obj, 297 const JavaParamRef<jobject>& obj,
274 const JavaParamRef<jobject>& j_profile) { 298 const JavaParamRef<jobject>& j_profile) {
275 return reinterpret_cast<jlong>(new OfflinePageBridge( 299 return reinterpret_cast<jlong>(new OfflinePageBridge(
276 env, obj, ProfileAndroid::FromProfileAndroid(j_profile))); 300 env, obj, ProfileAndroid::FromProfileAndroid(j_profile)));
277 } 301 }
278 302
279 bool RegisterOfflinePageBridge(JNIEnv* env) { 303 bool RegisterOfflinePageBridge(JNIEnv* env) {
280 return RegisterNativesImpl(env); 304 return RegisterNativesImpl(env);
281 } 305 }
282 306
283 } // namespace android 307 } // namespace android
284 } // namespace offline_pages 308 } // namespace offline_pages
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698