| Index: android_webview/browser/net/aw_url_request_context_getter.cc
|
| diff --git a/android_webview/browser/net/aw_url_request_context_getter.cc b/android_webview/browser/net/aw_url_request_context_getter.cc
|
| index 529bce41dff005777156747d03c51deaa407ff7d..8941452e1cde4617ca983c4b3f798b82d3212e74 100644
|
| --- a/android_webview/browser/net/aw_url_request_context_getter.cc
|
| +++ b/android_webview/browser/net/aw_url_request_context_getter.cc
|
| @@ -16,6 +16,7 @@
|
| #include "android_webview/common/aw_content_client.h"
|
| #include "base/bind.h"
|
| #include "base/command_line.h"
|
| +#include "base/prefs/pref_service.h"
|
| #include "base/strings/string_number_conversions.h"
|
| #include "base/threading/sequenced_worker_pool.h"
|
| #include "base/threading/worker_pool.h"
|
| @@ -31,8 +32,11 @@
|
| #include "net/base/cache_type.h"
|
| #include "net/cookies/cookie_store.h"
|
| #include "net/dns/mapped_host_resolver.h"
|
| +#include "net/http/http_auth_filter.h"
|
| +#include "net/http/http_auth_handler_factory.h"
|
| #include "net/http/http_cache.h"
|
| #include "net/http/http_stream_factory.h"
|
| +#include "net/http/url_security_manager.h"
|
| #include "net/log/net_log.h"
|
| #include "net/proxy/proxy_service.h"
|
| #include "net/socket/next_proto.h"
|
| @@ -51,20 +55,16 @@ namespace android_webview {
|
|
|
| namespace {
|
|
|
| -void ApplyCmdlineOverridesToURLRequestContextBuilder(
|
| - net::URLRequestContextBuilder* builder) {
|
| +void ApplyCmdlineOverridesToHostResolver(
|
| + net::MappedHostResolver* host_resolver) {
|
| const base::CommandLine& command_line =
|
| *base::CommandLine::ForCurrentProcess();
|
| if (command_line.HasSwitch(switches::kHostResolverRules)) {
|
| // If hostname remappings were specified on the command-line, layer these
|
| // rules on top of the real host resolver. This allows forwarding all
|
| // requests through a designated test server.
|
| - scoped_ptr<net::MappedHostResolver> host_resolver(
|
| - new net::MappedHostResolver(
|
| - net::HostResolver::CreateDefaultResolver(NULL)));
|
| host_resolver->SetRulesFromString(
|
| command_line.GetSwitchValueASCII(switches::kHostResolverRules));
|
| - builder->set_host_resolver(host_resolver.Pass());
|
| }
|
| }
|
|
|
| @@ -159,13 +159,19 @@ scoped_ptr<net::URLRequestJobFactory> CreateJobFactory(
|
| } // namespace
|
|
|
| AwURLRequestContextGetter::AwURLRequestContextGetter(
|
| - const base::FilePath& cache_path, net::CookieStore* cookie_store,
|
| - scoped_ptr<net::ProxyConfigService> config_service)
|
| + const base::FilePath& cache_path,
|
| + net::CookieStore* cookie_store,
|
| + scoped_ptr<net::ProxyConfigService> config_service,
|
| + PrefService* user_pref_service)
|
| : cache_path_(cache_path),
|
| net_log_(new net::NetLog()),
|
| proxy_config_service_(config_service.Pass()),
|
| cookie_store_(cookie_store),
|
| - http_user_agent_settings_(new AwHttpUserAgentSettings()) {
|
| + http_user_agent_settings_(new AwHttpUserAgentSettings()),
|
| + auth_android_negotiate_account_type_(user_pref_service->GetString(
|
| + prefs::kAuthAndroidNegotiateAccountType)),
|
| + auth_server_whitelist_(
|
| + user_pref_service->GetString(prefs::kAuthServerWhitelist)) {
|
| // CreateSystemProxyConfigService for Android must be called on main thread.
|
| DCHECK_CURRENTLY_ON(BrowserThread::UI);
|
| }
|
| @@ -215,7 +221,15 @@ void AwURLRequestContextGetter::InitializeURLRequestContext() {
|
| ApplyCmdlineOverridesToNetworkSessionParams(&network_session_params);
|
| builder.set_http_network_session_params(network_session_params);
|
| builder.SetSpdyAndQuicEnabled(true, true);
|
| - ApplyCmdlineOverridesToURLRequestContextBuilder(&builder);
|
| +
|
| + scoped_ptr<net::MappedHostResolver> host_resolver(new net::MappedHostResolver(
|
| + net::HostResolver::CreateDefaultResolver(nullptr)));
|
| + ApplyCmdlineOverridesToHostResolver(host_resolver.get());
|
| + builder.add_http_auth_handler_factory(
|
| + "negotiate",
|
| + CreateNegotiateAuthHandlerFactory(host_resolver.get()).release());
|
| + builder.set_host_resolver(host_resolver.Pass());
|
| +
|
| url_request_context_ = builder.Build().Pass();
|
|
|
| job_factory_ = CreateJobFactory(&protocol_handlers_,
|
| @@ -258,4 +272,32 @@ void AwURLRequestContextGetter::SetKeyOnIO(const std::string& key) {
|
| request_options()->SetKeyOnIO(key);
|
| }
|
|
|
| +scoped_ptr<net::HttpAuthHandlerFactory>
|
| +AwURLRequestContextGetter::CreateNegotiateAuthHandlerFactory(
|
| + net::HostResolver* resolver) {
|
| + DCHECK(resolver);
|
| +
|
| + net::HttpAuthFilterWhitelist* auth_filter_default_credentials = nullptr;
|
| + if (!auth_server_whitelist_.empty()) {
|
| + auth_filter_default_credentials =
|
| + new net::HttpAuthFilterWhitelist(auth_server_whitelist_);
|
| + }
|
| +
|
| + url_security_manager_.reset(net::URLSecurityManager::Create(
|
| + auth_filter_default_credentials, nullptr /*auth_filter_delegate*/));
|
| +
|
| + std::vector<std::string> supported_schemes = {"negotiate"};
|
| + scoped_ptr<net::HttpAuthHandlerFactory> negotiate_factory(
|
| + net::HttpAuthHandlerRegistryFactory::Create(
|
| + supported_schemes,
|
| + url_security_manager_.get(),
|
| + resolver,
|
| + std::string() /* gssapi_library_name - not used on android */,
|
| + auth_android_negotiate_account_type_ ,
|
| + false /* negotiate_disable_cname_lookup - unsupported policy */,
|
| + false /* negotiate_enable_port - unsupported policy */));
|
| +
|
| + return negotiate_factory;
|
| +}
|
| +
|
| } // namespace android_webview
|
|
|