Commit c8be452f authored by Iris Uy's avatar Iris Uy Committed by Commit Bot

Add a switch for the AuthServerWhitelist for headless.

This adds a switch so that an AuthServerWhitelist can be set in headless
mode which enables Negotiate authentication for the whitelisted URLs.
The switch is added to the HttpAuthPreferences for the HttpAuthHandlerFactory,
which is set in the URLRequestContext.

Bug: 741872
Change-Id: Iaeaefbf58ff21351b9830309faf4f017c14e7b17
Reviewed-on: https://chromium-review.googlesource.com/828321Reviewed-by: default avatarDavid Vallet <dvallet@chromium.org>
Commit-Queue: Iris Uy <irisu@chromium.org>
Cr-Commit-Position: refs/heads/master@{#524300}
parent efa2fd96
......@@ -109,5 +109,8 @@ const char kVirtualTimeBudget[] = "virtual-time-budget";
// Sets the initial window size. Provided as string in the format "800,600".
const char kWindowSize[] = "window-size";
// Whitelist for Negotitate Auth servers.
const char kAuthServerWhitelist[] = "auth-server-whitelist";
} // namespace switches
} // namespace headless
......@@ -32,6 +32,7 @@ extern const char kUserAgent[];
extern const char kUserDataDir[];
extern const char kVirtualTimeBudget[];
extern const char kWindowSize[];
extern const char kAuthServerWhitelist[];
// Switches which are replicated from content.
using ::switches::kHostResolverRules;
......
......@@ -20,6 +20,9 @@
#include "headless/lib/browser/headless_network_delegate.h"
#include "net/cookies/cookie_store.h"
#include "net/dns/mapped_host_resolver.h"
#include "net/http/http_auth_handler_factory.h"
#include "net/http/http_auth_preferences.h"
#include "net/http/http_auth_scheme.h"
#include "net/http/http_transaction_factory.h"
#include "net/http/http_util.h"
#include "net/proxy/proxy_service.h"
......@@ -149,15 +152,27 @@ HeadlessURLRequestContextGetter::GetURLRequestContext() {
std::make_unique<HeadlessNetworkDelegate>(headless_browser_context_));
}
std::unique_ptr<net::HostResolver> host_resolver(
net::HostResolver::CreateDefaultResolver(net_log_));
if (!host_resolver_rules_.empty()) {
std::unique_ptr<net::HostResolver> host_resolver(
net::HostResolver::CreateDefaultResolver(net_log_));
std::unique_ptr<net::MappedHostResolver> mapped_host_resolver(
new net::MappedHostResolver(std::move(host_resolver)));
mapped_host_resolver->SetRulesFromString(host_resolver_rules_);
builder.set_host_resolver(std::move(mapped_host_resolver));
host_resolver = std::move(mapped_host_resolver);
}
net::HttpAuthPreferences* prefs(new net::HttpAuthPreferences());
base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
prefs->SetServerWhitelist(
command_line->GetSwitchValueASCII(switches::kAuthServerWhitelist));
std::unique_ptr<net::HttpAuthHandlerRegistryFactory> factory =
net::HttpAuthHandlerRegistryFactory::CreateDefault(host_resolver.get());
factory->SetHttpAuthPreferences(net::kNegotiateAuthScheme,
std::move(prefs));
builder.SetHttpAuthHandlerFactory(std::move(factory));
builder.set_host_resolver(std::move(host_resolver));
// Extra headers are required for network emulation and are removed in
// DevToolsNetworkTransaction. If a protocol handler is set for http or
// https, then it is likely that the HttpTransactionFactoryCallback will
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment