| // 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/autocomplete/tab_matcher_desktop.h" |
| |
| #include "chrome/test/base/browser_with_test_window_test.h" |
| #include "chrome/test/base/testing_profile_manager.h" |
| #include "components/search_engines/template_url_service.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| |
| using TabMatcherDesktopTest = BrowserWithTestWindowTest; |
| |
| const TemplateURLService::Initializer kServiceInitializers[] = { |
| {"kwa", "a.chromium.org/?a={searchTerms}", "ca"}, |
| {"kwb", "b.chromium.org/?b={searchTerms}", "cb"}, |
| }; |
| |
| TEST_F(TabMatcherDesktopTest, IsTabOpenWithURLNeverReturnsActiveTab) { |
| TemplateURLService service(kServiceInitializers, 2); |
| TabMatcherDesktop matcher(&service, profile()); |
| |
| GURL foo("http://foo.chromium.org"); |
| GURL bar("http://bar.chromium.org"); |
| GURL baz("http://baz.chromium.org"); |
| |
| for (auto url : {foo, bar, baz}) { |
| AddTab(browser(), url); |
| } |
| |
| EXPECT_TRUE(matcher.IsTabOpenWithURL(foo, nullptr)); |
| EXPECT_TRUE(matcher.IsTabOpenWithURL(bar, nullptr)); |
| EXPECT_FALSE(matcher.IsTabOpenWithURL(baz, nullptr)); |
| EXPECT_FALSE(matcher.IsTabOpenWithURL(GURL("http://chromium.org"), nullptr)); |
| } |
| |
| TEST_F(TabMatcherDesktopTest, GetOpenTabsOnlyWithinProfile) { |
| TestingProfile* other_profile = |
| profile_manager()->CreateTestingProfile("testing_other_profile"); |
| |
| std::unique_ptr<BrowserWindow> other_window(CreateBrowserWindow()); |
| std::unique_ptr<Browser> other_browser(CreateBrowser( |
| other_profile, browser()->type(), false, other_window.get())); |
| |
| AddTab(browser(), GURL("http://foo.chromium.org")); |
| AddTab(browser(), GURL("http://bar.chromium.org")); |
| // The last tab added is active. It should be returned from `GetOpenTabs()`. |
| AddTab(browser(), GURL("http://active.chromium.org")); |
| AddTab(other_browser.get(), GURL("http://baz.chromium.org")); |
| |
| TemplateURLService service(kServiceInitializers, 2); |
| TabMatcherDesktop matcher(&service, profile()); |
| |
| const auto tabs = matcher.GetOpenTabs(); |
| ASSERT_EQ(tabs.size(), 2U); |
| EXPECT_EQ(tabs[0]->GetURL(), GURL("http://bar.chromium.org")); |
| EXPECT_EQ(tabs[1]->GetURL(), GURL("http://foo.chromium.org")); |
| |
| other_browser->tab_strip_model()->CloseAllTabs(); |
| } |
| |
| TEST_F(TabMatcherDesktopTest, IsTabOpenUsesCanonicalSearchURL) { |
| TemplateURLService turl_service(kServiceInitializers, 2); |
| TabMatcherDesktop matcher(&turl_service, profile()); |
| |
| TemplateURLData data; |
| data.SetURL("http://example.com/search?q={searchTerms}"); |
| data.search_intent_params = {"intent"}; |
| TemplateURL turl(data); |
| auto* default_turl = turl_service.Add(std::make_unique<TemplateURL>(data)); |
| turl_service.SetUserSelectedDefaultSearchProvider(default_turl); |
| |
| { |
| TemplateURLRef::SearchTermsArgs search_terms_args(u"foo"); |
| search_terms_args.additional_query_params = "wiz=baz"; |
| std::string foo_url = default_turl->url_ref().ReplaceSearchTerms( |
| search_terms_args, turl_service.search_terms_data()); |
| EXPECT_EQ("http://example.com/search?wiz=baz&q=foo", foo_url); |
| AddTab(browser(), GURL(foo_url)); |
| // The last tab is active. IsTabOpenWithURL() does not match the active tab. |
| AddTab(browser(), GURL("http://active.chromium.org")); |
| |
| EXPECT_TRUE(matcher.IsTabOpenWithURL( |
| GURL("http://example.com/search?q=foo"), nullptr)); |
| EXPECT_TRUE(matcher.IsTabOpenWithURL( |
| GURL("http://example.com/search?wiz=baz&q=foo"), nullptr)); |
| EXPECT_FALSE(matcher.IsTabOpenWithURL( |
| GURL("http://example.com/search?wiz=baz&intent=INTENT&q=foo"), |
| nullptr)); |
| } |
| { |
| TemplateURLRef::SearchTermsArgs search_terms_args(u"bar"); |
| search_terms_args.additional_query_params = "intent=INTENT"; |
| std::string bar_url = default_turl->url_ref().ReplaceSearchTerms( |
| search_terms_args, turl_service.search_terms_data()); |
| EXPECT_EQ("http://example.com/search?intent=INTENT&q=bar", bar_url); |
| AddTab(browser(), GURL(bar_url)); |
| // The last tab is active. IsTabOpenWithURL() does not match the active tab. |
| AddTab(browser(), GURL("http://active.chromium.org")); |
| |
| EXPECT_FALSE(matcher.IsTabOpenWithURL( |
| GURL("http://example.com/search?q=bar"), nullptr)); |
| EXPECT_FALSE(matcher.IsTabOpenWithURL( |
| GURL("http://example.com/search?wiz=baz&q=bar"), nullptr)); |
| EXPECT_TRUE(matcher.IsTabOpenWithURL( |
| GURL("http://example.com/search?wiz=baz&intent=INTENT&q=bar"), |
| nullptr)); |
| } |
| } |