blob: 3933070cb7ad17c1e9a8c56442146d1f0869b808 [file] [log] [blame]
// Copyright 2019 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/net/nqe/network_quality_provider.h"
#include "base/android/jni_android.h"
#include "chrome/android/chrome_jni_headers/NetworkQualityProvider_jni.h"
#include "chrome/browser/browser_process.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/network_quality_observer_factory.h"
using base::android::JavaParamRef;
using base::android::ScopedJavaLocalRef;
NetworkQualityProvider::NetworkQualityProvider(JNIEnv* env,
const JavaParamRef<jobject>& obj)
: j_obj_(env, obj) {
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
DCHECK(g_browser_process);
g_browser_process->network_quality_tracker()
->AddRTTAndThroughputEstimatesObserver(this);
g_browser_process->network_quality_tracker()
->AddEffectiveConnectionTypeObserver(this);
}
NetworkQualityProvider::~NetworkQualityProvider() {
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
g_browser_process->network_quality_tracker()
->RemoveRTTAndThroughputEstimatesObserver(this);
g_browser_process->network_quality_tracker()
->RemoveEffectiveConnectionTypeObserver(this);
}
void NetworkQualityProvider::OnEffectiveConnectionTypeChanged(
net::EffectiveConnectionType type) {
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
JNIEnv* env = base::android::AttachCurrentThread();
Java_NetworkQualityProvider_onEffectiveConnectionTypeChanged(
env, j_obj_, static_cast<int>(type));
}
void NetworkQualityProvider::OnRTTOrThroughputEstimatesComputed(
base::TimeDelta http_rtt,
base::TimeDelta transport_rtt,
int32_t downstream_throughput_kbps) {
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
JNIEnv* env = base::android::AttachCurrentThread();
Java_NetworkQualityProvider_onRTTOrThroughputEstimatesComputed(
env, j_obj_, http_rtt.InMilliseconds(), transport_rtt.InMilliseconds(),
downstream_throughput_kbps);
}
// ----------------------------------------------------------------------------
// Native JNI methods
// ----------------------------------------------------------------------------
static jlong JNI_NetworkQualityProvider_Init(JNIEnv* env,
const JavaParamRef<jobject>& obj) {
return reinterpret_cast<intptr_t>(new NetworkQualityProvider(env, obj));
}