blob: 1ff1d99378b0c50d1751c16c415bda5b89a312b2 [file] [log] [blame]
// 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/offline_pages/android/cct_request_observer.h"
#include <utility>
#include "base/android/callback_android.h"
#include "base/android/jni_int_wrapper.h"
#include "base/android/jni_string.h"
#include "base/memory/ptr_util.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::RunObjectCallbackAndroid(j_callback_, callback_info);
}
void CCTRequestObserver::OnChanged(const SavePageRequest& request) {}
void CCTRequestObserver::OnNetworkProgress(const SavePageRequest& request,
int64_t received_bytes) {}
} // namespace offline_pages