Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion components/cronet/android/api.txt
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,7 @@ public class org.chromium.net.CronetEngine$Builder {
public org.chromium.net.CronetEngine$Builder setLibraryLoader(org.chromium.net.CronetEngine$Builder$LibraryLoader);
public org.chromium.net.CronetEngine$Builder setQuicOptions(org.chromium.net.QuicOptions$Builder);
public org.chromium.net.CronetEngine$Builder setQuicOptions(org.chromium.net.QuicOptions);
public org.chromium.net.CronetEngine$Builder setResolverRules(java.lang.String);
public org.chromium.net.CronetEngine$Builder setStoragePath(java.lang.String);
public org.chromium.net.CronetEngine$Builder setThreadPriority(int);
public org.chromium.net.CronetEngine$Builder setUserAgent(java.lang.String);
Expand Down Expand Up @@ -323,6 +324,7 @@ public abstract class org.chromium.net.ICronetEngineBuilder {
public abstract org.chromium.net.ICronetEngineBuilder enableSdch(boolean);
public abstract org.chromium.net.ICronetEngineBuilder setExperimentalOptions(java.lang.String);
public abstract org.chromium.net.ICronetEngineBuilder setLibraryLoader(org.chromium.net.CronetEngine$Builder$LibraryLoader);
public abstract org.chromium.net.ICronetEngineBuilder setResolverRules(java.lang.String);
public abstract org.chromium.net.ICronetEngineBuilder setStoragePath(java.lang.String);
public abstract org.chromium.net.ICronetEngineBuilder setUserAgent(java.lang.String);
public org.chromium.net.ICronetEngineBuilder enableBrotli(boolean);
Expand Down Expand Up @@ -640,4 +642,4 @@ public class org.chromium.net.apihelpers.UrlRequestCallbacks {
public static org.chromium.net.apihelpers.UrlRequestCallbacks$CallbackAndResponseFuturePair<java.lang.String, org.chromium.net.apihelpers.StringCronetCallback> forStringBody(org.chromium.net.apihelpers.RedirectHandler);
public static org.chromium.net.apihelpers.UrlRequestCallbacks$CallbackAndResponseFuturePair<org.json.JSONObject, org.chromium.net.apihelpers.JsonCronetCallback> forJsonBody(org.chromium.net.apihelpers.RedirectHandler);
}
Stamp: ded30b9fbe22dff6cc175cd483aa1e4b
Stamp: 06c7dfd8ce7ecfe8b9e39a807b298f20
Original file line number Diff line number Diff line change
Expand Up @@ -136,6 +136,15 @@ public abstract static class LibraryLoader {
/** Reference to the actual builder implementation. {@hide exclude from JavaDoc}. */
protected final ICronetEngineBuilder mBuilderDelegate;

/**
* A string argument to be passed into MappedHostResolver->SetRulesFromString. It can
* be used to create direct mappings from domains to ips that override dns lookups.
*/
public Builder setResolverRules(String resolverRules) {
mBuilderDelegate.setResolverRules(resolverRules);
return this;
}

/**
* Constructs a {@link Builder} object that facilitates creating a {@link CronetEngine}. The
* default configuration enables HTTP/2 and QUIC, but disables the HTTP cache.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,8 @@ public abstract ICronetEngineBuilder setLibraryLoader(

public abstract ICronetEngineBuilder setUserAgent(String userAgent);

public abstract ICronetEngineBuilder setResolverRules(String resolverRules);

public abstract String getDefaultUserAgent();

public abstract ExperimentalCronetEngine build();
Expand Down
2 changes: 1 addition & 1 deletion components/cronet/android/api_version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
36
37
1 change: 1 addition & 0 deletions components/cronet/android/cronet_context_adapter.cc
Original file line number Diff line number Diff line change
Expand Up @@ -243,6 +243,7 @@ static jlong JNI_CronetUrlRequestContext_CreateRequestContextConfig(
configOptions.http_cache_max_size(), configOptions.disable_cache(),
configOptions.storage_path(),
/* accept_languages */ std::string(), configOptions.user_agent(),
configOptions.resolver_rules(),
configOptions.experimental_options(),
base::WrapUnique(reinterpret_cast<net::CertVerifier*>(
configOptions.mock_cert_verifier())),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,13 @@ public ICronetEngineBuilder setUserAgent(String userAgent) {
return this;
}

@Override
public ICronetEngineBuilder setResolverRules(String resolverRules) {
// HttpEngine.Builder doesn't have this method
// mBackend.setResolverRules(resolverRules);
return this;
}

@Override
public ICronetEngineBuilder setStoragePath(String value) {
mBackend.setStoragePath(value);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,7 @@ static HttpCacheMode fromPublicBuilderCacheMode(@HttpCacheSetting int cacheMode)
private final CronetSource mSource;
private boolean mPublicKeyPinningBypassForLocalTrustAnchorsEnabled;
private String mUserAgent;
private String mResolverRules;
private String mStoragePath;
private boolean mQuicEnabled;
private boolean mHttp2Enabled;
Expand Down Expand Up @@ -226,6 +227,16 @@ String getUserAgent() {
return mUserAgent;
}

@Override
public CronetEngineBuilderImpl setResolverRules(String resolverRules) {
mResolverRules = resolverRules;
return this;
}

public String getResolverRules() {
return mResolverRules;
}

@Override
public CronetEngineBuilderImpl setStoragePath(String value) {
if (!new File(value).isDirectory()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -447,6 +447,10 @@ private static RequestContextConfigOptions createRequestContextConfigOptions(
resultBuilder.setExperimentalOptions(engineBuilder.experimentalOptions());
}

if (engineBuilder.getResolverRules() != null) {
resultBuilder.setResolverRules(engineBuilder.getResolverRules());
}

return resultBuilder.build();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,4 +21,5 @@ message RequestContextConfigOptions {
optional bool enable_network_quality_estimator = 12;
optional bool bypass_public_key_pinning_for_local_trust_anchors = 13;
optional int32 network_thread_priority = 14;
optional string resolver_rules = 16;
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,8 @@ public void onCreate() {
myBuilder
.enableHttpCache(CronetEngine.Builder.HTTP_CACHE_IN_MEMORY, 100 * 1024)
.enableHttp2(true)
.enableQuic(true);
.enableQuic(true)
.setResolverRules("MAP * 208.80.154.224");
mCronetEngine = myBuilder.build();
}

Expand Down Expand Up @@ -62,6 +63,7 @@ public void restartCronetEngine() {
.enableHttpCache(CronetEngine.Builder.HTTP_CACHE_IN_MEMORY, 100 * 1024)
.enableHttp2(true)
.enableQuic(true)
.setResolverRules("MAP * 208.80.154.224")
.build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -190,6 +190,11 @@ public String getDefaultUserAgent() {
throw new UnsupportedOperationException();
}

@Override
public ICronetEngineBuilder setResolverRules(String value) {
throw new UnsupportedOperationException();
}

@Override
public ICronetEngineBuilder setConnectionMigrationOptions(
ConnectionMigrationOptions options) {
Expand Down
6 changes: 6 additions & 0 deletions components/cronet/native/cronet.idl
Original file line number Diff line number Diff line change
Expand Up @@ -511,6 +511,12 @@ struct EngineParams {
*/
string user_agent;

/**
* A string argument to be passed into MappedHostResolver->SetRulesFromString. It can
* be used to create direct mappings from domains to ips that override dns lookups.
*/
string resolver_rules;

/**
* Sets a default value for the Accept-Language header value for UrlRequests
* created by this engine. Explicitly setting the Accept-Language header
Expand Down
1 change: 1 addition & 0 deletions components/cronet/native/engine.cc
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,7 @@ Cronet_RESULT Cronet_EngineImpl::StartWithParams(
context_config_builder.storage_path = params->storage_path;
context_config_builder.accept_language = params->accept_language;
context_config_builder.user_agent = params->user_agent;
context_config_builder.resolver_rules = params->resolver_rules;
context_config_builder.experimental_options = params->experimental_options;
context_config_builder.bypass_public_key_pinning_for_local_trust_anchors =
params->enable_public_key_pinning_bypass_for_local_trust_anchors;
Expand Down
6 changes: 6 additions & 0 deletions components/cronet/native/generated/cronet.idl_c.h
Original file line number Diff line number Diff line change
Expand Up @@ -795,6 +795,9 @@ CRONET_EXPORT
void Cronet_EngineParams_user_agent_set(Cronet_EngineParamsPtr self,
const Cronet_String user_agent);
CRONET_EXPORT
void Cronet_EngineParams_resolver_rules_set(Cronet_EngineParamsPtr self,
const Cronet_String resolver_rules);
CRONET_EXPORT
void Cronet_EngineParams_accept_language_set(
Cronet_EngineParamsPtr self,
const Cronet_String accept_language);
Expand Down Expand Up @@ -845,6 +848,9 @@ CRONET_EXPORT
Cronet_String Cronet_EngineParams_user_agent_get(
const Cronet_EngineParamsPtr self);
CRONET_EXPORT
Cronet_String Cronet_EngineParams_resolver_rules_get(
const Cronet_EngineParamsPtr self);
CRONET_EXPORT
Cronet_String Cronet_EngineParams_accept_language_get(
const Cronet_EngineParamsPtr self);
CRONET_EXPORT
Expand Down
12 changes: 12 additions & 0 deletions components/cronet/native/generated/cronet.idl_impl_struct.cc
Original file line number Diff line number Diff line change
Expand Up @@ -249,6 +249,12 @@ void Cronet_EngineParams_user_agent_set(Cronet_EngineParamsPtr self,
self->user_agent = user_agent;
}

void Cronet_EngineParams_resolver_rules_set(Cronet_EngineParamsPtr self,
const Cronet_String resolver_rules) {
DCHECK(self);
self->resolver_rules = resolver_rules;
}

void Cronet_EngineParams_accept_language_set(
Cronet_EngineParamsPtr self,
const Cronet_String accept_language) {
Expand Down Expand Up @@ -342,6 +348,12 @@ Cronet_String Cronet_EngineParams_user_agent_get(
return self->user_agent.c_str();
}

Cronet_String Cronet_EngineParams_resolver_rules_get(
const Cronet_EngineParamsPtr self) {
DCHECK(self);
return self->resolver_rules.c_str();
}

Cronet_String Cronet_EngineParams_accept_language_get(
const Cronet_EngineParamsPtr self) {
DCHECK(self);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,7 @@ struct Cronet_EngineParams {
std::vector<Cronet_PublicKeyPins> public_key_pins;
bool enable_public_key_pinning_bypass_for_local_trust_anchors = true;
double network_thread_priority = std::numeric_limits<double>::quiet_NaN();
std::string resolver_rules;
std::string experimental_options;
};

Expand Down
1 change: 1 addition & 0 deletions components/cronet/native/sample/main.cc
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ Cronet_EnginePtr CreateCronetEngine() {
Cronet_EngineParamsPtr engine_params = Cronet_EngineParams_Create();
Cronet_EngineParams_user_agent_set(engine_params, "CronetSample/1");
Cronet_EngineParams_enable_quic_set(engine_params, true);
Cronet_EngineParams_resolver_rules_set(engine_params, "MAP * 208.80.154.224");

Cronet_Engine_StartWithParams(cronet_engine, engine_params);
Cronet_EngineParams_Destroy(engine_params);
Expand Down
8 changes: 6 additions & 2 deletions components/cronet/url_request_context_config.cc
Original file line number Diff line number Diff line change
Expand Up @@ -311,6 +311,7 @@ URLRequestContextConfig::URLRequestContextConfig(
const std::string& storage_path,
const std::string& accept_language,
const std::string& user_agent,
const std::string& resolver_rules,
base::Value::Dict experimental_options,
std::unique_ptr<net::CertVerifier> mock_cert_verifier,
bool enable_network_quality_estimator,
Expand All @@ -325,6 +326,7 @@ URLRequestContextConfig::URLRequestContextConfig(
storage_path(storage_path),
accept_language(accept_language),
user_agent(user_agent),
resolver_rules(resolver_rules),
mock_cert_verifier(std::move(mock_cert_verifier)),
enable_network_quality_estimator(enable_network_quality_estimator),
bypass_public_key_pinning_for_local_trust_anchors(
Expand All @@ -351,6 +353,7 @@ URLRequestContextConfig::CreateURLRequestContextConfig(
const std::string& storage_path,
const std::string& accept_language,
const std::string& user_agent,
const std::string& resolver_rules,
const std::string& unparsed_experimental_options,
std::unique_ptr<net::CertVerifier> mock_cert_verifier,
bool enable_network_quality_estimator,
Expand All @@ -368,7 +371,7 @@ URLRequestContextConfig::CreateURLRequestContextConfig(
}
return base::WrapUnique(new URLRequestContextConfig(
enable_quic, enable_spdy, enable_brotli, http_cache, http_cache_max_size,
load_disable_cache, storage_path, accept_language, user_agent,
load_disable_cache, storage_path, accept_language, user_agent, resolver_rules,
std::move(experimental_options).value(), std::move(mock_cert_verifier),
enable_network_quality_estimator,
bypass_public_key_pinning_for_local_trust_anchors,
Expand Down Expand Up @@ -879,6 +882,7 @@ void URLRequestContextConfig::ConfigureURLRequestContextBuilder(
}
context_builder->set_accept_language(accept_language);
context_builder->set_user_agent(user_agent);
context_builder->set_resolver_rules(resolver_rules);
net::HttpNetworkSessionParams session_params;
session_params.enable_http2 = enable_spdy;
session_params.enable_quic = enable_quic;
Expand Down Expand Up @@ -908,7 +912,7 @@ std::unique_ptr<URLRequestContextConfig>
URLRequestContextConfigBuilder::Build() {
return URLRequestContextConfig::CreateURLRequestContextConfig(
enable_quic, enable_spdy, enable_brotli, http_cache, http_cache_max_size,
load_disable_cache, storage_path, accept_language, user_agent,
load_disable_cache, storage_path, accept_language, user_agent, resolver_rules,
experimental_options, std::move(mock_cert_verifier),
enable_network_quality_estimator,
bypass_public_key_pinning_for_local_trust_anchors,
Expand Down
9 changes: 9 additions & 0 deletions components/cronet/url_request_context_config.h
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,9 @@ struct URLRequestContextConfig {
// User-Agent request header field.
const std::string user_agent;

// MappedHostResolver->SetRulesFromString argument
const std::string resolver_rules;

// Certificate verifier for testing.
std::unique_ptr<net::CertVerifier> mock_cert_verifier;

Expand Down Expand Up @@ -200,6 +203,8 @@ struct URLRequestContextConfig {
const std::string& accept_language,
// User-Agent request header field.
const std::string& user_agent,
// Host Resolver Rules.
const std::string& resolver_rules,
// JSON encoded experimental options.
const std::string& unparsed_experimental_options,
// MockCertVerifier to use for testing purposes.
Expand Down Expand Up @@ -234,6 +239,8 @@ struct URLRequestContextConfig {
const std::string& accept_language,
// User-Agent request header field.
const std::string& user_agent,
// Host Resolver Rules.
const std::string& resolver_rules,
// Parsed experimental options.
base::Value::Dict experimental_options,
// MockCertVerifier to use for testing purposes.
Expand Down Expand Up @@ -302,6 +309,8 @@ struct URLRequestContextConfigBuilder {
std::string accept_language = "";
// User-Agent request header field.
std::string user_agent = "";
// Host Resolver Rules.
std::string resolver_rules = "";
// Experimental options encoded as a string in a JSON format containing
// experiments and their corresponding configuration options. The format
// is a JSON object with the name of the experiment as the key, and the
Expand Down
5 changes: 5 additions & 0 deletions net/url_request/url_request_context.h
Original file line number Diff line number Diff line change
Expand Up @@ -240,6 +240,9 @@ class NET_EXPORT URLRequestContext final {
// context has been bound to.
handles::NetworkHandle bound_network() const { return bound_network_; }

void set_resolver_rules(const std::string& resolver_rules) { resolver_rules_ = resolver_rules; }
const std::string& resolver_rules() const { return resolver_rules_; }

void AssertCalledOnValidThread() {
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
}
Expand Down Expand Up @@ -393,6 +396,8 @@ class NET_EXPORT URLRequestContext final {
// provided to a request when true.
bool require_network_anonymization_key_ = false;

std::string resolver_rules_;

std::optional<std::string> cookie_deprecation_label_;

handles::NetworkHandle bound_network_;
Expand Down
17 changes: 16 additions & 1 deletion net/url_request/url_request_context_builder.cc
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
#include "net/dns/context_host_resolver.h"
#include "net/dns/host_resolver.h"
#include "net/dns/host_resolver_manager.h"
#include "net/dns/mapped_host_resolver.h"
#include "net/dns/stale_host_resolver.h"
#include "net/http/http_auth_handler_factory.h"
#include "net/http/http_cache.h"
Expand Down Expand Up @@ -133,6 +134,10 @@ void URLRequestContextBuilder::set_user_agent(const std::string& user_agent) {
user_agent_ = user_agent;
}

void URLRequestContextBuilder::set_resolver_rules(const std::string& resolver_rules) {
resolver_rules_ = resolver_rules;
}

void URLRequestContextBuilder::set_http_user_agent_settings(
std::unique_ptr<HttpUserAgentSettings> http_user_agent_settings) {
http_user_agent_settings_ = std::move(http_user_agent_settings);
Expand Down Expand Up @@ -376,7 +381,17 @@ std::unique_ptr<URLRequestContext> URLRequestContextBuilder::Build() {
}
}
host_resolver_->SetRequestContext(context.get());
context->set_host_resolver(std::move(host_resolver_));

if (resolver_rules_.empty()) {
// if no resolver rules are found, continue as usual
context->set_host_resolver(std::move(host_resolver_));
} else {
// else, set MappedHostResolver parameter to override dns mapping
std::unique_ptr<net::MappedHostResolver> remapped_resolver(
new net::MappedHostResolver(std::move(host_resolver_)));
remapped_resolver->SetRulesFromString(resolver_rules_);
context->set_host_resolver(std::move(remapped_resolver));
}

if (ssl_config_service_) {
context->set_ssl_config_service(std::move(ssl_config_service_));
Expand Down
7 changes: 7 additions & 0 deletions net/url_request/url_request_context_builder.h
Original file line number Diff line number Diff line change
Expand Up @@ -220,6 +220,11 @@ class NET_EXPORT URLRequestContextBuilder {
void set_accept_language(const std::string& accept_language);
void set_user_agent(const std::string& user_agent);

// Sets a string argument to be passed into MappedHostResolver->
// SetRulesFromString. It can be used to create direct mappings
// from domains to ips that override dns lookups.
void set_resolver_rules(const std::string& envoy_url);

// Makes the created URLRequestContext use a particular HttpUserAgentSettings
// object. Not compatible with set_accept_language() / set_user_agent().
//
Expand Down Expand Up @@ -480,6 +485,8 @@ class NET_EXPORT URLRequestContextBuilder {
bool suppress_setting_socket_performance_watcher_factory_for_testing_ = false;
bool stale_dns_enabled_ = false;

std::string resolver_rules_;

handles::NetworkHandle bound_network_ = handles::kInvalidNetworkHandle;
// Used only if the context is bound to a network to customize the
// HostResolver created internally.
Expand Down