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

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

Powered by Google App Engine
This is Rietveld 408576698