Chromium Code Reviews| Index: chrome/browser/android/offline_pages/offline_page_bridge.cc |
| diff --git a/chrome/browser/android/offline_pages/offline_page_bridge.cc b/chrome/browser/android/offline_pages/offline_page_bridge.cc |
| index 27c315f7fc6789bc6f56f77b086a77f8017fec12..d38870dc501ae1098eb9d2bf13635e07ba08a72c 100644 |
| --- a/chrome/browser/android/offline_pages/offline_page_bridge.cc |
| +++ b/chrome/browser/android/offline_pages/offline_page_bridge.cc |
| @@ -4,7 +4,9 @@ |
| #include "chrome/browser/android/offline_pages/offline_page_bridge.h" |
| +#include "base/android/jni_array.h" |
| #include "base/android/jni_string.h" |
| +#include "base/basictypes.h" |
| #include "base/files/file_path.h" |
| #include "base/strings/string_util.h" |
| #include "chrome/browser/android/offline_pages/offline_page_mhtml_archiver.h" |
| @@ -32,26 +34,35 @@ namespace android { |
| namespace { |
| -void SavePageCallback(ScopedJavaGlobalRef<jobject>* j_callback_obj, |
| +void SavePageCallback(const ScopedJavaGlobalRef<jobject>& j_callback_obj, |
| const GURL& url, |
| OfflinePageModel::SavePageResult result) { |
| JNIEnv* env = base::android::AttachCurrentThread(); |
| - scoped_ptr<ScopedJavaGlobalRef<jobject>> j_callback_ptr(j_callback_obj); |
| - |
| Java_SavePageCallback_onSavePageDone( |
| - env, j_callback_ptr->obj(), static_cast<int>(result), |
| + env, j_callback_obj.obj(), static_cast<int>(result), |
| ConvertUTF8ToJavaString(env, url.spec()).obj()); |
| } |
| -void DeletePageCallback(ScopedJavaGlobalRef<jobject>* j_callback_obj, |
| +void DeletePageCallback(const ScopedJavaGlobalRef<jobject>& j_callback_obj, |
| OfflinePageModel::DeletePageResult result) { |
| JNIEnv* env = base::android::AttachCurrentThread(); |
| - scoped_ptr<ScopedJavaGlobalRef<jobject>> j_callback_ptr(j_callback_obj); |
| - |
| Java_DeletePageCallback_onDeletePageDone( |
| - env, j_callback_ptr->obj(), static_cast<int>(result)); |
| + env, j_callback_obj.obj(), static_cast<int>(result)); |
| +} |
| + |
| +void ToJavaOfflinePageList(JNIEnv* env, |
| + jobject j_result_obj, |
| + const std::vector<OfflinePageItem>& offline_pages) { |
| + for (const OfflinePageItem& offline_page : offline_pages) { |
| + Java_OfflinePageBridge_createOfflinePageAndAddToList( |
| + env, j_result_obj, |
| + ConvertUTF8ToJavaString(env, offline_page.url.spec()).obj(), |
| + offline_page.bookmark_id, |
| + ConvertUTF8ToJavaString(env, offline_page.GetOfflineURL().spec()).obj(), |
| + offline_page.file_size); |
| + } |
| } |
| } // namespace |
| @@ -88,15 +99,17 @@ void OfflinePageBridge::GetAllPages(JNIEnv* env, |
| DCHECK(j_result_obj); |
| const std::vector<OfflinePageItem>& offline_pages = |
| offline_page_model_->GetAllPages(); |
| + ToJavaOfflinePageList(env, j_result_obj, offline_pages); |
| +} |
| - for (const OfflinePageItem& offline_page : offline_pages) { |
| - Java_OfflinePageBridge_createOfflinePageAndAddToList( |
| - env, j_result_obj, |
| - ConvertUTF8ToJavaString(env, offline_page.url.spec()).obj(), |
| - offline_page.bookmark_id, |
| - ConvertUTF8ToJavaString(env, offline_page.GetOfflineURL().spec()).obj(), |
| - offline_page.file_size); |
| - } |
| +void OfflinePageBridge::GetPagesToCleanUp(JNIEnv* env, |
| + jobject obj, |
| + jobject j_result_obj) { |
| + DCHECK(offline_page_model_->is_loaded()); |
| + DCHECK(j_result_obj); |
| + const std::vector<OfflinePageItem>& offline_pages = |
| + offline_page_model_->GetPagesToCleanUp(); |
| + ToJavaOfflinePageList(env, j_result_obj, offline_pages); |
| } |
| ScopedJavaLocalRef<jobject> OfflinePageBridge::GetPageByBookmarkId( |
| @@ -122,9 +135,8 @@ void OfflinePageBridge::SavePage(JNIEnv* env, |
| DCHECK(j_callback_obj); |
| DCHECK(j_web_contents); |
| - scoped_ptr<ScopedJavaGlobalRef<jobject>> j_callback_obj_ptr( |
| - new ScopedJavaGlobalRef<jobject>()); |
| - j_callback_obj_ptr->Reset(env, j_callback_obj); |
| + ScopedJavaGlobalRef<jobject> j_callback_ref; |
|
newt (away)
2015/08/27 03:13:27
You could just use the two-arg constructor, instea
|
| + j_callback_ref.Reset(env, j_callback_obj); |
| content::WebContents* web_contents = |
| content::WebContents::FromJavaWebContents(j_web_contents); |
| @@ -136,7 +148,7 @@ void OfflinePageBridge::SavePage(JNIEnv* env, |
| offline_page_model_->SavePage( |
| url, bookmark_id, archiver.Pass(), |
| - base::Bind(&SavePageCallback, j_callback_obj_ptr.release(), url)); |
| + base::Bind(&SavePageCallback, j_callback_ref, url)); |
| } |
| void OfflinePageBridge::DeletePage(JNIEnv* env, |
| @@ -145,12 +157,35 @@ void OfflinePageBridge::DeletePage(JNIEnv* env, |
| jlong bookmark_id) { |
| DCHECK(j_callback_obj); |
| - scoped_ptr<ScopedJavaGlobalRef<jobject>> j_callback_obj_ptr( |
| - new ScopedJavaGlobalRef<jobject>()); |
| - j_callback_obj_ptr->Reset(env, j_callback_obj); |
| + ScopedJavaGlobalRef<jobject> j_callback_ref; |
| + j_callback_ref.Reset(env, j_callback_obj); |
| offline_page_model_->DeletePageByBookmarkId(bookmark_id, base::Bind( |
| - &DeletePageCallback, j_callback_obj_ptr.release())); |
| + &DeletePageCallback, j_callback_ref)); |
| +} |
| + |
| +void OfflinePageBridge::DeletePages(JNIEnv* env, |
| + jobject obj, |
| + jobject j_callback_obj, |
| + jlongArray bookmark_ids_array) { |
| + DCHECK(j_callback_obj); |
| + |
| + ScopedJavaGlobalRef<jobject> j_callback_ref; |
| + j_callback_ref.Reset(env, j_callback_obj); |
| + |
| + std::vector<jlong> java_bookmark_ids; |
| + base::android::JavaLongArrayToLongVector(env, bookmark_ids_array, |
| + &java_bookmark_ids); |
| + |
| + // Making sure arm64 compilation works. Arm64's int64 == long int and jlong is |
| + // long long int, which are both 64-bit but incompatible with each other |
| + // causing a compilation error. |
| + std::vector<int64> bookmark_ids(java_bookmark_ids.begin(), |
| + java_bookmark_ids.end()); |
| + |
| + offline_page_model_->DeletePagesByBookmarkId( |
| + bookmark_ids, |
| + base::Bind(&DeletePageCallback, j_callback_ref)); |
| } |
| void OfflinePageBridge::NotifyIfDoneLoading() const { |