Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(211)

Unified Diff: components/cronet/android/test/mock_url_request_job_factory.cc

Issue 2406273002: [Cronet] Test the libcronet that's shipped, not libcronet_test (Closed)
Patch Set: fix perf test Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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,

Powered by Google App Engine
This is Rietveld 408576698