Commit 1c5d4739 authored by Nate Fischer's avatar Nate Fischer Committed by Commit Bot

AW NS: fix q-values for accept-language

This fixes the Accept-Language request header when the Network Service
is enabled by adding back q-values for language entry (to properly
denote user preference).

No change to legacy code path.

Bug: 968287
Test: out/.../bin/system_webview_shell_apk launch 'https://httpbin.org/headers' (verify header has q-values)
Test: run_webview_instrumentation_test_apk --enable-features=NetworkService,NetworkServiceInProcess -f AcceptLanguageTest#*
Cq-Include-Trybots: luci.chromium.try:android_mojo
Change-Id: Ideb10bdf299505b40d96df8c771509a11c102ffc
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1637451Reviewed-by: default avatarChangwan Ryu <changwan@chromium.org>
Commit-Queue: Nate Fischer <ntfschr@chromium.org>
Cr-Commit-Position: refs/heads/master@{#664895}
parent ed13b8c7
...@@ -91,6 +91,7 @@ ...@@ -91,6 +91,7 @@
#include "content/public/common/user_agent.h" #include "content/public/common/user_agent.h"
#include "content/public/common/web_preferences.h" #include "content/public/common/web_preferences.h"
#include "net/android/network_library.h" #include "net/android/network_library.h"
#include "net/http/http_util.h"
#include "net/log/net_log.h" #include "net/log/net_log.h"
#include "net/ssl/ssl_cert_request_info.h" #include "net/ssl/ssl_cert_request_info.h"
#include "net/ssl/ssl_info.h" #include "net/ssl/ssl_info.h"
...@@ -338,7 +339,8 @@ AwContentBrowserClient::GetNetworkContextParams() { ...@@ -338,7 +339,8 @@ AwContentBrowserClient::GetNetworkContextParams() {
// preferred locales (http://crbug.com/898555). For now, set this to // preferred locales (http://crbug.com/898555). For now, set this to
// "en-US,en" instead of "en-us,en", since Android guarantees region codes // "en-US,en" instead of "en-us,en", since Android guarantees region codes
// will be uppercase. // will be uppercase.
context_params->accept_language = "en-US,en"; context_params->accept_language =
net::HttpUtil::GenerateAcceptLanguageHeader("en-US,en");
// HTTP cache // HTTP cache
context_params->http_cache_enabled = true; context_params->http_cache_enabled = true;
......
...@@ -261,8 +261,10 @@ void AwSettings::UpdateRendererPreferencesLocked( ...@@ -261,8 +261,10 @@ void AwSettings::UpdateRendererPreferencesLocked(
// AndroidWebview does not use per-site storage partitions. // AndroidWebview does not use per-site storage partitions.
content::StoragePartition* storage_partition = content::StoragePartition* storage_partition =
content::BrowserContext::GetDefaultStoragePartition(aw_browser_context); content::BrowserContext::GetDefaultStoragePartition(aw_browser_context);
std::string expanded_language_list =
net::HttpUtil::ExpandLanguageList(prefs->accept_languages);
storage_partition->GetNetworkContext()->SetAcceptLanguage( storage_partition->GetNetworkContext()->SetAcceptLanguage(
net::HttpUtil::ExpandLanguageList(prefs->accept_languages)); net::HttpUtil::GenerateAcceptLanguageHeader(expanded_language_list));
} }
} }
......
...@@ -121,8 +121,11 @@ public class AcceptLanguageTest { ...@@ -121,8 +121,11 @@ public class AcceptLanguageTest {
mActivityTestRule.loadUrlSync(mAwContents, mContentsClient.getOnPageFinishedHelper(), url); mActivityTestRule.loadUrlSync(mAwContents, mContentsClient.getOnPageFinishedHelper(), url);
// Note that we extend the base language from language-region pair. // Note that we extend the base language from language-region pair.
String[] acceptLanguages = getAcceptLanguages( String rawAcceptLanguages =
mActivityTestRule.getJavaScriptResultBodyTextContent(mAwContents, mContentsClient)); mActivityTestRule.getJavaScriptResultBodyTextContent(mAwContents, mContentsClient);
Assert.assertTrue("Accept-Language header should contain at least 1 q-value",
rawAcceptLanguages.contains(";q="));
String[] acceptLanguages = getAcceptLanguages(rawAcceptLanguages);
Assert.assertArrayEquals(new String[] {"en-US", "en"}, acceptLanguages); Assert.assertArrayEquals(new String[] {"en-US", "en"}, acceptLanguages);
// Our accept language list in user agent is different from navigator.languages, which is // Our accept language list in user agent is different from navigator.languages, which is
......
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