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 { |