Commit 1a319783 authored by Maks Orlovich's avatar Maks Orlovich Committed by Commit Bot

ChromeHttpUserAgentSettings: change into chrome_accept_language_settings

... Since there is no longer need for it to implement
HttpUserAgentSettings anymore, just to provide some functions related to
the language pref.

Change-Id: I5afffca7f918e395df874ebddbffa970f2320d5f
Reviewed-on: https://chromium-review.googlesource.com/965936
Commit-Queue: Maks Orlovich <morlovich@chromium.org>
Reviewed-by: default avatarMatt Menke <mmenke@chromium.org>
Cr-Commit-Position: refs/heads/master@{#543750}
parent 44bda444
......@@ -730,11 +730,11 @@ jumbo_split_static_library("browser") {
"mod_pagespeed/mod_pagespeed_metrics.cc",
"mod_pagespeed/mod_pagespeed_metrics.h",
"native_window_notification_source.h",
"net/chrome_accept_language_settings.cc",
"net/chrome_accept_language_settings.h",
"net/chrome_cookie_notification_details.h",
"net/chrome_extensions_network_delegate.cc",
"net/chrome_extensions_network_delegate.h",
"net/chrome_http_user_agent_settings.cc",
"net/chrome_http_user_agent_settings.h",
"net/chrome_mojo_proxy_resolver_factory.cc",
"net/chrome_mojo_proxy_resolver_factory.h",
"net/chrome_net_log_helper.cc",
......
......@@ -2,20 +2,19 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/net/chrome_http_user_agent_settings.h"
#include "chrome/browser/net/chrome_accept_language_settings.h"
#include <unordered_set>
#include "base/feature_list.h"
#include "base/strings/string_piece.h"
#include "base/strings/string_split.h"
#include "base/strings/string_util.h"
#include "base/strings/stringprintf.h"
#include "chrome/common/chrome_content_client.h"
#include "chrome/common/chrome_features.h"
#include "chrome/common/pref_names.h"
#include "components/prefs/pref_service.h"
#include "content/public/browser/browser_thread.h"
#include "net/http/http_util.h"
namespace chrome_accept_language_settings {
namespace {
// Helper class that builds the list of languages for the Accept-Language
......@@ -57,24 +56,7 @@ std::string GetBaseLanguageCode(const std::string& language_code) {
} // namespace
ChromeHttpUserAgentSettings::ChromeHttpUserAgentSettings(PrefService* prefs) {
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
pref_accept_language_.Init(prefs::kAcceptLanguages, prefs);
last_pref_accept_language_ = *pref_accept_language_;
last_http_accept_language_ =
ComputeAcceptLanguageFromPref(last_pref_accept_language_);
pref_accept_language_.MoveToThread(
content::BrowserThread::GetTaskRunnerForThread(
content::BrowserThread::IO));
}
ChromeHttpUserAgentSettings::~ChromeHttpUserAgentSettings() {
DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
}
std::string ChromeHttpUserAgentSettings::ComputeAcceptLanguageFromPref(
const std::string& language_pref) {
std::string ComputeAcceptLanguageFromPref(const std::string& language_pref) {
std::string accept_languages_str =
base::FeatureList::IsEnabled(features::kUseNewAcceptLanguageHeader)
? ExpandLanguageList(language_pref)
......@@ -82,8 +64,7 @@ std::string ChromeHttpUserAgentSettings::ComputeAcceptLanguageFromPref(
return net::HttpUtil::GenerateAcceptLanguageHeader(accept_languages_str);
}
std::string ChromeHttpUserAgentSettings::ExpandLanguageList(
const std::string& language_prefs) {
std::string ExpandLanguageList(const std::string& language_prefs) {
const std::vector<std::string> languages = base::SplitString(
language_prefs, ",", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL);
......@@ -111,26 +92,4 @@ std::string ChromeHttpUserAgentSettings::ExpandLanguageList(
return builder.GetString();
}
void ChromeHttpUserAgentSettings::CleanupOnUIThread() {
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
pref_accept_language_.Destroy();
}
std::string ChromeHttpUserAgentSettings::GetAcceptLanguage() const {
DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
std::string new_pref_accept_language = *pref_accept_language_;
if (new_pref_accept_language != last_pref_accept_language_) {
last_http_accept_language_ =
ComputeAcceptLanguageFromPref(new_pref_accept_language);
last_pref_accept_language_ = new_pref_accept_language;
}
return last_http_accept_language_;
}
std::string ChromeHttpUserAgentSettings::GetUserAgent() const {
DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
return ::GetUserAgent();
}
} // namespace chrome_accept_language_settings
// Copyright (c) 2012 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.
#ifndef CHROME_BROWSER_NET_CHROME_ACCEPT_LANGUAGE_SETTINGS_H_
#define CHROME_BROWSER_NET_CHROME_ACCEPT_LANGUAGE_SETTINGS_H_
#include <string>
namespace chrome_accept_language_settings {
// Given value of prefs::kAcceptLanguages pref, computes the corresponding
// Accept-Language header to send.
std::string ComputeAcceptLanguageFromPref(const std::string& language_pref);
// Adds the base language if a corresponding language+region code is present.
std::string ExpandLanguageList(const std::string& language_prefs);
} // namespace chrome_accept_language_settings
#endif // CHROME_BROWSER_NET_CHROME_ACCEPT_LANGUAGE_SETTINGS_H_
......@@ -2,38 +2,40 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/net/chrome_http_user_agent_settings.h"
#include "chrome/browser/net/chrome_accept_language_settings.h"
#include "testing/gtest/include/gtest/gtest.h"
// Test the expansion of the Language List.
TEST(ChromeHttpUserAgentSettings, ExpandLanguageList) {
std::string output = ChromeHttpUserAgentSettings::ExpandLanguageList("");
TEST(ChromeAcceptLanguageSettings, ExpandLanguageList) {
std::string output = chrome_accept_language_settings::ExpandLanguageList("");
EXPECT_EQ("", output);
output = ChromeHttpUserAgentSettings::ExpandLanguageList("en-US");
output = chrome_accept_language_settings::ExpandLanguageList("en-US");
EXPECT_EQ("en-US,en", output);
output = ChromeHttpUserAgentSettings::ExpandLanguageList("fr");
output = chrome_accept_language_settings::ExpandLanguageList("fr");
EXPECT_EQ("fr", output);
// The base language is added after all regional codes...
output = ChromeHttpUserAgentSettings::ExpandLanguageList("en-US,en-CA");
output = chrome_accept_language_settings::ExpandLanguageList("en-US,en-CA");
EXPECT_EQ("en-US,en-CA,en", output);
// ... but before other language families.
output = ChromeHttpUserAgentSettings::ExpandLanguageList("en-US,en-CA,fr");
output =
chrome_accept_language_settings::ExpandLanguageList("en-US,en-CA,fr");
EXPECT_EQ("en-US,en-CA,en,fr", output);
output =
ChromeHttpUserAgentSettings::ExpandLanguageList("en-US,en-CA,fr,en-AU");
output = chrome_accept_language_settings::ExpandLanguageList(
"en-US,en-CA,fr,en-AU");
EXPECT_EQ("en-US,en-CA,en,fr,en-AU", output);
output = ChromeHttpUserAgentSettings::ExpandLanguageList("en-US,en-CA,fr-CA");
output =
chrome_accept_language_settings::ExpandLanguageList("en-US,en-CA,fr-CA");
EXPECT_EQ("en-US,en-CA,en,fr-CA,fr", output);
// Add a base language even if it's already in the list.
output = ChromeHttpUserAgentSettings::ExpandLanguageList(
output = chrome_accept_language_settings::ExpandLanguageList(
"en-US,fr-CA,it,fr,es-AR,it-IT");
EXPECT_EQ("en-US,en,fr-CA,fr,it,es-AR,es,it-IT", output);
}
// Copyright (c) 2012 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.
#ifndef CHROME_BROWSER_NET_CHROME_HTTP_USER_AGENT_SETTINGS_H_
#define CHROME_BROWSER_NET_CHROME_HTTP_USER_AGENT_SETTINGS_H_
#include <string>
#include "base/compiler_specific.h"
#include "base/macros.h"
#include "components/prefs/pref_member.h"
#include "net/url_request/http_user_agent_settings.h"
class PrefService;
// An implementation of |HttpUserAgentSettings| that provides HTTP header
// Accept-Language value that tracks Pref settings.
class ChromeHttpUserAgentSettings : public net::HttpUserAgentSettings {
public:
// Must be called on the UI thread.
explicit ChromeHttpUserAgentSettings(PrefService* prefs);
// Must be called on the IO thread.
~ChromeHttpUserAgentSettings() override;
// Given the language setting in the Prefs::kAcceptLanguages setting, returns
// the appropriate value of Accept-Language header to send.
static std::string ComputeAcceptLanguageFromPref(
const std::string& language_pref);
// Adds the base language if a corresponding language+region code is present.
static std::string ExpandLanguageList(const std::string& language_prefs);
void CleanupOnUIThread();
// net::HttpUserAgentSettings implementation
std::string GetAcceptLanguage() const override;
std::string GetUserAgent() const override;
private:
StringPrefMember pref_accept_language_;
// Avoid re-processing by caching the last value from the preferences and the
// last result of processing via net::HttpUtil::GenerateAccept*Header().
mutable std::string last_pref_accept_language_;
mutable std::string last_http_accept_language_;
DISALLOW_COPY_AND_ASSIGN(ChromeHttpUserAgentSettings);
};
#endif // CHROME_BROWSER_NET_CHROME_HTTP_USER_AGENT_SETTINGS_H_
......@@ -12,7 +12,7 @@
#include "base/logging.h"
#include "build/build_config.h"
#include "chrome/browser/browser_process.h"
#include "chrome/browser/net/chrome_http_user_agent_settings.h"
#include "chrome/browser/net/chrome_accept_language_settings.h"
#include "chrome/browser/net/default_network_context_params.h"
#include "chrome/browser/net/system_network_context_manager.h"
#include "chrome/browser/profiles/profile.h"
......@@ -115,7 +115,7 @@ void ProfileNetworkContextService::UpdateAcceptLanguage() {
}
std::string ProfileNetworkContextService::ComputeAcceptLanguage() const {
return ChromeHttpUserAgentSettings::ComputeAcceptLanguageFromPref(
return chrome_accept_language_settings::ComputeAcceptLanguageFromPref(
pref_accept_language_.GetValue());
}
......
......@@ -2375,7 +2375,7 @@ test("unit_tests") {
"../browser/metrics/thread_watcher_android_unittest.cc",
"../browser/metrics/thread_watcher_unittest.cc",
"../browser/mod_pagespeed/mod_pagespeed_metrics_unittest.cc",
"../browser/net/chrome_http_user_agent_settings_unittest.cc",
"../browser/net/chrome_accept_language_settings_unittest.cc",
"../browser/net/chrome_network_delegate_unittest.cc",
"../browser/net/dns_probe_runner_unittest.cc",
"../browser/net/dns_probe_service_unittest.cc",
......
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