blob: abb5f4cabe374216438384e6d3df3857b97519a1 [file] [log] [blame]
// Copyright 2020 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.
#include "components/omnibox/browser/query_tile_provider.h"
#include "base/run_loop.h"
#include "base/test/task_environment.h"
#include "components/omnibox/browser/autocomplete_provider_listener.h"
#include "components/omnibox/browser/fake_autocomplete_provider_client.h"
#include "components/omnibox/browser/test_scheme_classifier.h"
#include "testing/gtest/include/gtest/gtest.h"
class QueryTileProviderTest : public testing::Test,
public AutocompleteProviderListener {
public:
QueryTileProviderTest();
QueryTileProviderTest(const QueryTileProviderTest&) = delete;
QueryTileProviderTest& operator=(const QueryTileProviderTest&) = delete;
void SetUp() override {
TemplateURLService* turl_model = client_->GetTemplateURLService();
turl_model->Load();
// Verify that Google is the default search provider.
ASSERT_EQ(SEARCH_ENGINE_GOOGLE,
turl_model->GetDefaultSearchProvider()->GetEngineType(
turl_model->search_terms_data()));
EXPECT_CALL(*client_, SearchSuggestEnabled())
.WillRepeatedly(testing::Return(true));
}
AutocompleteInput CreateInput(const std::string& text) {
AutocompleteInput input(base::ASCIIToUTF16(text),
metrics::OmniboxEventProto::OTHER,
TestSchemeClassifier());
return input;
}
protected:
// AutocompleteProviderListener overrides.
void OnProviderUpdate(bool updated_matches,
const AutocompleteProvider* provider) override {}
void RunUntilIdle() { task_environment_.RunUntilIdle(); }
base::test::TaskEnvironment task_environment_;
std::unique_ptr<FakeAutocompleteProviderClient> client_;
scoped_refptr<QueryTileProvider> provider_;
};
QueryTileProviderTest::QueryTileProviderTest()
: client_(new FakeAutocompleteProviderClient()),
provider_(new QueryTileProvider(client_.get(), this)) {}
// The following tests use FakeTileService which responds synchronously to the
// tile requests. That's why none of these tests wait for the callbacks to
// finish.
TEST_F(QueryTileProviderTest, TopLevelTilesShowOnZeroSuggest) {
auto input = CreateInput(std::string());
provider_->Start(input, false);
RunUntilIdle();
EXPECT_EQ(provider_->matches().size(), 1u);
auto match = provider_->matches().front();
EXPECT_EQ(match.type, AutocompleteMatchType::TILE_SUGGESTION);
EXPECT_EQ(match.query_tiles.size(), 2u);
EXPECT_EQ(match.query_tiles[0].display_text, "News");
EXPECT_EQ(match.query_tiles[1].display_text, "Films");
EXPECT_TRUE(provider_->matches().front().allowed_to_be_default_match);
}
TEST_F(QueryTileProviderTest, SubTilesForSelectedTile) {
auto input = CreateInput("News");
input.set_query_tile_id("1");
provider_->Start(input, false);
RunUntilIdle();
EXPECT_EQ(provider_->matches().size(), 1u);
auto match = provider_->matches().front();
EXPECT_EQ(match.type, AutocompleteMatchType::TILE_SUGGESTION);
EXPECT_EQ(match.query_tiles.size(), 1u);
EXPECT_EQ(match.query_tiles[0].display_text, "India");
EXPECT_TRUE(provider_->matches().front().allowed_to_be_default_match);
}
TEST_F(QueryTileProviderTest, OmniboxTextNotMatchingSelectedTile) {
auto input = CreateInput("some text");
input.set_query_tile_id("1");
provider_->Start(input, false);
RunUntilIdle();
EXPECT_TRUE(provider_->matches().empty());
}
TEST_F(QueryTileProviderTest, QueryTilesAreShownForURLInput) {
std::string url("http://www.cnn.com");
auto input = CreateInput(url);
input.set_current_url(GURL(url));
input.UpdateText(base::UTF8ToUTF16(url), 0, {});
provider_->Start(input, false);
RunUntilIdle();
EXPECT_EQ(provider_->matches().size(), 1u);
EXPECT_FALSE(provider_->matches().front().allowed_to_be_default_match);
}
TEST_F(QueryTileProviderTest, DefaultSearchProviderIsNotGoogle) {
// Set a non-Google default search engine. We should disallow query tile
// suggestions.
TemplateURLService* turl_model = client_->GetTemplateURLService();
auto* google_search_provider = turl_model->GetDefaultSearchProvider();
TemplateURLData data;
data.SetURL("https://www.example.com/?q={searchTerms}");
data.suggestions_url = "https://www.example.com/suggest/?q={searchTerms}";
auto* other_search_provider =
turl_model->Add(std::make_unique<TemplateURL>(data));
turl_model->SetUserSelectedDefaultSearchProvider(other_search_provider);
auto input = CreateInput("");
provider_->Start(input, false);
RunUntilIdle();
EXPECT_TRUE(provider_->matches().empty());
// Restore Google as the default search provider. Now query tile suggestions
// should be allowed.
turl_model->SetUserSelectedDefaultSearchProvider(
const_cast<TemplateURL*>(google_search_provider));
provider_->Start(input, false);
RunUntilIdle();
EXPECT_EQ(provider_->matches().size(), 1u);
EXPECT_EQ(provider_->matches().front().query_tiles.size(), 2u);
}