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

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 changes Created 4 years, 9 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
29 namespace offline_pages { 30 namespace offline_pages {
30 namespace android { 31 namespace android {
31 32
32 namespace { 33 namespace {
33 34
34 void SavePageCallback(const ScopedJavaGlobalRef<jobject>& j_callback_obj, 35 void SavePageCallback(const ScopedJavaGlobalRef<jobject>& j_callback_obj,
35 const GURL& url, 36 const GURL& url,
36 OfflinePageModel::SavePageResult result) { 37 OfflinePageModel::SavePageResult result,
38 int64_t offline_id) {
37 JNIEnv* env = base::android::AttachCurrentThread(); 39 JNIEnv* env = base::android::AttachCurrentThread();
38 40
39 Java_SavePageCallback_onSavePageDone( 41 Java_SavePageCallback_onSavePageDone(
40 env, j_callback_obj.obj(), static_cast<int>(result), 42 env, j_callback_obj.obj(), static_cast<int>(result),
41 ConvertUTF8ToJavaString(env, url.spec()).obj()); 43 ConvertUTF8ToJavaString(env, url.spec()).obj(), offline_id);
42 } 44 }
43 45
44 void DeletePageCallback(const ScopedJavaGlobalRef<jobject>& j_callback_obj, 46 void DeletePageCallback(const ScopedJavaGlobalRef<jobject>& j_callback_obj,
45 OfflinePageModel::DeletePageResult result) { 47 OfflinePageModel::DeletePageResult result) {
46 JNIEnv* env = base::android::AttachCurrentThread(); 48 JNIEnv* env = base::android::AttachCurrentThread();
47 49
48 Java_DeletePageCallback_onDeletePageDone( 50 Java_DeletePageCallback_onDeletePageDone(
49 env, j_callback_obj.obj(), static_cast<int>(result)); 51 env, j_callback_obj.obj(), static_cast<int>(result));
50 } 52 }
51 53
52 void ToJavaOfflinePageList(JNIEnv* env, 54 void ToJavaOfflinePageList(JNIEnv* env,
53 jobject j_result_obj, 55 jobject j_result_obj,
54 const std::vector<OfflinePageItem>& offline_pages) { 56 const std::vector<OfflinePageItem>& offline_pages) {
55 for (const OfflinePageItem& offline_page : offline_pages) { 57 for (const OfflinePageItem& offline_page : offline_pages) {
56 Java_OfflinePageBridge_createOfflinePageAndAddToList( 58 Java_OfflinePageBridge_createOfflinePageAndAddToList(
57 env, j_result_obj, 59 env, j_result_obj,
58 ConvertUTF8ToJavaString(env, offline_page.url.spec()).obj(), 60 ConvertUTF8ToJavaString(env, offline_page.url.spec()).obj(),
59 offline_page.bookmark_id, 61 offline_page.offline_id,
60 ConvertUTF8ToJavaString(env, offline_page.GetOfflineURL().spec()).obj(), 62 ConvertUTF8ToJavaString(env, offline_page.GetOfflineURL().spec()).obj(),
61 offline_page.file_size, 63 offline_page.file_size, offline_page.creation_time.ToJavaTime(),
62 offline_page.creation_time.ToJavaTime(), 64 offline_page.access_count, offline_page.last_access_time.ToJavaTime());
63 offline_page.access_count,
64 offline_page.last_access_time.ToJavaTime());
65 } 65 }
66 } 66 }
67 67
68 } // namespace 68 } // namespace
69 69
70 static jint GetFeatureMode(JNIEnv* env, const JavaParamRef<jclass>& clazz) { 70 static jint GetFeatureMode(JNIEnv* env, const JavaParamRef<jclass>& clazz) {
71 return static_cast<jint>(offline_pages::GetOfflinePageFeatureMode()); 71 return static_cast<jint>(offline_pages::GetOfflinePageFeatureMode());
72 } 72 }
73 73
74 static jboolean CanSavePage(JNIEnv* env, 74 static jboolean CanSavePage(JNIEnv* env,
(...skipping 26 matching lines...) Expand all
101 101
102 void OfflinePageBridge::OfflinePageModelChanged(OfflinePageModel* model) { 102 void OfflinePageBridge::OfflinePageModelChanged(OfflinePageModel* model) {
103 DCHECK_EQ(offline_page_model_, model); 103 DCHECK_EQ(offline_page_model_, model);
104 JNIEnv* env = base::android::AttachCurrentThread(); 104 JNIEnv* env = base::android::AttachCurrentThread();
105 ScopedJavaLocalRef<jobject> obj = weak_java_ref_.get(env); 105 ScopedJavaLocalRef<jobject> obj = weak_java_ref_.get(env);
106 if (obj.is_null()) 106 if (obj.is_null())
107 return; 107 return;
108 Java_OfflinePageBridge_offlinePageModelChanged(env, obj.obj()); 108 Java_OfflinePageBridge_offlinePageModelChanged(env, obj.obj());
109 } 109 }
110 110
111 void OfflinePageBridge::OfflinePageDeleted(int64_t bookmark_id) { 111 void OfflinePageBridge::OfflinePageDeleted(int64_t offline_id) {
112 JNIEnv* env = base::android::AttachCurrentThread(); 112 JNIEnv* env = base::android::AttachCurrentThread();
113 ScopedJavaLocalRef<jobject> obj = weak_java_ref_.get(env); 113 ScopedJavaLocalRef<jobject> obj = weak_java_ref_.get(env);
114 if (obj.is_null()) 114 if (obj.is_null())
115 return; 115 return;
116 Java_OfflinePageBridge_offlinePageDeleted(env, obj.obj(), bookmark_id); 116 Java_OfflinePageBridge_offlinePageDeleted(env, obj.obj(), offline_id);
117 } 117 }
118 118
119 void OfflinePageBridge::GetAllPages(JNIEnv* env, 119 void OfflinePageBridge::GetAllPages(JNIEnv* env,
120 const JavaParamRef<jobject>& obj, 120 const JavaParamRef<jobject>& obj,
121 const JavaParamRef<jobject>& j_result_obj) { 121 const JavaParamRef<jobject>& j_result_obj) {
122 DCHECK(offline_page_model_->is_loaded()); 122 DCHECK(offline_page_model_->is_loaded());
123 DCHECK(j_result_obj); 123 DCHECK(j_result_obj);
124 const std::vector<OfflinePageItem> offline_pages = 124 const std::vector<OfflinePageItem> offline_pages =
125 offline_page_model_->GetAllPages(); 125 offline_page_model_->GetAllPages();
126 ToJavaOfflinePageList(env, j_result_obj, offline_pages); 126 ToJavaOfflinePageList(env, j_result_obj, offline_pages);
127 } 127 }
128 128
129 void OfflinePageBridge::GetPagesToCleanUp( 129 void OfflinePageBridge::GetPagesToCleanUp(
130 JNIEnv* env, 130 JNIEnv* env,
131 const JavaParamRef<jobject>& obj, 131 const JavaParamRef<jobject>& obj,
132 const JavaParamRef<jobject>& j_result_obj) { 132 const JavaParamRef<jobject>& j_result_obj) {
133 DCHECK(offline_page_model_->is_loaded()); 133 DCHECK(offline_page_model_->is_loaded());
134 DCHECK(j_result_obj); 134 DCHECK(j_result_obj);
135 const std::vector<OfflinePageItem> offline_pages = 135 const std::vector<OfflinePageItem> offline_pages =
136 offline_page_model_->GetPagesToCleanUp(); 136 offline_page_model_->GetPagesToCleanUp();
137 ToJavaOfflinePageList(env, j_result_obj, offline_pages); 137 ToJavaOfflinePageList(env, j_result_obj, offline_pages);
138 } 138 }
139 139
140 ScopedJavaLocalRef<jobject> OfflinePageBridge::GetPageByBookmarkId( 140 ScopedJavaLocalRef<jlongArray> OfflinePageBridge::GetOfflineIdsForClientId(
141 JNIEnv* env, 141 JNIEnv* env,
142 const JavaParamRef<jobject>& obj, 142 const JavaParamRef<jobject>& obj,
143 jlong bookmark_id) { 143 const JavaParamRef<jstring>& j_client_id_namespace,
144 const JavaParamRef<jstring>& j_client_id) {
145 DCHECK(offline_page_model_->is_loaded());
146 offline_pages::ClientId client_id;
147 client_id.name_space = ConvertJavaStringToUTF8(env, j_client_id_namespace);
148 client_id.id = ConvertJavaStringToUTF8(env, j_client_id);
149
150 std::vector<int64_t> results =
151 offline_page_model_->GetOfflineIdsForClientId(client_id);
152
153 return base::android::ToJavaLongArray(env, results);
154 }
155
156 ScopedJavaLocalRef<jobject> OfflinePageBridge::GetPageByOfflineId(
157 JNIEnv* env,
158 const JavaParamRef<jobject>& obj,
159 jlong offline_id) {
144 const OfflinePageItem* offline_page = 160 const OfflinePageItem* offline_page =
145 offline_page_model_->GetPageByBookmarkId(bookmark_id); 161 offline_page_model_->GetPageByOfflineId(offline_id);
146 if (!offline_page) 162 if (!offline_page)
147 return ScopedJavaLocalRef<jobject>(); 163 return ScopedJavaLocalRef<jobject>();
148 return CreateOfflinePageItem(env, *offline_page); 164 return CreateOfflinePageItem(env, *offline_page);
149 } 165 }
150 166
151 ScopedJavaLocalRef<jobject> OfflinePageBridge::GetPageByOnlineURL( 167 ScopedJavaLocalRef<jobject> OfflinePageBridge::GetPageByOnlineURL(
152 JNIEnv* env, 168 JNIEnv* env,
153 const JavaParamRef<jobject>& obj, 169 const JavaParamRef<jobject>& obj,
154 const JavaParamRef<jstring>& online_url) { 170 const JavaParamRef<jstring>& online_url) {
155 const OfflinePageItem* offline_page = offline_page_model_->GetPageByOnlineURL( 171 const OfflinePageItem* offline_page = offline_page_model_->GetPageByOnlineURL(
156 GURL(ConvertJavaStringToUTF8(env, online_url))); 172 GURL(ConvertJavaStringToUTF8(env, online_url)));
157 if (!offline_page) 173 if (!offline_page)
158 return ScopedJavaLocalRef<jobject>(); 174 return ScopedJavaLocalRef<jobject>();
159 return CreateOfflinePageItem(env, *offline_page); 175 return CreateOfflinePageItem(env, *offline_page);
160 } 176 }
161 177
162 ScopedJavaLocalRef<jobject> OfflinePageBridge::GetPageByOfflineUrl( 178 ScopedJavaLocalRef<jobject> OfflinePageBridge::GetPageByOfflineUrl(
163 JNIEnv* env, 179 JNIEnv* env,
164 const JavaParamRef<jobject>& obj, 180 const JavaParamRef<jobject>& obj,
165 const JavaParamRef<jstring>& j_offline_url) { 181 const JavaParamRef<jstring>& j_offline_url) {
166 const OfflinePageItem* offline_page = 182 const OfflinePageItem* offline_page =
167 offline_page_model_->GetPageByOfflineURL( 183 offline_page_model_->GetPageByOfflineURL(
168 GURL(ConvertJavaStringToUTF8(env, j_offline_url))); 184 GURL(ConvertJavaStringToUTF8(env, j_offline_url)));
169 if (!offline_page) 185 if (!offline_page)
170 return ScopedJavaLocalRef<jobject>(); 186 return ScopedJavaLocalRef<jobject>();
171 return CreateOfflinePageItem(env, *offline_page); 187 return CreateOfflinePageItem(env, *offline_page);
172 } 188 }
173 189
174 void OfflinePageBridge::SavePage(JNIEnv* env, 190 void OfflinePageBridge::SavePage(
175 const JavaParamRef<jobject>& obj, 191 JNIEnv* env,
176 const JavaParamRef<jobject>& j_callback_obj, 192 const JavaParamRef<jobject>& obj,
177 const JavaParamRef<jobject>& j_web_contents, 193 const JavaParamRef<jobject>& j_callback_obj,
178 jlong bookmark_id) { 194 const JavaParamRef<jobject>& j_web_contents,
195 const JavaParamRef<jstring>& j_client_id_namespace,
196 const JavaParamRef<jstring>& j_client_id) {
179 DCHECK(j_callback_obj); 197 DCHECK(j_callback_obj);
180 DCHECK(j_web_contents); 198 DCHECK(j_web_contents);
181 199
182 ScopedJavaGlobalRef<jobject> j_callback_ref; 200 ScopedJavaGlobalRef<jobject> j_callback_ref;
183 j_callback_ref.Reset(env, j_callback_obj); 201 j_callback_ref.Reset(env, j_callback_obj);
184 202
185 content::WebContents* web_contents = 203 content::WebContents* web_contents =
186 content::WebContents::FromJavaWebContents(j_web_contents); 204 content::WebContents::FromJavaWebContents(j_web_contents);
187 GURL url(web_contents->GetLastCommittedURL()); 205 GURL url(web_contents->GetLastCommittedURL());
188 206
189 scoped_ptr<OfflinePageArchiver> archiver( 207 scoped_ptr<OfflinePageArchiver> archiver(
190 new OfflinePageMHTMLArchiver(web_contents)); 208 new OfflinePageMHTMLArchiver(web_contents));
191 209
210 offline_pages::ClientId client_id;
211 client_id.name_space = ConvertJavaStringToUTF8(env, j_client_id_namespace);
212 client_id.id = ConvertJavaStringToUTF8(env, j_client_id);
213
192 offline_page_model_->SavePage( 214 offline_page_model_->SavePage(
193 url, bookmark_id, std::move(archiver), 215 url, client_id, std::move(archiver),
194 base::Bind(&SavePageCallback, j_callback_ref, url)); 216 base::Bind(&SavePageCallback, j_callback_ref, url));
195 } 217 }
196 218
197 void OfflinePageBridge::MarkPageAccessed(JNIEnv* env, 219 void OfflinePageBridge::MarkPageAccessed(JNIEnv* env,
198 const JavaParamRef<jobject>& obj, 220 const JavaParamRef<jobject>& obj,
199 jlong bookmark_id) { 221 jlong offline_id) {
200 offline_page_model_->MarkPageAccessed(bookmark_id); 222 offline_page_model_->MarkPageAccessed(offline_id);
201 } 223 }
202 224
203 void OfflinePageBridge::DeletePage(JNIEnv* env, 225 void OfflinePageBridge::DeletePage(JNIEnv* env,
204 const JavaParamRef<jobject>& obj, 226 const JavaParamRef<jobject>& obj,
205 const JavaParamRef<jobject>& j_callback_obj, 227 const JavaParamRef<jobject>& j_callback_obj,
206 jlong bookmark_id) { 228 jlong offline_id) {
207 DCHECK(j_callback_obj); 229 DCHECK(j_callback_obj);
208 230
209 ScopedJavaGlobalRef<jobject> j_callback_ref; 231 ScopedJavaGlobalRef<jobject> j_callback_ref;
210 j_callback_ref.Reset(env, j_callback_obj); 232 j_callback_ref.Reset(env, j_callback_obj);
211 233
212 offline_page_model_->DeletePageByBookmarkId(bookmark_id, base::Bind( 234 offline_page_model_->DeletePageByOfflineId(
213 &DeletePageCallback, j_callback_ref)); 235 offline_id, base::Bind(&DeletePageCallback, j_callback_ref));
214 } 236 }
215 237
216 void OfflinePageBridge::DeletePages( 238 void OfflinePageBridge::DeletePages(
217 JNIEnv* env, 239 JNIEnv* env,
218 const JavaParamRef<jobject>& obj, 240 const JavaParamRef<jobject>& obj,
219 const JavaParamRef<jobject>& j_callback_obj, 241 const JavaParamRef<jobject>& j_callback_obj,
220 const JavaParamRef<jlongArray>& bookmark_ids_array) { 242 const JavaParamRef<jlongArray>& offline_ids_array) {
221 DCHECK(j_callback_obj); 243 DCHECK(j_callback_obj);
222 244
223 ScopedJavaGlobalRef<jobject> j_callback_ref; 245 ScopedJavaGlobalRef<jobject> j_callback_ref;
224 j_callback_ref.Reset(env, j_callback_obj); 246 j_callback_ref.Reset(env, j_callback_obj);
225 247
226 std::vector<int64_t> bookmark_ids; 248 std::vector<int64_t> offline_ids;
227 base::android::JavaLongArrayToInt64Vector(env, bookmark_ids_array, 249 base::android::JavaLongArrayToInt64Vector(env, offline_ids_array,
228 &bookmark_ids); 250 &offline_ids);
229 251
230 offline_page_model_->DeletePagesByBookmarkId( 252 offline_page_model_->DeletePagesByOfflineId(
231 bookmark_ids, 253 offline_ids, base::Bind(&DeletePageCallback, j_callback_ref));
232 base::Bind(&DeletePageCallback, j_callback_ref));
233 } 254 }
234 255
235 void OfflinePageBridge::CheckMetadataConsistency( 256 void OfflinePageBridge::CheckMetadataConsistency(
236 JNIEnv* env, 257 JNIEnv* env,
237 const JavaParamRef<jobject>& obj) { 258 const JavaParamRef<jobject>& obj) {
238 offline_page_model_->CheckForExternalFileDeletion(); 259 offline_page_model_->CheckForExternalFileDeletion();
239 } 260 }
240 261
241 ScopedJavaLocalRef<jstring> OfflinePageBridge::GetOfflineUrlForOnlineUrl( 262 ScopedJavaLocalRef<jstring> OfflinePageBridge::GetOfflineUrlForOnlineUrl(
242 JNIEnv* env, 263 JNIEnv* env,
(...skipping 15 matching lines...) Expand all
258 if (obj.is_null()) 279 if (obj.is_null())
259 return; 280 return;
260 Java_OfflinePageBridge_offlinePageModelLoaded(env, obj.obj()); 281 Java_OfflinePageBridge_offlinePageModelLoaded(env, obj.obj());
261 } 282 }
262 283
263 ScopedJavaLocalRef<jobject> OfflinePageBridge::CreateOfflinePageItem( 284 ScopedJavaLocalRef<jobject> OfflinePageBridge::CreateOfflinePageItem(
264 JNIEnv* env, 285 JNIEnv* env,
265 const OfflinePageItem& offline_page) const { 286 const OfflinePageItem& offline_page) const {
266 return Java_OfflinePageBridge_createOfflinePageItem( 287 return Java_OfflinePageBridge_createOfflinePageItem(
267 env, ConvertUTF8ToJavaString(env, offline_page.url.spec()).obj(), 288 env, ConvertUTF8ToJavaString(env, offline_page.url.spec()).obj(),
268 offline_page.bookmark_id, 289 offline_page.offline_id,
269 ConvertUTF8ToJavaString(env, offline_page.GetOfflineURL().spec()).obj(), 290 ConvertUTF8ToJavaString(env, offline_page.GetOfflineURL().spec()).obj(),
270 offline_page.file_size, 291 offline_page.file_size, offline_page.creation_time.ToJavaTime(),
271 offline_page.creation_time.ToJavaTime(), 292 offline_page.access_count, offline_page.last_access_time.ToJavaTime());
272 offline_page.access_count,
273 offline_page.last_access_time.ToJavaTime());
274 } 293 }
275 294
276 static jlong Init(JNIEnv* env, 295 static jlong Init(JNIEnv* env,
277 const JavaParamRef<jobject>& obj, 296 const JavaParamRef<jobject>& obj,
278 const JavaParamRef<jobject>& j_profile) { 297 const JavaParamRef<jobject>& j_profile) {
279 return reinterpret_cast<jlong>(new OfflinePageBridge( 298 return reinterpret_cast<jlong>(new OfflinePageBridge(
280 env, obj, ProfileAndroid::FromProfileAndroid(j_profile))); 299 env, obj, ProfileAndroid::FromProfileAndroid(j_profile)));
281 } 300 }
282 301
283 bool RegisterOfflinePageBridge(JNIEnv* env) { 302 bool RegisterOfflinePageBridge(JNIEnv* env) {
284 return RegisterNativesImpl(env); 303 return RegisterNativesImpl(env);
285 } 304 }
286 305
287 } // namespace android 306 } // namespace android
288 } // namespace offline_pages 307 } // namespace offline_pages
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698