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..bc7e611779a74a19884fde69e1d41fcf2f162b68 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; |
+ 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,29 @@ 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<int64> bookmark_ids; |
+ base::android::JavaLongArrayToInt64Vector(env, bookmark_ids_array, |
+ &bookmark_ids); |
+ |
+ offline_page_model_->DeletePagesByBookmarkId( |
+ bookmark_ids, |
+ base::Bind(&DeletePageCallback, j_callback_ref)); |
} |
void OfflinePageBridge::NotifyIfDoneLoading() const { |