1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
|
// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/ui/views/side_search/default_search_icon_source.h"
#include "base/ranges/algorithm.h"
#include "base/test/bind.h"
#include "chrome/browser/search_engines/template_url_service_factory.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/test/base/in_process_browser_test.h"
#include "chrome/test/base/search_test_utils.h"
#include "components/search_engines/template_url.h"
#include "components/search_engines/template_url_service.h"
#include "content/public/test/browser_test.h"
class DefaultSearchIconBrowserTest : public InProcessBrowserTest {
public:
void SetUpOnMainThread() override {
InProcessBrowserTest::SetUpOnMainThread();
// Wait for the template url service to load.
search_test_utils::WaitForTemplateURLServiceToLoad(GetTemplateURLService());
}
// Sets a new default search provider from the default search engine list.
void SetNewDefaultSearch() {
auto* template_url_service = GetTemplateURLService();
auto* current_default_template_url =
template_url_service->GetDefaultSearchProvider();
TemplateURLService::TemplateURLVector template_urls =
template_url_service->GetTemplateURLs();
auto iter = base::ranges::find_if_not(
template_urls, [&](const TemplateURL* template_url) {
return current_default_template_url == template_url;
});
ASSERT_NE(template_urls.end(), iter);
template_url_service->SetUserSelectedDefaultSearchProvider(*iter);
}
TemplateURLService* GetTemplateURLService() {
return TemplateURLServiceFactory::GetForProfile(browser()->profile());
}
};
IN_PROC_BROWSER_TEST_F(DefaultSearchIconBrowserTest,
ClientNotifiedOfTemplateURLServiceChange) {
// Tracks whether the client was notified of a change to the default search
// icon source.
bool client_notified = false;
const auto subscription =
DefaultSearchIconSource::GetOrCreateForBrowser(browser())
->RegisterIconChangedSubscription(
base::BindLambdaForTesting([&]() { client_notified = true; }));
// Clients should not have yet been notified of an icon change.
EXPECT_FALSE(client_notified);
// The client should be notified if the default search provider has changed.
for (int i = 0; i < 3; ++i) {
SetNewDefaultSearch();
EXPECT_TRUE(client_notified);
client_notified = false;
}
}
|