Skip to content

Commit

Permalink
[Cronet] Extract common CronetURLRequestContext from Android CronetUR…
Browse files Browse the repository at this point in the history
…LRequestContextAdapter.

Note:
- Patchset 1 copies android/cronet_url_request_context_adapter.* into cronet_url_request_context.*
- android/cronet_url_request_context_adapter.* use cronet_url_request_context.*
- cronet_global_state.h defines cross-platform API used to initialize and maintain Cronet state shared by multiple engines.

Bug: 786559
Cq-Include-Trybots: master.tryserver.chromium.android:android_cronet_tester
Change-Id: I1cbe2162584745580e54bd0838a4a2303d7e6970
Reviewed-on: https://chromium-review.googlesource.com/840702
Commit-Queue: Misha Efimov <mef@chromium.org>
Reviewed-by: John Abd-El-Malek <jam@chromium.org>
Reviewed-by: Paul Jensen <pauljensen@chromium.org>
Cr-Commit-Position: refs/heads/master@{#528628}
  • Loading branch information
Misha Efimov authored and Commit Bot committed Jan 11, 2018
1 parent 72a9788 commit 1770a1b
Show file tree
Hide file tree
Showing 11 changed files with 1,255 additions and 751 deletions.
4 changes: 2 additions & 2 deletions base/threading/thread_restrictions.h
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ class TextInputClientMac;
} // namespace content
namespace cronet {
class CronetPrefsManager;
class CronetURLRequestContextAdapter;
class CronetURLRequestContext;
} // namespace cronet
namespace dbus {
class Bus;
Expand Down Expand Up @@ -203,7 +203,7 @@ class BASE_EXPORT ScopedAllowBlocking {
// in unit tests to avoid the friend requirement.
FRIEND_TEST_ALL_PREFIXES(ThreadRestrictionsTest, ScopedAllowBlocking);
friend class cronet::CronetPrefsManager;
friend class cronet::CronetURLRequestContextAdapter;
friend class cronet::CronetURLRequestContext;
friend class resource_coordinator::TabManagerDelegate; // crbug.com/778703
friend class ScopedAllowBlockingForTesting;

Expand Down
65 changes: 65 additions & 0 deletions components/cronet/BUILD.gn
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
# Copyright 2017 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.

import("//build/util/process_version.gni")
import("//build/util/version.gni")
import("//testing/test.gni")

process_version("cronet_version_header") {
template_file = "//components/cronet/version.h.in"
sources = [
"//chrome/VERSION",
]
output = "$target_gen_dir/version.h"
extra_args = [
"-e",
"VERSION_FULL=\"%s.%s.%s.%s\" % (MAJOR,MINOR,BUILD,PATCH)",
]
}

# Cronet common implementation.
source_set("cronet_common") {
sources = [
"cronet_global_state.h",
"cronet_prefs_manager.cc",
"cronet_prefs_manager.h",
"cronet_url_request_context.cc",
"cronet_url_request_context.h",
"histogram_manager.cc",
"histogram_manager.h",
"host_cache_persistence_manager.cc",
"host_cache_persistence_manager.h",
"stale_host_resolver.cc",
"stale_host_resolver.h",
"url_request_context_config.cc",
"url_request_context_config.h",
]
deps = [
":cronet_version_header",
"//base",
"//components/metrics:metrics",
"//components/prefs:prefs",
"//net",
"//third_party/metrics_proto",
]
}

# Unit tests for Cronet common implementation.
source_set("cronet_common_unittests") {
testonly = true

deps = [
":cronet_common",
"//components/prefs:test_support",
"//net:test_support",
]

sources = [
"histogram_manager_unittest.cc",
"host_cache_persistence_manager_unittest.cc",
"run_all_unittests.cc",
"stale_host_resolver_unittest.cc",
"url_request_context_config_unittest.cc",
]
}
30 changes: 5 additions & 25 deletions components/cronet/android/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -139,14 +139,6 @@ zip("cronet_impl_version_srcjar") {
}

_cronet_version_header_include_dir = "$target_gen_dir/cronet_version_header"
process_version("cronet_version_header") {
template_file = "//components/cronet/version.h.in"
output = "$_cronet_version_header_include_dir/components/cronet/version.h"
extra_args = [
"-e",
"VERSION_FULL=\"$chrome_version_full\"",
]
}

proto_library("cronet_android_cert_proto") {
visibility = [ "//components/cronet/android/*" ]
Expand All @@ -167,9 +159,10 @@ source_set("cronet_static") {
":cronet_android_cert_proto",
":cronet_jni_headers",
":cronet_jni_registration",
":cronet_version_header",
"//base",
"//base/third_party/dynamic_annotations",
"//components/cronet:cronet_common",
"//components/cronet:cronet_version_header",
"//components/cronet/native:cronet_native_impl",
"//components/metrics",
"//components/prefs",
Expand Down Expand Up @@ -198,16 +191,6 @@ source_set("cronet_static") {
"//components/cronet/android/metrics_util.h",
"//components/cronet/android/url_request_error.cc",
"//components/cronet/android/url_request_error.h",
"//components/cronet/cronet_prefs_manager.cc",
"//components/cronet/cronet_prefs_manager.h",
"//components/cronet/histogram_manager.cc",
"//components/cronet/histogram_manager.h",
"//components/cronet/host_cache_persistence_manager.cc",
"//components/cronet/host_cache_persistence_manager.h",
"//components/cronet/stale_host_resolver.cc",
"//components/cronet/stale_host_resolver.h",
"//components/cronet/url_request_context_config.cc",
"//components/cronet/url_request_context_config.h",
]

include_dirs = [ _cronet_version_header_include_dir ]
Expand Down Expand Up @@ -492,6 +475,7 @@ shared_library("cronet_tests") {
# Cronet header files to facilitate accessing these fields.
"//components/cronet/android/cronet_url_request_adapter.h",
"//components/cronet/android/cronet_url_request_context_adapter.h",
"//components/cronet/cronet_url_request_context.h",
"//components/cronet/url_request_context_config.h",
"test/cronet_test_jni.cc",
"test/cronet_test_util.cc",
Expand All @@ -510,10 +494,10 @@ shared_library("cronet_tests") {
deps = [
":cronet",
":cronet_tests_jni_headers",
":cronet_version_header",
"//base",
"//base:i18n",
"//base/test:test_support",
"//components/cronet:cronet_version_header",
"//components/cronet/native:cronet_native_tests",
"//components/prefs",
"//net",
Expand Down Expand Up @@ -855,18 +839,14 @@ android_apk("cronet_perf_test_apk") {
test("cronet_unittests") {
sources = [
"//components/cronet/android/cert/cert_verifier_cache_serializer_unittest.cc",
"//components/cronet/histogram_manager_unittest.cc",
"//components/cronet/host_cache_persistence_manager_unittest.cc",
"//components/cronet/run_all_unittests.cc",
"//components/cronet/stale_host_resolver_unittest.cc",
"//components/cronet/url_request_context_config_unittest.cc",
]

deps = [
":cronet_android_cert_proto",
":cronet_static",
"//base",
"//base/test:test_support",
"//components/cronet:cronet_common_unittests",
"//components/cronet/native:cronet_native_unittests",
"//components/metrics",
"//components/prefs:test_support",
Expand Down
31 changes: 31 additions & 0 deletions components/cronet/android/cronet_library_loader.cc
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@
#include "components/cronet/android/cronet_library_loader.h"

#include <jni.h>
#include <memory>
#include <string>
#include <utility>
#include <vector>

#include "base/android/base_jni_onload.h"
Expand All @@ -19,10 +22,13 @@
#include "base/message_loop/message_loop.h"
#include "base/task_scheduler/task_scheduler.h"
#include "components/cronet/android/cronet_jni_registration.h"
#include "components/cronet/cronet_global_state.h"
#include "components/cronet/version.h"
#include "jni/CronetLibraryLoader_jni.h"
#include "net/android/network_change_notifier_factory_android.h"
#include "net/base/network_change_notifier.h"
#include "net/proxy/proxy_config_service_android.h"
#include "net/proxy/proxy_service.h"
#include "url/url_features.h"
#include "url/url_util.h"

Expand Down Expand Up @@ -104,4 +110,29 @@ ScopedJavaLocalRef<jstring> JNI_CronetLibraryLoader_GetCronetVersion(
return base::android::ConvertUTF8ToJavaString(env, CRONET_VERSION);
}

std::unique_ptr<net::ProxyConfigService> CreateProxyConfigService(
const scoped_refptr<base::SequencedTaskRunner>& io_task_runner) {
std::unique_ptr<net::ProxyConfigService> service =
net::ProxyService::CreateSystemProxyConfigService(io_task_runner);
// If a PAC URL is present, ignore it and use the address and port of
// Android system's local HTTP proxy server. See: crbug.com/432539.
// TODO(csharrison) Architect the wrapper better so we don't need to cast for
// android ProxyConfigServices.
net::ProxyConfigServiceAndroid* android_proxy_config_service =
static_cast<net::ProxyConfigServiceAndroid*>(service.get());
android_proxy_config_service->set_exclude_pac_url(true);
return service;
}

// Creates a proxy service appropriate for this platform.
std::unique_ptr<net::ProxyService> CreateProxyService(
std::unique_ptr<net::ProxyConfigService> proxy_config_service,
net::NetLog* net_log) {
// Android provides a local HTTP proxy server that handles proxying when a PAC
// URL is present. Create a proxy service without a resolver and rely on this
// local HTTP proxy. See: crbug.com/432539.
return net::ProxyService::CreateWithoutProxyResolver(
std::move(proxy_config_service), net_log);
}

} // namespace cronet
4 changes: 0 additions & 4 deletions components/cronet/android/cronet_library_loader.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,6 @@ namespace cronet {
jint CronetOnLoad(JavaVM* vm, void* reserved);
void CronetOnUnLoad(JavaVM* jvm, void* reserved);

// Returns true when running on initialization thread.
// Only callable after initialization thread is started.
bool OnInitThread();

} // namespace cronet

#endif // COMPONENTS_CRONET_ANDROID_CRONET_LIBRARY_LOADER_H_
Loading

0 comments on commit 1770a1b

Please sign in to comment.