Index: chrome/browser/android/offline_pages/cct_request_observer.cc |
diff --git a/chrome/browser/android/offline_pages/cct_request_observer.cc b/chrome/browser/android/offline_pages/cct_request_observer.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..e1f088dac71c3b748ebef394f9a15e31d0d97408 |
--- /dev/null |
+++ b/chrome/browser/android/offline_pages/cct_request_observer.cc |
@@ -0,0 +1,70 @@ |
+// Copyright 2017 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "chrome/browser/android/offline_pages/cct_request_observer.h" |
+ |
+#include "base/android/callback_android.h" |
+#include "base/android/jni_int_wrapper.h" |
+#include "base/android/jni_string.h" |
+#include "chrome/browser/android/app_hooks.h" |
+#include "components/offline_pages/core/client_namespace_constants.h" |
+#include "components/offline_pages/core/offline_page_feature.h" |
+#include "jni/CCTRequestStatus_jni.h" |
+ |
+namespace offline_pages { |
+namespace { |
+int kCCTRequestObserverUserDataKey; |
+} // namespace |
+ |
+using chrome::android::AppHooks; |
+ |
+// static |
+void CCTRequestObserver::AttachToRequestCoordinator( |
+ RequestCoordinator* coordinator) { |
+ if (!IsOfflinePagesCTEnabled()) |
+ return; |
+ |
+ base::android::ScopedJavaLocalRef<jobject> callback = |
+ AppHooks::GetOfflinePagesCCTRequestDoneCallback(); |
+ if (!callback.obj()) |
+ return; |
+ |
+ auto request_observer = base::WrapUnique(new CCTRequestObserver(callback)); |
+ coordinator->AddObserver(request_observer.get()); |
+ coordinator->SetUserData(&kCCTRequestObserverUserDataKey, |
+ std::move(request_observer)); |
+} |
+ |
+CCTRequestObserver::~CCTRequestObserver() = default; |
+ |
+CCTRequestObserver::CCTRequestObserver( |
+ base::android::ScopedJavaLocalRef<jobject> callback) { |
+ JNIEnv* env = base::android::AttachCurrentThread(); |
+ j_callback_.Reset(env, callback.obj()); |
+} |
+ |
+void CCTRequestObserver::OnAdded(const SavePageRequest& request) {} |
+ |
+void CCTRequestObserver::OnCompleted( |
+ const SavePageRequest& request, |
+ RequestNotifier::BackgroundSavePageResult status) { |
+ if (request.client_id().name_space != kCCTNamespace) { |
+ return; |
+ } |
+ |
+ JNIEnv* env = base::android::AttachCurrentThread(); |
+ base::android::ScopedJavaLocalRef<jobject> callback_info = |
+ Java_CCTRequestStatus_create( |
+ env, as_jint(static_cast<int>(status)), |
+ base::android::ConvertUTF8ToJavaString(env, request.client_id().id)); |
+ |
+ base::android::RunCallbackAndroid(j_callback_, callback_info); |
+} |
+ |
+void CCTRequestObserver::OnChanged(const SavePageRequest& request) {} |
+ |
+void CCTRequestObserver::OnNetworkProgress(const SavePageRequest& request, |
+ int64_t received_bytes) {} |
+ |
+} // namespace offline_pages |