Chromium Code Reviews| Index: components/cronet/android/cronet_url_request_context_adapter.cc |
| diff --git a/components/cronet/android/cronet_url_request_context_adapter.cc b/components/cronet/android/cronet_url_request_context_adapter.cc |
| index 6621e091c59ab8197d61394093a5f4e9dca2cdff..ae1fc9ff2eca21b3146bb4c9d047684fe071cde8 100644 |
| --- a/components/cronet/android/cronet_url_request_context_adapter.cc |
| +++ b/components/cronet/android/cronet_url_request_context_adapter.cc |
| @@ -4,6 +4,8 @@ |
| #include "components/cronet/android/cronet_url_request_context_adapter.h" |
| +#include <map> |
| + |
| #include "base/android/jni_android.h" |
| #include "base/android/jni_string.h" |
| #include "base/bind.h" |
| @@ -21,9 +23,11 @@ |
| #include "base/values.h" |
| #include "components/cronet/url_request_context_config.h" |
| #include "jni/CronetUrlRequestContext_jni.h" |
| +#include "net/base/external_estimate_provider.h" |
| #include "net/base/load_flags.h" |
| #include "net/base/net_errors.h" |
| #include "net/base/network_delegate_impl.h" |
| +#include "net/base/network_quality_estimator.h" |
|
mef
2015/08/28 20:53:15
included into header?
bengr
2015/08/28 23:51:36
Oy. Sorry for the sloppiness. I should have checke
|
| #include "net/http/http_auth_handler_factory.h" |
| #include "net/http/http_server_properties_manager.h" |
| #include "net/log/write_to_file_net_log_observer.h" |
| @@ -139,6 +143,10 @@ CronetURLRequestContextAdapter::~CronetURLRequestContextAdapter() { |
| http_server_properties_manager_->ShutdownOnPrefThread(); |
| if (pref_service_) |
| pref_service_->CommitPendingWrite(); |
| + if (network_quality_estimator_) { |
| + network_quality_estimator_->RemoveRTTObserver(this); |
| + network_quality_estimator_->RemoveThroughputObserver(this); |
| + } |
| StopNetLogOnNetworkThread(); |
| } |
| @@ -156,6 +164,68 @@ void CronetURLRequestContextAdapter::InitRequestContextOnMainThread( |
| jcaller_ref)); |
| } |
| +void CronetURLRequestContextAdapter:: |
| + EnableNetworkQualityEstimatorOnNetworkThread(bool use_local_host_requests, |
|
mef
2015/08/28 20:53:15
So, what happens if this is called twice?
bengr
2015/08/28 23:51:36
Nothing bad if this registers as an observer twice
|
| + bool use_smaller_responses) { |
| + DCHECK(GetNetworkTaskRunner()->BelongsToCurrentThread()); |
| + DCHECK(!network_quality_estimator_); |
| + network_quality_estimator_.reset(new net::NetworkQualityEstimator( |
| + scoped_ptr<net::ExternalEstimateProvider>(), |
| + std::map<std::string, std::string>())); |
| + context_->set_network_quality_estimator(network_quality_estimator_.get()); |
| + network_quality_estimator_->Configure(use_local_host_requests, |
| + use_smaller_responses); |
| +} |
| + |
| +void CronetURLRequestContextAdapter::EnableNetworkQualityEstimator( |
| + JNIEnv* env, |
| + jobject jcaller, |
| + jboolean use_local_host_requests, |
| + jboolean use_smaller_responses) { |
| + PostTaskToNetworkThread( |
| + FROM_HERE, base::Bind(&CronetURLRequestContextAdapter:: |
| + EnableNetworkQualityEstimatorOnNetworkThread, |
| + base::Unretained(this), use_local_host_requests, |
| + use_smaller_responses)); |
| +} |
| + |
| +void CronetURLRequestContextAdapter::ProvideRTTObservationsOnNetworkThread( |
| + bool should) { |
|
mef
2015/08/28 20:53:15
DCHECK(GetNetworkTaskRunner()->BelongsToCurrentThr
bengr
2015/08/28 23:51:36
Done.
|
| + DCHECK(network_quality_estimator_); |
|
mef
2015/08/28 20:53:15
what if EnableNetworkQualityEstimator was never ca
bengr
2015/08/28 23:51:36
I changed these to silently fail, so tests wouldn'
|
| + if (should) |
| + network_quality_estimator_->AddRTTObserver(this); |
| + else |
| + network_quality_estimator_->RemoveRTTObserver(this); |
| +} |
| + |
| +void CronetURLRequestContextAdapter::ProvideRTTObservations(JNIEnv* env, |
| + jobject jcaller, |
| + bool should) { |
| + PostTaskToNetworkThread(FROM_HERE, |
| + base::Bind(&CronetURLRequestContextAdapter:: |
| + ProvideRTTObservationsOnNetworkThread, |
| + base::Unretained(this), should)); |
| +} |
| + |
| +void CronetURLRequestContextAdapter:: |
| + ProvideThroughputObservationsOnNetworkThread(bool should) { |
| + DCHECK(network_quality_estimator_); |
|
mef
2015/08/28 20:53:15
what if EnableNetworkQualityEstimator was never ca
bengr
2015/08/28 23:51:36
See above comment.
|
| + if (should) |
| + network_quality_estimator_->AddThroughputObserver(this); |
| + else |
| + network_quality_estimator_->RemoveThroughputObserver(this); |
| +} |
| + |
| +void CronetURLRequestContextAdapter::ProvideThroughputObservations( |
| + JNIEnv* env, |
| + jobject jcaller, |
| + bool should) { |
| + PostTaskToNetworkThread( |
| + FROM_HERE, base::Bind(&CronetURLRequestContextAdapter:: |
| + ProvideThroughputObservationsOnNetworkThread, |
| + base::Unretained(this), should)); |
| +} |
| + |
| void CronetURLRequestContextAdapter::InitializeOnNetworkThread( |
| scoped_ptr<URLRequestContextConfig> config, |
| const base::android::ScopedJavaGlobalRef<jobject>& |
| @@ -281,6 +351,7 @@ void CronetURLRequestContextAdapter::InitializeOnNetworkThread( |
| } |
| JNIEnv* env = base::android::AttachCurrentThread(); |
| + jcronet_url_request_context_.Reset(env, jcronet_url_request_context.obj()); |
| Java_CronetUrlRequestContext_initNetworkThread( |
| env, jcronet_url_request_context.obj()); |
| @@ -399,6 +470,27 @@ base::Thread* CronetURLRequestContextAdapter::GetFileThread() { |
| return file_thread_.get(); |
| } |
| +void CronetURLRequestContextAdapter::OnRTTObservation( |
| + int32_t rtt_ms, |
| + const base::TimeTicks& timestamp, |
| + net::NetworkQualityEstimator::ObservationSource source) { |
| + Java_CronetUrlRequestContext_onRTTObservation( |
| + base::android::AttachCurrentThread(), jcronet_url_request_context_.obj(), |
| + rtt_ms, (timestamp - base::TimeTicks::UnixEpoch()).InMilliseconds(), |
| + static_cast<jint>(source)); |
| +} |
| + |
| +void CronetURLRequestContextAdapter::OnThroughputObservation( |
| + int32_t throughput_kbps, |
| + const base::TimeTicks& timestamp, |
| + net::NetworkQualityEstimator::ObservationSource source) { |
| + Java_CronetUrlRequestContext_onThroughputObservation( |
| + base::android::AttachCurrentThread(), jcronet_url_request_context_.obj(), |
| + throughput_kbps, |
| + (timestamp - base::TimeTicks::UnixEpoch()).InMilliseconds(), |
| + static_cast<jint>(source)); |
| +} |
| + |
| // Creates RequestContextAdater if config is valid URLRequestContextConfig, |
| // returns 0 otherwise. |
| static jlong CreateRequestContextAdapter(JNIEnv* env, |