Commit 97be51df authored by Donn Denman's avatar Donn Denman Committed by Commit Bot

[TTS][Template URL] Add fluent languages support.

Adds support for a new Contextual Search Resolve-request parameter
to provide a list of fluent languages.  The server can use these
as additional hints from the Chrome Language Model for the
user's preferred languages to translate into.

BUG= 1084600, 1093833, 1095090

Change-Id: Ieece911ca84854effcd830f4d0d7ec64e088f700
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2261422
Commit-Queue: Donn Denman <donnd@chromium.org>
Reviewed-by: default avatarmanuk hovanesian <manukh@chromium.org>
Auto-Submit: Donn Denman <donnd@chromium.org>
Cr-Commit-Position: refs/heads/master@{#781650}
parent b1b83daf
......@@ -308,7 +308,7 @@ std::string ContextualSearchDelegate::BuildRequestUrl(
context->GetPreviousEventId(), context->GetPreviousEventResults(),
context->GetExactResolve(),
context->GetTranslationLanguages().detected_language,
context->GetTranslationLanguages().target_language);
context->GetTranslationLanguages().target_language, std::string());
search_terms_args.contextual_search_params = params;
......
......@@ -227,7 +227,8 @@ TemplateURLRef::SearchTermsArgs::ContextualSearchParams::ContextualSearchParams(
int previous_event_results,
bool is_exact_search,
std::string source_lang,
std::string target_lang)
std::string target_lang,
std::string fluent_languages)
: version(version),
contextual_cards_version(contextual_cards_version),
home_country(home_country),
......@@ -235,7 +236,8 @@ TemplateURLRef::SearchTermsArgs::ContextualSearchParams::ContextualSearchParams(
previous_event_results(previous_event_results),
is_exact_search(is_exact_search),
source_lang(source_lang),
target_lang(target_lang) {}
target_lang(target_lang),
fluent_languages(fluent_languages) {}
TemplateURLRef::SearchTermsArgs::ContextualSearchParams::ContextualSearchParams(
const ContextualSearchParams& other) = default;
......@@ -1004,6 +1006,8 @@ std::string TemplateURLRef::HandleReplacements(
args.push_back("tlitesl=" + params.source_lang);
if (!params.target_lang.empty())
args.push_back("tlitetl=" + params.target_lang);
if (!params.fluent_languages.empty())
args.push_back("ctxs_fls=" + params.fluent_languages);
HandleReplacement(std::string(), base::JoinString(args, "&"), *i, &url);
break;
......
......@@ -118,6 +118,10 @@ class TemplateURLRef {
// The |target_lang| specifies the best language to translate into for
// the user, which also indicates when translation is appropriate or
// helpful. This comes from the Chrome Language Model.
// The |fluent_languages| string specifies the languages the user
// is fluent in reading. This acts as an alternate set of languages
// to consider translating into. The languages are ordered by
// fluency, and encoded as a comma-separated list of BCP 47 languages.
ContextualSearchParams(int version,
int contextual_cards_version,
std::string home_country,
......@@ -125,7 +129,8 @@ class TemplateURLRef {
int previous_event_results,
bool is_exact_search,
std::string source_lang,
std::string target_lang);
std::string target_lang,
std::string fluent_languages);
ContextualSearchParams(const ContextualSearchParams& other);
~ContextualSearchParams();
......@@ -162,6 +167,10 @@ class TemplateURLRef {
// Target language string to be translated into.
std::string target_lang;
// Alternate target languages that the user is fluent in, encoded in a
// single string.
std::string fluent_languages;
};
// Estimates dynamic memory usage.
......
......@@ -1741,7 +1741,8 @@ TEST_F(TemplateURLTest, ContextualSearchParameters) {
// Test the current common case, which uses no home country or previous
// event.
TemplateURLRef::SearchTermsArgs::ContextualSearchParams params(
2, 1, std::string(), 0, 0, false, std::string(), std::string());
2, 1, std::string(), 0, 0, false, std::string(), std::string(),
std::string());
search_terms_args.contextual_search_params = params;
result = url.url_ref().ReplaceSearchTerms(search_terms_args,
search_terms_data_);
......@@ -1754,7 +1755,8 @@ TEST_F(TemplateURLTest, ContextualSearchParameters) {
// Test the home country and non-zero event data case.
search_terms_args.contextual_search_params =
TemplateURLRef::SearchTermsArgs::ContextualSearchParams(
2, 2, "CH", 1657713458, 5, false, std::string(), std::string());
2, 2, "CH", 1657713458, 5, false, std::string(), std::string(),
std::string());
result =
url.url_ref().ReplaceSearchTerms(search_terms_args, search_terms_data_);
......@@ -1770,7 +1772,8 @@ TEST_F(TemplateURLTest, ContextualSearchParameters) {
// Test exact-search.
search_terms_args.contextual_search_params =
TemplateURLRef::SearchTermsArgs::ContextualSearchParams(
2, 1, std::string(), 0, 0, true, std::string(), std::string());
2, 1, std::string(), 0, 0, true, std::string(), std::string(),
std::string());
result =
url.url_ref().ReplaceSearchTerms(search_terms_args, search_terms_data_);
// Find our param.
......@@ -1780,7 +1783,7 @@ TEST_F(TemplateURLTest, ContextualSearchParameters) {
// Test source and target languages.
search_terms_args.contextual_search_params =
TemplateURLRef::SearchTermsArgs::ContextualSearchParams(
2, 1, std::string(), 0, 0, true, "es", "de");
2, 1, std::string(), 0, 0, true, "es", "de", std::string());
result =
url.url_ref().ReplaceSearchTerms(search_terms_args, search_terms_data_);
// Find our params.
......@@ -1788,6 +1791,17 @@ TEST_F(TemplateURLTest, ContextualSearchParameters) {
EXPECT_NE(source_pos, std::string::npos);
size_t target_pos = result.find("tlitetl=de");
EXPECT_NE(target_pos, std::string::npos);
// Test fluent languages.
search_terms_args.contextual_search_params =
TemplateURLRef::SearchTermsArgs::ContextualSearchParams(
2, 1, std::string(), 0, 0, true, std::string(), std::string(),
"es,de");
result =
url.url_ref().ReplaceSearchTerms(search_terms_args, search_terms_data_);
// Find our param. These may actually be URL encoded.
size_t fluent_pos = result.find("&ctxs_fls=es,de");
EXPECT_NE(fluent_pos, std::string::npos);
}
TEST_F(TemplateURLTest, GenerateKeyword) {
......
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