[Omnibox] Adds feature to disable remote ZPS caching
Fixed: 1136654
Change-Id: I55f7cb4ca34332a33d81421a9a21475279e6fa08
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2463335
Reviewed-by: Tomasz Wiszkowski <[email protected]>
Reviewed-by: Tommy Li <[email protected]>
Commit-Queue: Moe Ahmadi <[email protected]>
Cr-Commit-Position: refs/heads/master@{#816202}
(cherry picked from commit d9379587734c44089bb8be4278fa5e6a7de12fa5)
[email protected]
Change-Id: Ibe4ce9d810e8667ef7d096efeb3d21135e254e85
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2472441
Reviewed-by: Moe Ahmadi <[email protected]>
Reviewed-by: Tommy Li <[email protected]>
Commit-Queue: Moe Ahmadi <[email protected]>
Cr-Commit-Position: refs/branch-heads/4280@{#397}
Cr-Branched-From: ea420fb963f9658c9969b6513c56b8f47efa1a2a-refs/heads/master@{#812852}
diff --git a/components/omnibox/browser/zero_suggest_provider.cc b/components/omnibox/browser/zero_suggest_provider.cc
index 4e689bc1..694ef2f 100644
--- a/components/omnibox/browser/zero_suggest_provider.cc
+++ b/components/omnibox/browser/zero_suggest_provider.cc
@@ -366,7 +366,8 @@
// When running the REMOTE_NO_URL variant, we want to store suggestion
// responses if non-empty.
- if (result_type_running_ == REMOTE_NO_URL && !json_data.empty()) {
+ if (base::FeatureList::IsEnabled(omnibox::kOmniboxZeroSuggestCaching) &&
+ result_type_running_ == REMOTE_NO_URL && !json_data.empty()) {
client()->GetPrefs()->SetString(omnibox::kZeroSuggestCachedResults,
json_data);
@@ -614,8 +615,10 @@
}
void ZeroSuggestProvider::MaybeUseCachedSuggestions() {
- if (result_type_running_ != REMOTE_NO_URL)
+ if (!base::FeatureList::IsEnabled(omnibox::kOmniboxZeroSuggestCaching) ||
+ result_type_running_ != REMOTE_NO_URL) {
return;
+ }
std::string json_data =
client()->GetPrefs()->GetString(omnibox::kZeroSuggestCachedResults);
diff --git a/components/omnibox/browser/zero_suggest_provider_unittest.cc b/components/omnibox/browser/zero_suggest_provider_unittest.cc
index f8f0f5b..427c5c8 100644
--- a/components/omnibox/browser/zero_suggest_provider_unittest.cc
+++ b/components/omnibox/browser/zero_suggest_provider_unittest.cc
@@ -656,8 +656,10 @@
EXPECT_EQ(3U, provider_->matches().size()); // 3 results, no verbatim match
#endif
- EXPECT_EQ(json_response,
- prefs->GetString(omnibox::kZeroSuggestCachedResults));
+ if (base::FeatureList::IsEnabled(omnibox::kOmniboxZeroSuggestCaching)) {
+ EXPECT_EQ(json_response,
+ prefs->GetString(omnibox::kZeroSuggestCachedResults));
+ }
}
TEST_F(ZeroSuggestProviderTest, TestPsuggestZeroSuggestHasCachedResults) {
@@ -681,18 +683,20 @@
provider_->Start(input, false);
- // Expect that matches get populated synchronously out of the cache.
+ if (base::FeatureList::IsEnabled(omnibox::kOmniboxZeroSuggestCaching)) {
+ // Expect that matches get populated synchronously out of the cache.
#if defined(OS_ANDROID) || defined(OS_IOS)
- ASSERT_EQ(4U, provider_->matches().size()); // 3 results + verbatim
- EXPECT_EQ(base::ASCIIToUTF16("search1"), provider_->matches()[1].contents);
- EXPECT_EQ(base::ASCIIToUTF16("search2"), provider_->matches()[2].contents);
- EXPECT_EQ(base::ASCIIToUTF16("search3"), provider_->matches()[3].contents);
+ ASSERT_EQ(4U, provider_->matches().size()); // 3 results + verbatim
+ EXPECT_EQ(base::ASCIIToUTF16("search1"), provider_->matches()[1].contents);
+ EXPECT_EQ(base::ASCIIToUTF16("search2"), provider_->matches()[2].contents);
+ EXPECT_EQ(base::ASCIIToUTF16("search3"), provider_->matches()[3].contents);
#else
- ASSERT_EQ(3U, provider_->matches().size()); // 3 results, no verbatim match
- EXPECT_EQ(base::ASCIIToUTF16("search1"), provider_->matches()[0].contents);
- EXPECT_EQ(base::ASCIIToUTF16("search2"), provider_->matches()[1].contents);
- EXPECT_EQ(base::ASCIIToUTF16("search3"), provider_->matches()[2].contents);
+ ASSERT_EQ(3U, provider_->matches().size()); // 3 results, no verbatim match
+ EXPECT_EQ(base::ASCIIToUTF16("search1"), provider_->matches()[0].contents);
+ EXPECT_EQ(base::ASCIIToUTF16("search2"), provider_->matches()[1].contents);
+ EXPECT_EQ(base::ASCIIToUTF16("search3"), provider_->matches()[2].contents);
#endif
+ }
GURL suggest_url = GetSuggestURL(metrics::OmniboxEventProto::OTHER);
EXPECT_TRUE(test_loader_factory()->IsPending(suggest_url.spec()));
@@ -703,22 +707,37 @@
base::RunLoop().RunUntilIdle();
- // Expect the same results after the response has been handled.
+ if (base::FeatureList::IsEnabled(omnibox::kOmniboxZeroSuggestCaching)) {
+ // Expect the same results after the response has been handled.
#if defined(OS_ANDROID) || defined(OS_IOS)
- ASSERT_EQ(4U, provider_->matches().size()); // 3 results + verbatim
- EXPECT_EQ(base::ASCIIToUTF16("search1"), provider_->matches()[1].contents);
- EXPECT_EQ(base::ASCIIToUTF16("search2"), provider_->matches()[2].contents);
- EXPECT_EQ(base::ASCIIToUTF16("search3"), provider_->matches()[3].contents);
+ ASSERT_EQ(4U, provider_->matches().size()); // 3 results + verbatim
+ EXPECT_EQ(base::ASCIIToUTF16("search1"), provider_->matches()[1].contents);
+ EXPECT_EQ(base::ASCIIToUTF16("search2"), provider_->matches()[2].contents);
+ EXPECT_EQ(base::ASCIIToUTF16("search3"), provider_->matches()[3].contents);
#else
- ASSERT_EQ(3U, provider_->matches().size()); // 3 results, no verbatim match
- EXPECT_EQ(base::ASCIIToUTF16("search1"), provider_->matches()[0].contents);
- EXPECT_EQ(base::ASCIIToUTF16("search2"), provider_->matches()[1].contents);
- EXPECT_EQ(base::ASCIIToUTF16("search3"), provider_->matches()[2].contents);
+ ASSERT_EQ(3U, provider_->matches().size()); // 3 results, no verbatim match
+ EXPECT_EQ(base::ASCIIToUTF16("search1"), provider_->matches()[0].contents);
+ EXPECT_EQ(base::ASCIIToUTF16("search2"), provider_->matches()[1].contents);
+ EXPECT_EQ(base::ASCIIToUTF16("search3"), provider_->matches()[2].contents);
#endif
// Expect the new results have been stored.
EXPECT_EQ(json_response2,
prefs->GetString(omnibox::kZeroSuggestCachedResults));
+ } else {
+ // Expect fresh results after the response has been handled.
+#if defined(OS_ANDROID) || defined(OS_IOS)
+ ASSERT_EQ(4U, provider_->matches().size()); // 3 results + verbatim
+ EXPECT_EQ(base::ASCIIToUTF16("search4"), provider_->matches()[1].contents);
+ EXPECT_EQ(base::ASCIIToUTF16("search5"), provider_->matches()[2].contents);
+ EXPECT_EQ(base::ASCIIToUTF16("search6"), provider_->matches()[3].contents);
+#else
+ ASSERT_EQ(3U, provider_->matches().size()); // 3 results, no verbatim match
+ EXPECT_EQ(base::ASCIIToUTF16("search4"), provider_->matches()[0].contents);
+ EXPECT_EQ(base::ASCIIToUTF16("search5"), provider_->matches()[1].contents);
+ EXPECT_EQ(base::ASCIIToUTF16("search6"), provider_->matches()[2].contents);
+#endif
+ }
}
TEST_F(ZeroSuggestProviderTest, TestPsuggestZeroSuggestReceivedEmptyResults) {
@@ -742,18 +761,22 @@
provider_->Start(input, false);
- // Expect that matches get populated synchronously out of the cache.
+ if (base::FeatureList::IsEnabled(omnibox::kOmniboxZeroSuggestCaching)) {
+ // Expect that matches get populated synchronously out of the cache.
#if defined(OS_ANDROID) || defined(OS_IOS)
- ASSERT_EQ(4U, provider_->matches().size()); // 3 results + verbatim
- EXPECT_EQ(base::ASCIIToUTF16("search1"), provider_->matches()[1].contents);
- EXPECT_EQ(base::ASCIIToUTF16("search2"), provider_->matches()[2].contents);
- EXPECT_EQ(base::ASCIIToUTF16("search3"), provider_->matches()[3].contents);
+ ASSERT_EQ(4U, provider_->matches().size()); // 3 results + verbatim
+ EXPECT_EQ(base::ASCIIToUTF16("search1"), provider_->matches()[1].contents);
+ EXPECT_EQ(base::ASCIIToUTF16("search2"), provider_->matches()[2].contents);
+ EXPECT_EQ(base::ASCIIToUTF16("search3"), provider_->matches()[3].contents);
#else
- ASSERT_EQ(3U, provider_->matches().size()); // 3 results, no verbatim match
- EXPECT_EQ(base::ASCIIToUTF16("search1"), provider_->matches()[0].contents);
- EXPECT_EQ(base::ASCIIToUTF16("search2"), provider_->matches()[1].contents);
- EXPECT_EQ(base::ASCIIToUTF16("search3"), provider_->matches()[2].contents);
+ ASSERT_EQ(3U, provider_->matches().size()); // 3 results, no verbatim match
+ EXPECT_EQ(base::ASCIIToUTF16("search1"), provider_->matches()[0].contents);
+ EXPECT_EQ(base::ASCIIToUTF16("search2"), provider_->matches()[1].contents);
+ EXPECT_EQ(base::ASCIIToUTF16("search3"), provider_->matches()[2].contents);
#endif
+ } else {
+ ASSERT_TRUE(provider_->matches().empty());
+ }
GURL suggest_url = GetSuggestURL(metrics::OmniboxEventProto::OTHER);
EXPECT_TRUE(test_loader_factory()->IsPending(suggest_url.spec()));
@@ -765,7 +788,9 @@
// Expect that the matches have been cleared.
ASSERT_TRUE(provider_->matches().empty());
- // Expect the new results have been stored.
- EXPECT_EQ(empty_response,
- prefs->GetString(omnibox::kZeroSuggestCachedResults));
+ if (base::FeatureList::IsEnabled(omnibox::kOmniboxZeroSuggestCaching)) {
+ // Expect the new results have been stored.
+ EXPECT_EQ(empty_response,
+ prefs->GetString(omnibox::kZeroSuggestCachedResults));
+ }
}
diff --git a/components/omnibox/common/omnibox_features.cc b/components/omnibox/common/omnibox_features.cc
index 65fb56a6..75d2747 100644
--- a/components/omnibox/common/omnibox_features.cc
+++ b/components/omnibox/common/omnibox_features.cc
@@ -239,6 +239,11 @@
const base::Feature kOnFocusSuggestions{"OmniboxOnFocusSuggestions",
base::FEATURE_ENABLED_BY_DEFAULT};
+// Used to enable/disable caching for remote zero-prefix suggestions. Caching is
+// enabled by default. We will be experimenting with DISABLING this behavior.
+const base::Feature kOmniboxZeroSuggestCaching{
+ "OmniboxZeroSuggestCaching", base::FEATURE_ENABLED_BY_DEFAULT};
+
// Enables on-focus suggestions on the Open Web, that are contextual to the
// current URL. Will only work if user is signed-in and syncing, or is
// otherwise eligible to send the current page URL to the suggest server.
diff --git a/components/omnibox/common/omnibox_features.h b/components/omnibox/common/omnibox_features.h
index 370bd18..e6c440b 100644
--- a/components/omnibox/common/omnibox_features.h
+++ b/components/omnibox/common/omnibox_features.h
@@ -63,6 +63,7 @@
extern const base::Feature kOmniboxLocalZeroSuggestFrecencyRanking;
extern const base::Feature kOmniboxTrendingZeroPrefixSuggestionsOnNTP;
extern const base::Feature kOnFocusSuggestions;
+extern const base::Feature kOmniboxZeroSuggestCaching;
extern const base::Feature kOnFocusSuggestionsContextualWeb;
extern const base::Feature kOnFocusSuggestionsContextualWebOnContent;
extern const base::Feature kReactiveZeroSuggestionsOnNTPOmnibox;