#ifndef COMPONENTS_CRONET_ANDROID_CRONET_CONTEXT_ADAPTER_H_
#define COMPONENTS_CRONET_ANDROID_CRONET_CONTEXT_ADAPTER_H_
#include <jni.h>
#include <stdint.h>
#include <memory>
#include "base/android/scoped_java_ref.h"
#include "base/containers/queue.h"
#include "base/functional/callback.h"
#include "base/memory/raw_ptr.h"
#include "base/threading/thread.h"
#include "components/cronet/cronet_context.h"
#include "components/prefs/json_pref_store.h"
#include "net/base/completion_once_callback.h"
#include "net/base/network_handle.h"
#include "net/http/http_request_headers.h"
#include "net/http/http_response_headers.h"
#include "net/nqe/effective_connection_type.h"
#include "net/nqe/effective_connection_type_observer.h"
#include "net/nqe/network_quality_estimator.h"
#include "net/nqe/network_quality_observation_source.h"
#include "net/nqe/rtt_throughput_estimates_observer.h"
namespace net {
class NetLog;
class URLRequestContext;
}
namespace cronet {
class TestUtil;
struct URLRequestContextConfig;
class CronetContextAdapter : public CronetContext::Callback {
public:
explicit CronetContextAdapter(
std::unique_ptr<URLRequestContextConfig> context_config);
CronetContextAdapter(const CronetContextAdapter&) = delete;
CronetContextAdapter& operator=(const CronetContextAdapter&) = delete;
~CronetContextAdapter() override;
void InitRequestContextOnInitThread(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& jcaller);
void Destroy(JNIEnv* env);
void PostTaskToNetworkThread(const base::Location& posted_from,
base::OnceClosure callback);
bool IsOnNetworkThread() const;
net::URLRequestContext* GetURLRequestContext(
net::handles::NetworkHandle network =
net::handles::kInvalidNetworkHandle);
bool StartNetLogToFile(JNIEnv* env,
const base::android::JavaParamRef<jstring>& jfile_name,
jboolean jlog_all);
void StartNetLogToDisk(JNIEnv* env,
const base::android::JavaParamRef<jstring>& jdir_name,
jboolean jlog_all,
jint jmax_size);
void StopNetLog(JNIEnv* env);
void FlushWritePropertiesForTesting(JNIEnv* env);
int default_load_flags() const;
void InitRequestContextOnInitThread();
void ConfigureNetworkQualityEstimatorForTesting(
JNIEnv* env,
jboolean use_local_host_requests,
jboolean use_smaller_responses,
jboolean disable_offline_check);
bool URLRequestContextExistsForTesting(jlong network);
void ProvideRTTObservations(JNIEnv* env, bool should);
void ProvideThroughputObservations(JNIEnv* env, bool should);
CronetContext* cronet_url_request_context() const { return context_; }
void OnInitNetworkThread() override;
void OnDestroyNetworkThread() override;
void OnEffectiveConnectionTypeChanged(
net::EffectiveConnectionType effective_connection_type) override;
void OnRTTOrThroughputEstimatesComputed(
int32_t http_rtt_ms,
int32_t transport_rtt_ms,
int32_t downstream_throughput_kbps) override;
void OnRTTObservation(int32_t rtt_ms,
int32_t timestamp_ms,
net::NetworkQualityObservationSource source) override;
void OnThroughputObservation(
int32_t throughput_kbps,
int32_t timestamp_ms,
net::NetworkQualityObservationSource source) override;
void OnStopNetLogCompleted() override;
void OnBeforeTunnelRequest(
int chain_id,
net::ProxyDelegate::OnBeforeTunnelRequestCallback callback) override;
void OnTunnelHeadersReceived(int chain_id,
const net::HttpResponseHeaders& response_headers,
net::CompletionOnceCallback callback) override;
private:
friend class TestUtil;
raw_ptr<CronetContext> context_;
base::android::ScopedJavaGlobalRef<jobject> jcronet_url_request_context_;
};
}
#endif