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

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: 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"
fgorski 2016/02/12 21:43:40 per discussion, perhaps we should limit protobuf c
bburns 2016/02/20 01:14:17 Done.
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<jobject> OfflinePageBridge::GetPageByOfflineId(
141 JNIEnv* env, 142 JNIEnv* env,
142 const JavaParamRef<jobject>& obj, 143 const JavaParamRef<jobject>& obj,
143 jlong bookmark_id) { 144 jlong offline_id) {
144 const OfflinePageItem* offline_page = 145 const OfflinePageItem* offline_page =
145 offline_page_model_->GetPageByBookmarkId(bookmark_id); 146 offline_page_model_->GetPageByOfflineId(offline_id);
146 if (!offline_page) 147 if (!offline_page)
147 return ScopedJavaLocalRef<jobject>(); 148 return ScopedJavaLocalRef<jobject>();
148 return CreateOfflinePageItem(env, *offline_page); 149 return CreateOfflinePageItem(env, *offline_page);
149 } 150 }
150 151
151 ScopedJavaLocalRef<jobject> OfflinePageBridge::GetPageByOnlineURL( 152 ScopedJavaLocalRef<jobject> OfflinePageBridge::GetPageByOnlineURL(
152 JNIEnv* env, 153 JNIEnv* env,
153 const JavaParamRef<jobject>& obj, 154 const JavaParamRef<jobject>& obj,
154 const JavaParamRef<jstring>& online_url) { 155 const JavaParamRef<jstring>& online_url) {
155 const OfflinePageItem* offline_page = offline_page_model_->GetPageByOnlineURL( 156 const OfflinePageItem* offline_page = offline_page_model_->GetPageByOnlineURL(
156 GURL(ConvertJavaStringToUTF8(env, online_url))); 157 GURL(ConvertJavaStringToUTF8(env, online_url)));
157 if (!offline_page) 158 if (!offline_page)
158 return ScopedJavaLocalRef<jobject>(); 159 return ScopedJavaLocalRef<jobject>();
159 return CreateOfflinePageItem(env, *offline_page); 160 return CreateOfflinePageItem(env, *offline_page);
160 } 161 }
161 162
162 void OfflinePageBridge::SavePage(JNIEnv* env, 163 void OfflinePageBridge::SavePage(JNIEnv* env,
163 const JavaParamRef<jobject>& obj, 164 const JavaParamRef<jobject>& obj,
164 const JavaParamRef<jobject>& j_callback_obj, 165 const JavaParamRef<jobject>& j_callback_obj,
165 const JavaParamRef<jobject>& j_web_contents, 166 const JavaParamRef<jobject>& j_web_contents,
166 jlong bookmark_id) { 167 jlong offline_id,
168 jstring client_id_namespace,
169 jstring client_id) {
167 DCHECK(j_callback_obj); 170 DCHECK(j_callback_obj);
168 DCHECK(j_web_contents); 171 DCHECK(j_web_contents);
169 172
170 ScopedJavaGlobalRef<jobject> j_callback_ref; 173 ScopedJavaGlobalRef<jobject> j_callback_ref;
171 j_callback_ref.Reset(env, j_callback_obj); 174 j_callback_ref.Reset(env, j_callback_obj);
172 175
173 content::WebContents* web_contents = 176 content::WebContents* web_contents =
174 content::WebContents::FromJavaWebContents(j_web_contents); 177 content::WebContents::FromJavaWebContents(j_web_contents);
175 GURL url(web_contents->GetLastCommittedURL()); 178 GURL url(web_contents->GetLastCommittedURL());
176 179
177 scoped_ptr<OfflinePageArchiver> archiver( 180 scoped_ptr<OfflinePageArchiver> archiver(
178 new OfflinePageMHTMLArchiver(web_contents)); 181 new OfflinePageMHTMLArchiver(web_contents));
179 182
183 offline_pages::ClientId cid;
184 const char *s = env->GetStringUTFChars(client_id_namespace, NULL);
fgorski 2016/02/12 21:43:40 ConvertUTF8ToJavaString is what we use typically,
bburns 2016/02/20 01:14:17 Done.
185 cid.set_space(s);
186 env->ReleaseStringUTFChars(client_id_namespace, s);
187
188 s = env->GetStringUTFChars(client_id, NULL);
189 cid.set_id(s);
190 env->ReleaseStringUTFChars(client_id, s);
191
180 offline_page_model_->SavePage( 192 offline_page_model_->SavePage(
181 url, bookmark_id, std::move(archiver), 193 url, offline_id, cid, std::move(archiver),
182 base::Bind(&SavePageCallback, j_callback_ref, url)); 194 base::Bind(&SavePageCallback, j_callback_ref, url));
183 } 195 }
184 196
185 void OfflinePageBridge::MarkPageAccessed(JNIEnv* env, 197 void OfflinePageBridge::MarkPageAccessed(JNIEnv* env,
186 const JavaParamRef<jobject>& obj, 198 const JavaParamRef<jobject>& obj,
187 jlong bookmark_id) { 199 jlong offline_id) {
188 offline_page_model_->MarkPageAccessed(bookmark_id); 200 offline_page_model_->MarkPageAccessed(offline_id);
189 } 201 }
190 202
191 void OfflinePageBridge::DeletePage(JNIEnv* env, 203 void OfflinePageBridge::DeletePage(JNIEnv* env,
192 const JavaParamRef<jobject>& obj, 204 const JavaParamRef<jobject>& obj,
193 const JavaParamRef<jobject>& j_callback_obj, 205 const JavaParamRef<jobject>& j_callback_obj,
194 jlong bookmark_id) { 206 jlong offline_id) {
195 DCHECK(j_callback_obj); 207 DCHECK(j_callback_obj);
196 208
197 ScopedJavaGlobalRef<jobject> j_callback_ref; 209 ScopedJavaGlobalRef<jobject> j_callback_ref;
198 j_callback_ref.Reset(env, j_callback_obj); 210 j_callback_ref.Reset(env, j_callback_obj);
199 211
200 offline_page_model_->DeletePageByBookmarkId(bookmark_id, base::Bind( 212 offline_page_model_->DeletePageByOfflineId(offline_id, base::Bind(
201 &DeletePageCallback, j_callback_ref)); 213 &DeletePageCallback, j_callback_ref));
202 } 214 }
203 215
204 void OfflinePageBridge::DeletePages( 216 void OfflinePageBridge::DeletePages(
205 JNIEnv* env, 217 JNIEnv* env,
206 const JavaParamRef<jobject>& obj, 218 const JavaParamRef<jobject>& obj,
207 const JavaParamRef<jobject>& j_callback_obj, 219 const JavaParamRef<jobject>& j_callback_obj,
208 const JavaParamRef<jlongArray>& bookmark_ids_array) { 220 const JavaParamRef<jlongArray>& offline_ids_array) {
209 DCHECK(j_callback_obj); 221 DCHECK(j_callback_obj);
210 222
211 ScopedJavaGlobalRef<jobject> j_callback_ref; 223 ScopedJavaGlobalRef<jobject> j_callback_ref;
212 j_callback_ref.Reset(env, j_callback_obj); 224 j_callback_ref.Reset(env, j_callback_obj);
213 225
214 std::vector<int64_t> bookmark_ids; 226 std::vector<int64_t> offline_ids;
215 base::android::JavaLongArrayToInt64Vector(env, bookmark_ids_array, 227 base::android::JavaLongArrayToInt64Vector(env, offline_ids_array,
216 &bookmark_ids); 228 &offline_ids);
217 229
218 offline_page_model_->DeletePagesByBookmarkId( 230 offline_page_model_->DeletePagesByOfflineId(
219 bookmark_ids, 231 offline_ids,
220 base::Bind(&DeletePageCallback, j_callback_ref)); 232 base::Bind(&DeletePageCallback, j_callback_ref));
221 } 233 }
222 234
223 void OfflinePageBridge::CheckMetadataConsistency( 235 void OfflinePageBridge::CheckMetadataConsistency(
224 JNIEnv* env, 236 JNIEnv* env,
225 const JavaParamRef<jobject>& obj) { 237 const JavaParamRef<jobject>& obj) {
226 offline_page_model_->CheckForExternalFileDeletion(); 238 offline_page_model_->CheckForExternalFileDeletion();
227 } 239 }
228 240
229 ScopedJavaLocalRef<jstring> OfflinePageBridge::GetOfflineUrlForOnlineUrl( 241 ScopedJavaLocalRef<jstring> OfflinePageBridge::GetOfflineUrlForOnlineUrl(
(...skipping 24 matching lines...) Expand all
254 if (obj.is_null()) 266 if (obj.is_null())
255 return; 267 return;
256 Java_OfflinePageBridge_offlinePageModelLoaded(env, obj.obj()); 268 Java_OfflinePageBridge_offlinePageModelLoaded(env, obj.obj());
257 } 269 }
258 270
259 ScopedJavaLocalRef<jobject> OfflinePageBridge::CreateOfflinePageItem( 271 ScopedJavaLocalRef<jobject> OfflinePageBridge::CreateOfflinePageItem(
260 JNIEnv* env, 272 JNIEnv* env,
261 const OfflinePageItem& offline_page) const { 273 const OfflinePageItem& offline_page) const {
262 return Java_OfflinePageBridge_createOfflinePageItem( 274 return Java_OfflinePageBridge_createOfflinePageItem(
263 env, ConvertUTF8ToJavaString(env, offline_page.url.spec()).obj(), 275 env, ConvertUTF8ToJavaString(env, offline_page.url.spec()).obj(),
264 offline_page.bookmark_id, 276 offline_page.offline_id,
265 ConvertUTF8ToJavaString(env, offline_page.GetOfflineURL().spec()).obj(), 277 ConvertUTF8ToJavaString(env, offline_page.GetOfflineURL().spec()).obj(),
266 offline_page.file_size, 278 offline_page.file_size,
267 offline_page.creation_time.ToJavaTime(), 279 offline_page.creation_time.ToJavaTime(),
268 offline_page.access_count, 280 offline_page.access_count,
269 offline_page.last_access_time.ToJavaTime()); 281 offline_page.last_access_time.ToJavaTime());
270 } 282 }
271 283
272 static jlong Init(JNIEnv* env, 284 static jlong Init(JNIEnv* env,
273 const JavaParamRef<jobject>& obj, 285 const JavaParamRef<jobject>& obj,
274 const JavaParamRef<jobject>& j_profile) { 286 const JavaParamRef<jobject>& j_profile) {
275 return reinterpret_cast<jlong>(new OfflinePageBridge( 287 return reinterpret_cast<jlong>(new OfflinePageBridge(
276 env, obj, ProfileAndroid::FromProfileAndroid(j_profile))); 288 env, obj, ProfileAndroid::FromProfileAndroid(j_profile)));
277 } 289 }
278 290
279 bool RegisterOfflinePageBridge(JNIEnv* env) { 291 bool RegisterOfflinePageBridge(JNIEnv* env) {
280 return RegisterNativesImpl(env); 292 return RegisterNativesImpl(env);
281 } 293 }
282 294
283 } // namespace android 295 } // namespace android
284 } // namespace offline_pages 296 } // namespace offline_pages
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698