Commit 8ee9d324 authored by xunjieli's avatar xunjieli Committed by Commit bot

Use @NativeClassQualifiedName in CronetUrlRequestContext.java

This CL uses @NativeClassQualifiedName in CronetUrlRequestContext.java to reduce
JNI code. After the refactoring, cronet_url_request_context.cc is merged
with cronet_url_request_context_adapter.cc, since the former mostly contains
JNI code that will be generated by @NativeClassQualifiedName.

BUG=458276

Review URL: https://codereview.chromium.org/922283002

Cr-Commit-Position: refs/heads/master@{#317068}
parent d6e65341
...@@ -128,8 +128,6 @@ ...@@ -128,8 +128,6 @@
'cronet/android/cronet_url_request.h', 'cronet/android/cronet_url_request.h',
'cronet/android/cronet_url_request_adapter.cc', 'cronet/android/cronet_url_request_adapter.cc',
'cronet/android/cronet_url_request_adapter.h', 'cronet/android/cronet_url_request_adapter.h',
'cronet/android/cronet_url_request_context.cc',
'cronet/android/cronet_url_request_context.h',
'cronet/android/cronet_url_request_context_adapter.cc', 'cronet/android/cronet_url_request_context_adapter.cc',
'cronet/android/cronet_url_request_context_adapter.h', 'cronet/android/cronet_url_request_context_adapter.h',
'cronet/android/url_request_adapter.cc', 'cronet/android/url_request_adapter.cc',
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
#include "components/cronet/android/chromium_url_request_context.h" #include "components/cronet/android/chromium_url_request_context.h"
#include "components/cronet/android/cronet_histogram_manager.h" #include "components/cronet/android/cronet_histogram_manager.h"
#include "components/cronet/android/cronet_url_request.h" #include "components/cronet/android/cronet_url_request.h"
#include "components/cronet/android/cronet_url_request_context.h" #include "components/cronet/android/cronet_url_request_context_adapter.h"
#include "jni/CronetLibraryLoader_jni.h" #include "jni/CronetLibraryLoader_jni.h"
#include "net/android/net_jni_registrar.h" #include "net/android/net_jni_registrar.h"
#include "net/android/network_change_notifier_factory_android.h" #include "net/android/network_change_notifier_factory_android.h"
...@@ -38,7 +38,8 @@ const base::android::RegistrationMethod kCronetRegisteredMethods[] = { ...@@ -38,7 +38,8 @@ const base::android::RegistrationMethod kCronetRegisteredMethods[] = {
{"CronetHistogramManager", CronetHistogramManagerRegisterJni}, {"CronetHistogramManager", CronetHistogramManagerRegisterJni},
{"CronetLibraryLoader", RegisterNativesImpl}, {"CronetLibraryLoader", RegisterNativesImpl},
{"CronetUrlRequest", CronetUrlRequestRegisterJni}, {"CronetUrlRequest", CronetUrlRequestRegisterJni},
{"CronetUrlRequestContext", CronetUrlRequestContextRegisterJni}, {"CronetUrlRequestContextAdapter",
CronetUrlRequestContextAdapterRegisterJni},
{"NetAndroid", net::android::RegisterJni}, {"NetAndroid", net::android::RegisterJni},
{"UrlAndroid", url::android::RegisterJni}, {"UrlAndroid", url::android::RegisterJni},
}; };
......
// Copyright 2014 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 "components/cronet/android/cronet_url_request_context.h"
#include <string>
#include "base/android/jni_android.h"
#include "base/android/jni_string.h"
#include "base/android/scoped_java_ref.h"
#include "base/logging.h"
#include "base/memory/scoped_ptr.h"
#include "base/metrics/statistics_recorder.h"
#include "base/values.h"
#include "components/cronet/android/cronet_url_request.h"
#include "components/cronet/android/cronet_url_request_adapter.h"
#include "components/cronet/android/cronet_url_request_context_adapter.h"
#include "components/cronet/url_request_context_config.h"
#include "jni/CronetUrlRequestContext_jni.h"
namespace cronet {
// Init network thread on Java side.
void initJavaNetworkThread(
const base::android::ScopedJavaGlobalRef<jobject>& jowner) {
JNIEnv* env = base::android::AttachCurrentThread();
Java_CronetUrlRequestContext_initNetworkThread(env, jowner.obj());
}
// Explicitly register static JNI functions.
bool CronetUrlRequestContextRegisterJni(JNIEnv* env) {
return RegisterNativesImpl(env);
}
// Creates RequestContextAdater if config is valid URLRequestContextConfig,
// returns 0 otherwise.
static jlong CreateRequestContextAdapter(JNIEnv* env,
jobject 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);
}
// Destroys native objects.
static void DestroyRequestContextAdapter(JNIEnv* env,
jobject jcaller,
jlong jurl_request_context_adapter) {
DCHECK(jurl_request_context_adapter);
CronetURLRequestContextAdapter* context_adapter =
reinterpret_cast<CronetURLRequestContextAdapter*>(
jurl_request_context_adapter);
context_adapter->Destroy();
}
// Starts recording NetLog into file with |fileName|.
static void StartNetLogToFile(JNIEnv* env,
jobject jcaller,
jlong jurl_request_context_adapter,
jstring jfile_name) {
if (jurl_request_context_adapter == 0)
return;
CronetURLRequestContextAdapter* context_adapter =
reinterpret_cast<CronetURLRequestContextAdapter*>(
jurl_request_context_adapter);
std::string file_name =
base::android::ConvertJavaStringToUTF8(env, jfile_name);
context_adapter->StartNetLogToFile(file_name);
}
// Stops recording NetLog.
static void StopNetLog(JNIEnv* env,
jobject jcaller,
jlong jurl_request_context_adapter) {
if (jurl_request_context_adapter == 0)
return;
CronetURLRequestContextAdapter* context_adapter =
reinterpret_cast<CronetURLRequestContextAdapter*>(
jurl_request_context_adapter);
context_adapter->StopNetLog();
}
static jint SetMinLogLevel(JNIEnv* env, jobject 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;
}
// Called on application's main Java thread.
static void InitRequestContextOnMainThread(JNIEnv* env,
jobject jcaller,
jlong jurl_request_context_adapter) {
if (jurl_request_context_adapter == 0)
return;
CronetURLRequestContextAdapter* context_adapter =
reinterpret_cast<CronetURLRequestContextAdapter*>(
jurl_request_context_adapter);
base::android::ScopedJavaGlobalRef<jobject> jcaller_ref;
jcaller_ref.Reset(env, jcaller);
base::Closure init_java_network_thread = base::Bind(&initJavaNetworkThread,
jcaller_ref);
context_adapter->InitRequestContextOnMainThread(init_java_network_thread);
}
} // namespace cronet
// Copyright 2014 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.
#ifndef COMPONENTS_CRONET_ANDROID_CRONET_URL_REQUEST_CONTEXT_H_
#define COMPONENTS_CRONET_ANDROID_CRONET_URL_REQUEST_CONTEXT_H_
#include <jni.h>
namespace cronet {
bool CronetUrlRequestContextRegisterJni(JNIEnv* env);
} // namespace cronet
#endif // COMPONENTS_CRONET_ANDROID_CRONET_URL_REQUEST_CONTEXT_H_
...@@ -4,26 +4,24 @@ ...@@ -4,26 +4,24 @@
#include "components/cronet/android/cronet_url_request_context_adapter.h" #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/bind.h"
#include "base/files/file_util.h" #include "base/files/file_util.h"
#include "base/logging.h"
#include "base/single_thread_task_runner.h" #include "base/single_thread_task_runner.h"
#include "base/values.h"
#include "components/cronet/url_request_context_config.h" #include "components/cronet/url_request_context_config.h"
#include "jni/CronetUrlRequestContext_jni.h"
#include "net/base/load_flags.h" #include "net/base/load_flags.h"
#include "net/base/net_errors.h" #include "net/base/net_errors.h"
#include "net/base/net_log_logger.h" #include "net/base/net_log_logger.h"
#include "net/base/network_delegate_impl.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_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_config_service_fixed.h"
#include "net/proxy/proxy_service.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.h"
#include "net/url_request/url_request_context_builder.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 { namespace {
...@@ -108,6 +106,11 @@ class BasicNetworkDelegate : public net::NetworkDelegateImpl { ...@@ -108,6 +106,11 @@ class BasicNetworkDelegate : public net::NetworkDelegateImpl {
namespace cronet { namespace cronet {
// Explicitly register static JNI functions.
bool CronetUrlRequestContextAdapterRegisterJni(JNIEnv* env) {
return RegisterNativesImpl(env);
}
CronetURLRequestContextAdapter::CronetURLRequestContextAdapter( CronetURLRequestContextAdapter::CronetURLRequestContextAdapter(
scoped_ptr<URLRequestContextConfig> context_config) scoped_ptr<URLRequestContextConfig> context_config)
: network_thread_(new base::Thread("network")), : network_thread_(new base::Thread("network")),
...@@ -125,20 +128,23 @@ CronetURLRequestContextAdapter::~CronetURLRequestContextAdapter() { ...@@ -125,20 +128,23 @@ CronetURLRequestContextAdapter::~CronetURLRequestContextAdapter() {
} }
void CronetURLRequestContextAdapter::InitRequestContextOnMainThread( 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( proxy_config_service_.reset(net::ProxyService::CreateSystemProxyConfigService(
GetNetworkTaskRunner(), nullptr)); GetNetworkTaskRunner(), nullptr));
GetNetworkTaskRunner()->PostTask( GetNetworkTaskRunner()->PostTask(
FROM_HERE, FROM_HERE,
base::Bind(&CronetURLRequestContextAdapter::InitializeOnNetworkThread, base::Bind(&CronetURLRequestContextAdapter::InitializeOnNetworkThread,
base::Unretained(this), base::Unretained(this), Passed(&context_config_),
Passed(&context_config_), jcaller_ref));
java_init_network_thread));
} }
void CronetURLRequestContextAdapter::InitializeOnNetworkThread( void CronetURLRequestContextAdapter::InitializeOnNetworkThread(
scoped_ptr<URLRequestContextConfig> config, scoped_ptr<URLRequestContextConfig> config,
const base::Closure& java_init_network_thread) { const base::android::ScopedJavaGlobalRef<jobject>&
jcronet_url_request_context) {
DCHECK(GetNetworkTaskRunner()->BelongsToCurrentThread()); DCHECK(GetNetworkTaskRunner()->BelongsToCurrentThread());
DCHECK(!is_context_initialized_); DCHECK(!is_context_initialized_);
// TODO(mmenke): Add method to have the builder enable SPDY. // TODO(mmenke): Add method to have the builder enable SPDY.
...@@ -199,7 +205,9 @@ void CronetURLRequestContextAdapter::InitializeOnNetworkThread( ...@@ -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; is_context_initialized_ = true;
while (!tasks_waiting_for_context_.empty()) { while (!tasks_waiting_for_context_.empty()) {
...@@ -208,7 +216,7 @@ void CronetURLRequestContextAdapter::InitializeOnNetworkThread( ...@@ -208,7 +216,7 @@ void CronetURLRequestContextAdapter::InitializeOnNetworkThread(
} }
} }
void CronetURLRequestContextAdapter::Destroy() { void CronetURLRequestContextAdapter::Destroy(JNIEnv* env, jobject jcaller) {
DCHECK(!GetNetworkTaskRunner()->BelongsToCurrentThread()); DCHECK(!GetNetworkTaskRunner()->BelongsToCurrentThread());
// Stick network_thread_ in a local, as |this| may be destroyed from the // Stick network_thread_ in a local, as |this| may be destroyed from the
// network thread before delete network_thread is called. // network thread before delete network_thread is called.
...@@ -254,17 +262,18 @@ CronetURLRequestContextAdapter::GetNetworkTaskRunner() const { ...@@ -254,17 +262,18 @@ CronetURLRequestContextAdapter::GetNetworkTaskRunner() const {
return network_thread_->task_runner(); return network_thread_->task_runner();
} }
void CronetURLRequestContextAdapter::StartNetLogToFile( void CronetURLRequestContextAdapter::StartNetLogToFile(JNIEnv* env,
const std::string& file_name) { jobject jcaller,
jstring jfile_name) {
GetNetworkTaskRunner()->PostTask( GetNetworkTaskRunner()->PostTask(
FROM_HERE, FROM_HERE,
base::Bind( base::Bind(
&CronetURLRequestContextAdapter::StartNetLogToFileOnNetworkThread, &CronetURLRequestContextAdapter::StartNetLogToFileOnNetworkThread,
base::Unretained(this), base::Unretained(this),
file_name)); base::android::ConvertJavaStringToUTF8(env, jfile_name)));
} }
void CronetURLRequestContextAdapter::StopNetLog() { void CronetURLRequestContextAdapter::StopNetLog(JNIEnv* env, jobject jcaller) {
GetNetworkTaskRunner()->PostTask( GetNetworkTaskRunner()->PostTask(
FROM_HERE, FROM_HERE,
base::Bind(&CronetURLRequestContextAdapter::StopNetLogOnNetworkThread, base::Bind(&CronetURLRequestContextAdapter::StopNetLogOnNetworkThread,
...@@ -296,4 +305,29 @@ void 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 } // namespace cronet
...@@ -5,16 +5,17 @@ ...@@ -5,16 +5,17 @@
#ifndef COMPONENTS_CRONET_ANDROID_CRONET_URL_REQUEST_CONTEXT_ADAPTER_H_ #ifndef COMPONENTS_CRONET_ANDROID_CRONET_URL_REQUEST_CONTEXT_ADAPTER_H_
#define COMPONENTS_CRONET_ANDROID_CRONET_URL_REQUEST_CONTEXT_ADAPTER_H_ #define COMPONENTS_CRONET_ANDROID_CRONET_URL_REQUEST_CONTEXT_ADAPTER_H_
#include <jni.h>
#include <queue> #include <queue>
#include <string> #include <string>
#include "base/android/scoped_java_ref.h"
#include "base/callback.h" #include "base/callback.h"
#include "base/macros.h" #include "base/macros.h"
#include "base/memory/ref_counted.h" #include "base/memory/ref_counted.h"
#include "base/memory/scoped_ptr.h" #include "base/memory/scoped_ptr.h"
#include "base/threading/thread.h" #include "base/threading/thread.h"
#include "net/base/net_log.h"
#include "net/base/network_change_notifier.h"
namespace base { namespace base {
class SingleThreadTaskRunner; class SingleThreadTaskRunner;
...@@ -30,6 +31,8 @@ namespace cronet { ...@@ -30,6 +31,8 @@ namespace cronet {
struct URLRequestContextConfig; struct URLRequestContextConfig;
bool CronetUrlRequestContextAdapterRegisterJni(JNIEnv* env);
// Adapter between Java CronetUrlRequestContext and net::URLRequestContext. // Adapter between Java CronetUrlRequestContext and net::URLRequestContext.
class CronetURLRequestContextAdapter { class CronetURLRequestContextAdapter {
public: public:
...@@ -39,12 +42,11 @@ class CronetURLRequestContextAdapter { ...@@ -39,12 +42,11 @@ class CronetURLRequestContextAdapter {
~CronetURLRequestContextAdapter(); ~CronetURLRequestContextAdapter();
// Called on main Java thread to initialize URLRequestContext. // Called on main Java thread to initialize URLRequestContext.
void InitRequestContextOnMainThread( void InitRequestContextOnMainThread(JNIEnv* env, jobject jcaller);
const base::Closure& java_init_network_thread);
// Releases all resources for the request context and deletes the object. // Releases all resources for the request context and deletes the object.
// Blocks until network thread is destroyed after running all pending tasks. // Blocks until network thread is destroyed after running all pending tasks.
void Destroy(); void Destroy(JNIEnv* env, jobject jcaller);
// Posts a task that might depend on the context being initialized // Posts a task that might depend on the context being initialized
// to the network thread. // to the network thread.
...@@ -55,9 +57,9 @@ class CronetURLRequestContextAdapter { ...@@ -55,9 +57,9 @@ class CronetURLRequestContextAdapter {
net::URLRequestContext* GetURLRequestContext(); net::URLRequestContext* GetURLRequestContext();
void StartNetLogToFile(const std::string& file_name); void StartNetLogToFile(JNIEnv* env, jobject jcaller, jstring jfile_name);
void StopNetLog(); void StopNetLog(JNIEnv* env, jobject jcaller);
// Default net::LOAD flags used to create requests. // Default net::LOAD flags used to create requests.
int default_load_flags() const { return default_load_flags_; } int default_load_flags() const { return default_load_flags_; }
...@@ -67,9 +69,9 @@ class CronetURLRequestContextAdapter { ...@@ -67,9 +69,9 @@ class CronetURLRequestContextAdapter {
private: private:
// Initializes |context_| on the Network thread. // Initializes |context_| on the Network thread.
void InitializeOnNetworkThread( void InitializeOnNetworkThread(scoped_ptr<URLRequestContextConfig> config,
scoped_ptr<URLRequestContextConfig> config, const base::android::ScopedJavaGlobalRef<
const base::Closure& java_init_network_thread); jobject>& jcronet_url_request_context);
// Runs a task that might depend on the context being initialized. // Runs a task that might depend on the context being initialized.
// This method should only be run on the network thread. // This method should only be run on the network thread.
......
...@@ -14,6 +14,7 @@ import android.util.Log; ...@@ -14,6 +14,7 @@ import android.util.Log;
import org.chromium.base.CalledByNative; import org.chromium.base.CalledByNative;
import org.chromium.base.JNINamespace; import org.chromium.base.JNINamespace;
import org.chromium.base.NativeClassQualifiedName;
import java.util.concurrent.Executor; import java.util.concurrent.Executor;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
...@@ -112,7 +113,7 @@ public class CronetUrlRequestContext extends UrlRequestContext { ...@@ -112,7 +113,7 @@ public class CronetUrlRequestContext extends UrlRequestContext {
if (!haveRequestContextAdapter()) { if (!haveRequestContextAdapter()) {
return; return;
} }
nativeDestroyRequestContextAdapter(mUrlRequestContextAdapter); nativeDestroy(mUrlRequestContextAdapter);
mUrlRequestContextAdapter = 0; mUrlRequestContextAdapter = 0;
} }
} }
...@@ -194,19 +195,21 @@ public class CronetUrlRequestContext extends UrlRequestContext { ...@@ -194,19 +195,21 @@ public class CronetUrlRequestContext extends UrlRequestContext {
} }
// Native methods are implemented in cronet_url_request_context.cc. // Native methods are implemented in cronet_url_request_context.cc.
private native long nativeCreateRequestContextAdapter(Context context, private static native long nativeCreateRequestContextAdapter(
String config); Context context, String config);
private native void nativeDestroyRequestContextAdapter( private static native int nativeSetMinLogLevel(int loggingLevel);
long urlRequestContextAdapter);
private native void nativeStartNetLogToFile( @NativeClassQualifiedName("CronetURLRequestContextAdapter")
long urlRequestContextAdapter, String fileName); private native void nativeDestroy(long nativePtr);
private native void nativeStopNetLog(long urlRequestContextAdapter); @NativeClassQualifiedName("CronetURLRequestContextAdapter")
private native void nativeStartNetLogToFile(long nativePtr,
String fileName);
private native int nativeSetMinLogLevel(int loggingLevel); @NativeClassQualifiedName("CronetURLRequestContextAdapter")
private native void nativeStopNetLog(long nativePtr);
private native void nativeInitRequestContextOnMainThread( @NativeClassQualifiedName("CronetURLRequestContextAdapter")
long urlRequestContextAdapter); private native void nativeInitRequestContextOnMainThread(long nativePtr);
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment