Set "User-Agent" and "Accept-Language" headers for requests sent using CefURLRequest (issue #1125).

git-svn-id: https://chromiumembedded.googlecode.com/svn/trunk@1502 5089003a-bbd8-11dd-ad1f-f1f9622dbc98
This commit is contained in:
Marshall Greenblatt 2013-10-30 17:42:05 +00:00
parent 78cfa155c6
commit 601c2b0ee9
3 changed files with 51 additions and 5 deletions

View File

@ -25,3 +25,4 @@ Brian Power <powerbf.it@gmail.com>
Corey Lucier <clucier@adobe.com>
Mihai Tica <mitica@adobe.com>
Czarek Tomczak <czarek.tomczak@gmail.com>
Felix Bruns <felixbruns@spotify.com>

View File

@ -29,6 +29,7 @@
#include "chrome/browser/net/proxy_service_factory.h"
#include "content/browser/net/sqlite_persistent_cookie_store.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/common/content_client.h"
#include "content/public/common/content_switches.h"
#include "content/public/common/url_constants.h"
#include "net/cert/cert_verifier.h"
@ -38,12 +39,13 @@
#include "net/http/http_auth_handler_factory.h"
#include "net/http/http_cache.h"
#include "net/http/http_server_properties_impl.h"
#include "net/http/http_util.h"
#include "net/http/transport_security_state.h"
#include "net/proxy/proxy_service.h"
#include "net/ssl/default_server_bound_cert_store.h"
#include "net/ssl/server_bound_cert_service.h"
#include "net/ssl/ssl_config_service_defaults.h"
#include "net/url_request/static_http_user_agent_settings.h"
#include "net/url_request/http_user_agent_settings.h"
#include "net/url_request/url_request.h"
#include "net/url_request/url_request_context.h"
#include "net/url_request/url_request_context_storage.h"
@ -56,6 +58,42 @@ using content::BrowserThread;
#pragma comment(lib, "winhttp.lib")
#endif
namespace {
// An implementation of |HttpUserAgentSettings| that provides a static
// HTTP Accept-Language header value and uses |content::GetUserAgent|
// to provide the HTTP User-Agent header value.
class CefHttpUserAgentSettings : public net::HttpUserAgentSettings {
public:
explicit CefHttpUserAgentSettings(const std::string& raw_language_list)
: http_accept_language_(net::HttpUtil::GenerateAcceptLanguageHeader(
raw_language_list)) {
CEF_REQUIRE_IOT();
}
virtual ~CefHttpUserAgentSettings() {
CEF_REQUIRE_IOT();
}
// net::HttpUserAgentSettings implementation
virtual std::string GetAcceptLanguage() const OVERRIDE {
CEF_REQUIRE_IOT();
return http_accept_language_;
}
virtual std::string GetUserAgent(const GURL& url) const OVERRIDE {
CEF_REQUIRE_IOT();
return content::GetUserAgent(url);
}
private:
const std::string http_accept_language_;
DISALLOW_COPY_AND_ASSIGN(CefHttpUserAgentSettings);
};
} // namespace
CefURLRequestContextGetter::CefURLRequestContextGetter(
base::MessageLoop* io_loop,
base::MessageLoop* file_loop,
@ -101,7 +139,7 @@ net::URLRequestContext* CefURLRequestContextGetter::GetURLRequestContext() {
new net::DefaultServerBoundCertStore(NULL),
base::WorkerPool::GetTaskRunner(true)));
storage_->set_http_user_agent_settings(
new net::StaticHttpUserAgentSettings("en-us,en", EmptyString()));
new CefHttpUserAgentSettings("en-us,en"));
storage_->set_host_resolver(net::HostResolver::CreateDefaultResolver(NULL));
storage_->set_cert_verifier(net::CertVerifier::CreateDefault());

View File

@ -189,13 +189,20 @@ class RequestSchemeHandler : public CefResourceHandler {
settings_.response_data.clear();
CefRequest::HeaderMap headerMap;
CefRequest::HeaderMap::iterator headerIter;
request->GetHeaderMap(headerMap);
// Check if the default headers were sent.
headerIter = headerMap.find("User-Agent");
EXPECT_TRUE(headerIter != headerMap.end() && !headerIter->second.empty());
headerIter = headerMap.find("Accept-Language");
EXPECT_TRUE(headerIter != headerMap.end() && !headerIter->second.empty());
// Check if the request cookie was sent.
bool has_send_cookie = false;
CefRequest::HeaderMap::iterator iter = headerMap.find("Cookie");
if (iter != headerMap.end()) {
std::string cookie = iter->second;
headerIter = headerMap.find("Cookie");
if (headerIter != headerMap.end()) {
std::string cookie = headerIter->second;
if (cookie.find(kRequestSendCookieName) != std::string::npos)
has_send_cookie = true;
}