| 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 3c2cfa8634dd997f49252b18cbce148c235e541c..39c585a84423e79b81ea0c700d5bc9536c7ff90f 100644
|
| --- a/components/cronet/android/cronet_url_request_context_adapter.cc
|
| +++ b/components/cronet/android/cronet_url_request_context_adapter.cc
|
| @@ -4,26 +4,24 @@
|
|
|
| #include "components/cronet/android/cronet_url_request_context_adapter.h"
|
|
|
| +#include "base/android/jni_android.h"
|
| +#include "base/android/jni_string.h"
|
| #include "base/bind.h"
|
| #include "base/files/file_util.h"
|
| +#include "base/logging.h"
|
| #include "base/single_thread_task_runner.h"
|
| +#include "base/values.h"
|
| #include "components/cronet/url_request_context_config.h"
|
| +#include "jni/CronetUrlRequestContext_jni.h"
|
| #include "net/base/load_flags.h"
|
| #include "net/base/net_errors.h"
|
| #include "net/base/net_log_logger.h"
|
| #include "net/base/network_delegate_impl.h"
|
| -#include "net/cert/cert_verifier.h"
|
| #include "net/http/http_auth_handler_factory.h"
|
| -#include "net/http/http_network_layer.h"
|
| -#include "net/http/http_server_properties.h"
|
| #include "net/proxy/proxy_config_service_fixed.h"
|
| #include "net/proxy/proxy_service.h"
|
| -#include "net/ssl/ssl_config_service_defaults.h"
|
| -#include "net/url_request/static_http_user_agent_settings.h"
|
| #include "net/url_request/url_request_context.h"
|
| #include "net/url_request/url_request_context_builder.h"
|
| -#include "net/url_request/url_request_context_storage.h"
|
| -#include "net/url_request/url_request_job_factory_impl.h"
|
|
|
| namespace {
|
|
|
| @@ -108,6 +106,11 @@ class BasicNetworkDelegate : public net::NetworkDelegateImpl {
|
|
|
| namespace cronet {
|
|
|
| +// Explicitly register static JNI functions.
|
| +bool CronetUrlRequestContextAdapterRegisterJni(JNIEnv* env) {
|
| + return RegisterNativesImpl(env);
|
| +}
|
| +
|
| CronetURLRequestContextAdapter::CronetURLRequestContextAdapter(
|
| scoped_ptr<URLRequestContextConfig> context_config)
|
| : network_thread_(new base::Thread("network")),
|
| @@ -125,20 +128,23 @@ CronetURLRequestContextAdapter::~CronetURLRequestContextAdapter() {
|
| }
|
|
|
| void CronetURLRequestContextAdapter::InitRequestContextOnMainThread(
|
| - const base::Closure& java_init_network_thread) {
|
| + JNIEnv* env,
|
| + jobject jcaller) {
|
| + base::android::ScopedJavaGlobalRef<jobject> jcaller_ref;
|
| + jcaller_ref.Reset(env, jcaller);
|
| proxy_config_service_.reset(net::ProxyService::CreateSystemProxyConfigService(
|
| GetNetworkTaskRunner(), nullptr));
|
| GetNetworkTaskRunner()->PostTask(
|
| FROM_HERE,
|
| base::Bind(&CronetURLRequestContextAdapter::InitializeOnNetworkThread,
|
| - base::Unretained(this),
|
| - Passed(&context_config_),
|
| - java_init_network_thread));
|
| + base::Unretained(this), Passed(&context_config_),
|
| + jcaller_ref));
|
| }
|
|
|
| void CronetURLRequestContextAdapter::InitializeOnNetworkThread(
|
| scoped_ptr<URLRequestContextConfig> config,
|
| - const base::Closure& java_init_network_thread) {
|
| + const base::android::ScopedJavaGlobalRef<jobject>&
|
| + jcronet_url_request_context) {
|
| DCHECK(GetNetworkTaskRunner()->BelongsToCurrentThread());
|
| DCHECK(!is_context_initialized_);
|
| // TODO(mmenke): Add method to have the builder enable SPDY.
|
| @@ -199,7 +205,9 @@ void CronetURLRequestContextAdapter::InitializeOnNetworkThread(
|
| }
|
| }
|
|
|
| - java_init_network_thread.Run();
|
| + JNIEnv* env = base::android::AttachCurrentThread();
|
| + Java_CronetUrlRequestContext_initNetworkThread(
|
| + env, jcronet_url_request_context.obj());
|
|
|
| is_context_initialized_ = true;
|
| while (!tasks_waiting_for_context_.empty()) {
|
| @@ -208,7 +216,7 @@ void CronetURLRequestContextAdapter::InitializeOnNetworkThread(
|
| }
|
| }
|
|
|
| -void CronetURLRequestContextAdapter::Destroy() {
|
| +void CronetURLRequestContextAdapter::Destroy(JNIEnv* env, jobject jcaller) {
|
| DCHECK(!GetNetworkTaskRunner()->BelongsToCurrentThread());
|
| // Stick network_thread_ in a local, as |this| may be destroyed from the
|
| // network thread before delete network_thread is called.
|
| @@ -254,17 +262,18 @@ CronetURLRequestContextAdapter::GetNetworkTaskRunner() const {
|
| return network_thread_->task_runner();
|
| }
|
|
|
| -void CronetURLRequestContextAdapter::StartNetLogToFile(
|
| - const std::string& file_name) {
|
| +void CronetURLRequestContextAdapter::StartNetLogToFile(JNIEnv* env,
|
| + jobject jcaller,
|
| + jstring jfile_name) {
|
| GetNetworkTaskRunner()->PostTask(
|
| FROM_HERE,
|
| base::Bind(
|
| &CronetURLRequestContextAdapter::StartNetLogToFileOnNetworkThread,
|
| base::Unretained(this),
|
| - file_name));
|
| + base::android::ConvertJavaStringToUTF8(env, jfile_name)));
|
| }
|
|
|
| -void CronetURLRequestContextAdapter::StopNetLog() {
|
| +void CronetURLRequestContextAdapter::StopNetLog(JNIEnv* env, jobject jcaller) {
|
| GetNetworkTaskRunner()->PostTask(
|
| FROM_HERE,
|
| base::Bind(&CronetURLRequestContextAdapter::StopNetLogOnNetworkThread,
|
| @@ -296,4 +305,29 @@ void CronetURLRequestContextAdapter::StopNetLogOnNetworkThread() {
|
| }
|
| }
|
|
|
| +// Creates RequestContextAdater if config is valid URLRequestContextConfig,
|
| +// returns 0 otherwise.
|
| +static jlong CreateRequestContextAdapter(JNIEnv* env,
|
| + jclass jcaller,
|
| + jobject japp_context,
|
| + jstring jconfig) {
|
| + std::string config_string =
|
| + base::android::ConvertJavaStringToUTF8(env, jconfig);
|
| + scoped_ptr<URLRequestContextConfig> context_config(
|
| + new URLRequestContextConfig());
|
| + if (!context_config->LoadFromJSON(config_string))
|
| + return 0;
|
| +
|
| + CronetURLRequestContextAdapter* context_adapter =
|
| + new CronetURLRequestContextAdapter(context_config.Pass());
|
| + return reinterpret_cast<jlong>(context_adapter);
|
| +}
|
| +
|
| +static jint SetMinLogLevel(JNIEnv* env, jclass jcaller, jint jlog_level) {
|
| + jint old_log_level = static_cast<jint>(logging::GetMinLogLevel());
|
| + // MinLogLevel is global, shared by all URLRequestContexts.
|
| + logging::SetMinLogLevel(static_cast<int>(jlog_level));
|
| + return old_log_level;
|
| +}
|
| +
|
| } // namespace cronet
|
|
|