OLD | NEW |
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 <memory> | 7 #include <memory> |
8 #include <set> | 8 #include <set> |
9 #include <string> | 9 #include <string> |
10 #include <utility> | 10 #include <utility> |
11 #include <vector> | 11 #include <vector> |
12 | 12 |
13 #include "base/android/callback_android.h" | 13 #include "base/android/callback_android.h" |
14 #include "base/android/jni_android.h" | 14 #include "base/android/jni_android.h" |
15 #include "base/android/jni_array.h" | 15 #include "base/android/jni_array.h" |
16 #include "base/android/jni_string.h" | 16 #include "base/android/jni_string.h" |
17 #include "base/bind.h" | 17 #include "base/bind.h" |
18 #include "base/logging.h" | 18 #include "base/logging.h" |
19 #include "chrome/browser/android/offline_pages/offline_page_mhtml_archiver.h" | 19 #include "chrome/browser/android/offline_pages/offline_page_mhtml_archiver.h" |
20 #include "chrome/browser/android/offline_pages/offline_page_model_factory.h" | 20 #include "chrome/browser/android/offline_pages/offline_page_model_factory.h" |
21 #include "chrome/browser/android/offline_pages/offline_page_utils.h" | 21 #include "chrome/browser/android/offline_pages/offline_page_utils.h" |
22 #include "chrome/browser/android/offline_pages/request_coordinator_factory.h" | 22 #include "chrome/browser/android/offline_pages/request_coordinator_factory.h" |
23 #include "chrome/browser/profiles/profile.h" | 23 #include "chrome/browser/profiles/profile.h" |
24 #include "chrome/browser/profiles/profile_android.h" | 24 #include "chrome/browser/profiles/profile_android.h" |
25 #include "components/offline_pages/background/request_coordinator.h" | 25 #include "components/offline_pages/background/request_coordinator.h" |
| 26 #include "components/offline_pages/background/request_queue.h" |
26 #include "components/offline_pages/background/save_page_request.h" | 27 #include "components/offline_pages/background/save_page_request.h" |
27 #include "components/offline_pages/offline_page_feature.h" | 28 #include "components/offline_pages/offline_page_feature.h" |
28 #include "components/offline_pages/offline_page_item.h" | 29 #include "components/offline_pages/offline_page_item.h" |
29 #include "components/offline_pages/offline_page_model.h" | 30 #include "components/offline_pages/offline_page_model.h" |
30 #include "content/public/browser/browser_context.h" | 31 #include "content/public/browser/browser_context.h" |
31 #include "content/public/browser/web_contents.h" | 32 #include "content/public/browser/web_contents.h" |
32 #include "jni/OfflinePageBridge_jni.h" | 33 #include "jni/OfflinePageBridge_jni.h" |
33 #include "jni/SavePageRequest_jni.h" | 34 #include "jni/SavePageRequest_jni.h" |
34 #include "net/base/filename_util.h" | 35 #include "net/base/filename_util.h" |
35 | 36 |
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
164 | 165 |
165 void OnGetAllRequestsDone(const ScopedJavaGlobalRef<jobject>& j_callback_obj, | 166 void OnGetAllRequestsDone(const ScopedJavaGlobalRef<jobject>& j_callback_obj, |
166 const std::vector<SavePageRequest>& all_requests) { | 167 const std::vector<SavePageRequest>& all_requests) { |
167 JNIEnv* env = base::android::AttachCurrentThread(); | 168 JNIEnv* env = base::android::AttachCurrentThread(); |
168 | 169 |
169 ScopedJavaLocalRef<jobjectArray> j_result_obj = | 170 ScopedJavaLocalRef<jobjectArray> j_result_obj = |
170 CreateJavaSavePageRequests(env, all_requests); | 171 CreateJavaSavePageRequests(env, all_requests); |
171 base::android::RunCallbackAndroid(j_callback_obj, j_result_obj); | 172 base::android::RunCallbackAndroid(j_callback_obj, j_result_obj); |
172 } | 173 } |
173 | 174 |
| 175 void OnRemoveRequestsDone( |
| 176 const ScopedJavaGlobalRef<jobject>& j_callback_obj, |
| 177 const RequestQueue::UpdateMultipleRequestResults& removed_request_results) { |
| 178 JNIEnv* env = base::android::AttachCurrentThread(); |
| 179 |
| 180 std::vector<int> update_request_results; |
| 181 std::vector<int64_t> update_request_ids; |
| 182 |
| 183 for (std::pair<int64_t, RequestQueue::UpdateRequestResult> remove_result : |
| 184 removed_request_results) { |
| 185 update_request_ids.emplace_back(std::get<0>(remove_result)); |
| 186 update_request_results.emplace_back( |
| 187 static_cast<int>(std::get<1>(remove_result))); |
| 188 } |
| 189 |
| 190 ScopedJavaLocalRef<jlongArray> j_result_ids = |
| 191 base::android::ToJavaLongArray(env, update_request_ids); |
| 192 ScopedJavaLocalRef<jintArray> j_result_codes = |
| 193 base::android::ToJavaIntArray(env, update_request_results); |
| 194 |
| 195 Java_RequestsRemovedCallback_onResult(env, j_callback_obj, j_result_ids, |
| 196 j_result_codes); |
| 197 } |
| 198 |
174 } // namespace | 199 } // namespace |
175 | 200 |
176 static jboolean IsOfflinePagesEnabled(JNIEnv* env, | 201 static jboolean IsOfflinePagesEnabled(JNIEnv* env, |
177 const JavaParamRef<jclass>& clazz) { | 202 const JavaParamRef<jclass>& clazz) { |
178 return offline_pages::IsOfflinePagesEnabled(); | 203 return offline_pages::IsOfflinePagesEnabled(); |
179 } | 204 } |
180 | 205 |
181 static jboolean IsOfflineBookmarksEnabled(JNIEnv* env, | 206 static jboolean IsOfflineBookmarksEnabled(JNIEnv* env, |
182 const JavaParamRef<jclass>& clazz) { | 207 const JavaParamRef<jclass>& clazz) { |
183 return offline_pages::IsOfflineBookmarksEnabled(); | 208 return offline_pages::IsOfflineBookmarksEnabled(); |
(...skipping 283 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
467 // Callback with null to signal that results are unavailable. | 492 // Callback with null to signal that results are unavailable. |
468 const JavaParamRef<jobject> empty_result(nullptr); | 493 const JavaParamRef<jobject> empty_result(nullptr); |
469 base::android::RunCallbackAndroid(j_callback_obj, empty_result); | 494 base::android::RunCallbackAndroid(j_callback_obj, empty_result); |
470 return; | 495 return; |
471 } | 496 } |
472 | 497 |
473 coordinator->GetAllRequests( | 498 coordinator->GetAllRequests( |
474 base::Bind(&OnGetAllRequestsDone, j_callback_ref)); | 499 base::Bind(&OnGetAllRequestsDone, j_callback_ref)); |
475 } | 500 } |
476 | 501 |
| 502 void OfflinePageBridge::RemoveRequestsFromQueue( |
| 503 JNIEnv* env, |
| 504 const JavaParamRef<jobject>& obj, |
| 505 const JavaParamRef<jlongArray>& j_request_ids_array, |
| 506 const JavaParamRef<jobject>& j_callback_obj) { |
| 507 std::vector<int64_t> request_ids; |
| 508 base::android::JavaLongArrayToInt64Vector(env, j_request_ids_array, |
| 509 &request_ids); |
| 510 ScopedJavaGlobalRef<jobject> j_callback_ref(j_callback_obj); |
| 511 |
| 512 RequestCoordinator* coordinator = |
| 513 offline_pages::RequestCoordinatorFactory::GetInstance() |
| 514 ->GetForBrowserContext(browser_context_); |
| 515 |
| 516 if (!coordinator) { |
| 517 // Callback with null to signal that results are unavailable. |
| 518 const JavaParamRef<jobject> empty_result(nullptr); |
| 519 base::android::RunCallbackAndroid(j_callback_obj, empty_result); |
| 520 return; |
| 521 } |
| 522 |
| 523 coordinator->RemoveRequests( |
| 524 request_ids, base::Bind(&OnRemoveRequestsDone, j_callback_ref)); |
| 525 } |
| 526 |
477 void OfflinePageBridge::NotifyIfDoneLoading() const { | 527 void OfflinePageBridge::NotifyIfDoneLoading() const { |
478 if (!offline_page_model_->is_loaded()) | 528 if (!offline_page_model_->is_loaded()) |
479 return; | 529 return; |
480 JNIEnv* env = base::android::AttachCurrentThread(); | 530 JNIEnv* env = base::android::AttachCurrentThread(); |
481 Java_OfflinePageBridge_offlinePageModelLoaded(env, java_ref_); | 531 Java_OfflinePageBridge_offlinePageModelLoaded(env, java_ref_); |
482 } | 532 } |
483 | 533 |
484 | 534 |
485 ScopedJavaLocalRef<jobject> OfflinePageBridge::CreateClientId( | 535 ScopedJavaLocalRef<jobject> OfflinePageBridge::CreateClientId( |
486 JNIEnv* env, | 536 JNIEnv* env, |
487 const ClientId& client_id) const { | 537 const ClientId& client_id) const { |
488 return Java_OfflinePageBridge_createClientId( | 538 return Java_OfflinePageBridge_createClientId( |
489 env, ConvertUTF8ToJavaString(env, client_id.name_space), | 539 env, ConvertUTF8ToJavaString(env, client_id.name_space), |
490 ConvertUTF8ToJavaString(env, client_id.id)); | 540 ConvertUTF8ToJavaString(env, client_id.id)); |
491 } | 541 } |
492 | 542 |
493 bool RegisterOfflinePageBridge(JNIEnv* env) { | 543 bool RegisterOfflinePageBridge(JNIEnv* env) { |
494 return RegisterNativesImpl(env); | 544 return RegisterNativesImpl(env); |
495 } | 545 } |
496 | 546 |
497 } // namespace android | 547 } // namespace android |
498 } // namespace offline_pages | 548 } // namespace offline_pages |
OLD | NEW |