| Index: components/cronet/android/test/mock_url_request_job_factory.cc
|
| diff --git a/components/cronet/android/test/mock_url_request_job_factory.cc b/components/cronet/android/test/mock_url_request_job_factory.cc
|
| index 092df0ae1fd64c8633cf355bab57a6f7ed81d1c0..1fa0eb48e0dae2de8fc53b8a6986fe7aa6a2a473 100644
|
| --- a/components/cronet/android/test/mock_url_request_job_factory.cc
|
| +++ b/components/cronet/android/test/mock_url_request_job_factory.cc
|
| @@ -6,11 +6,15 @@
|
|
|
| #include "base/android/jni_android.h"
|
| #include "base/android/jni_string.h"
|
| +#include "base/memory/ptr_util.h"
|
| #include "jni/MockUrlRequestJobFactory_jni.h"
|
| #include "net/test/url_request/ssl_certificate_error_job.h"
|
| #include "net/test/url_request/url_request_failed_job.h"
|
| #include "net/test/url_request/url_request_hanging_read_job.h"
|
| #include "net/test/url_request/url_request_mock_data_job.h"
|
| +#include "net/url_request/url_request_context.h"
|
| +#include "net/url_request/url_request_filter.h"
|
| +#include "net/url_request/url_request_intercepting_job_factory.h"
|
| #include "url/gurl.h"
|
|
|
| using base::android::JavaParamRef;
|
| @@ -18,6 +22,12 @@ using base::android::ScopedJavaLocalRef;
|
|
|
| namespace cronet {
|
|
|
| +// URLRequestJobFactory previously used in URLRequestContext.
|
| +static const net::URLRequestJobFactory* old_job_factory;
|
| +// URLRequestJobFactory inserted during tests to intercept URLRequests with
|
| +// libcronet's URLRequestFilter.
|
| +static std::unique_ptr<net::URLRequestJobFactory> new_job_factory;
|
| +
|
| void AddUrlInterceptors(JNIEnv* env, const JavaParamRef<jclass>& jcaller) {
|
| net::URLRequestMockDataJob::AddUrlHandler();
|
| net::URLRequestFailedJob::AddUrlHandler();
|
| @@ -25,6 +35,33 @@ void AddUrlInterceptors(JNIEnv* env, const JavaParamRef<jclass>& jcaller) {
|
| net::SSLCertificateErrorJob::AddUrlHandler();
|
| }
|
|
|
| +// URL interceptors are registered with the URLRequestFilter in
|
| +// libcronet_tests.so. However tests are run on libcronet.so. Use the
|
| +// URLRequestFilter in libcronet_tests.so with the URLRequestContext in
|
| +// libcronet.so by installing a URLRequestInterceptingJobFactory
|
| +// that calls into libcronet_tests.so's URLRequestFilter.
|
| +void AddUrlInterceptorJobFactory(JNIEnv* env,
|
| + const JavaParamRef<jclass>& jcaller,
|
| + jlong jrequestContext) {
|
| + // Intercept |request_context| job creation using URLRequestFilter
|
| + net::URLRequestContext* request_context =
|
| + reinterpret_cast<net::URLRequestContext*>(jrequestContext);
|
| + old_job_factory = request_context->job_factory();
|
| + new_job_factory.reset(new net::URLRequestInterceptingJobFactory(
|
| + const_cast<net::URLRequestJobFactory*>(old_job_factory),
|
| + net::URLRequestFilter::GetInstance()));
|
| + request_context->set_job_factory(new_job_factory.get());
|
| +}
|
| +
|
| +// Put back the old URLRequestJobFactory into the URLRequestContext.
|
| +void RemoveUrlInterceptorJobFactory(JNIEnv* env,
|
| + const JavaParamRef<jclass>& jcaller,
|
| + jlong jrequestContext) {
|
| + reinterpret_cast<net::URLRequestContext*>(jrequestContext)
|
| + ->set_job_factory(old_job_factory);
|
| + new_job_factory.reset();
|
| +}
|
| +
|
| ScopedJavaLocalRef<jstring> GetMockUrlWithFailure(
|
| JNIEnv* jenv,
|
| const JavaParamRef<jclass>& jcaller,
|
|
|