| // Copyright 2021 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/lacros/lacros_url_handling.h" |
| |
| #include "base/test/task_environment.h" |
| #include "chrome/browser/ui/browser_navigator_params.h" |
| #include "chrome/common/url_constants.h" |
| #include "chromeos/crosapi/mojom/crosapi.mojom.h" |
| #include "chromeos/startup/browser_init_params.h" |
| #include "content/public/browser/web_contents.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| #include "url/gurl.h" |
| |
| TEST(LacrosUrlHandlingTest, IsURLAcceptedByAshOldVersion) { |
| base::test::TaskEnvironment task_environment; |
| |
| auto params = crosapi::mojom::BrowserInitParams::New(); |
| chromeos::BrowserInitParams::SetInitParamsForTests(std::move(params)); |
| EXPECT_TRUE(lacros_url_handling::IsUrlAcceptedByAsh( |
| GURL(chrome::kChromeUIOSSettingsURL))); |
| EXPECT_TRUE( |
| lacros_url_handling::IsUrlAcceptedByAsh(GURL(chrome::kChromeUIFlagsURL))); |
| EXPECT_FALSE(lacros_url_handling::IsUrlAcceptedByAsh(GURL(""))); |
| EXPECT_FALSE( |
| lacros_url_handling::IsUrlAcceptedByAsh(GURL("chrome://flags2"))); |
| } |
| |
| TEST(LacrosUrlHandlingTest, IsURLAcceptedByAsh) { |
| base::test::TaskEnvironment task_environment; |
| |
| auto params = crosapi::mojom::BrowserInitParams::New(); |
| params->accepted_internal_ash_urls = std::vector<GURL>{ |
| GURL(chrome::kChromeUIFlagsURL), GURL(chrome::kChromeUIOSSettingsURL), |
| GURL("chrome://version"), GURL("chrome://settings/network")}; |
| chromeos::BrowserInitParams::SetInitParamsForTests(std::move(params)); |
| EXPECT_TRUE(lacros_url_handling::IsUrlAcceptedByAsh( |
| GURL(chrome::kChromeUIOSSettingsURL))); |
| EXPECT_TRUE( |
| lacros_url_handling::IsUrlAcceptedByAsh(GURL(chrome::kChromeUIFlagsURL))); |
| EXPECT_TRUE(lacros_url_handling::IsUrlAcceptedByAsh( |
| GURL("chrome://settings/network"))); |
| EXPECT_TRUE( |
| lacros_url_handling::IsUrlAcceptedByAsh(GURL("chrome://version"))); |
| EXPECT_FALSE( |
| lacros_url_handling::IsUrlAcceptedByAsh(GURL("chrome://versions"))); |
| EXPECT_FALSE(lacros_url_handling::IsUrlAcceptedByAsh(GURL("http://version"))); |
| EXPECT_FALSE(lacros_url_handling::IsUrlAcceptedByAsh(GURL(""))); |
| EXPECT_FALSE( |
| lacros_url_handling::IsUrlAcceptedByAsh(GURL("chrome://flags2"))); |
| } |
| |
| TEST(LacrosUrlHandlingTest, IsNavigationInterceptable) { |
| // Here are the two originating URLs we are testing gainst. |
| const GURL systemUrl = GURL("chrome://settings"); |
| const GURL normalUrl = GURL("https://www.google.com"); |
| Browser* browser = nullptr; |
| // First check accpeptable cases: |
| |
| // User typed something. |
| const NavigateParams typed = NavigateParams( |
| browser, GURL(), |
| ui::PageTransitionFromInt(ui::PAGE_TRANSITION_TYPED | |
| ui::PAGE_TRANSITION_FROM_ADDRESS_BAR)); |
| EXPECT_TRUE(lacros_url_handling::IsNavigationInterceptable(typed, normalUrl)); |
| // User used omnibox liink click. |
| const NavigateParams omnibox = NavigateParams( |
| browser, GURL(), |
| ui::PageTransitionFromInt(ui::PAGE_TRANSITION_GENERATED | |
| ui::PAGE_TRANSITION_FROM_ADDRESS_BAR)); |
| EXPECT_TRUE( |
| lacros_url_handling::IsNavigationInterceptable(omnibox, normalUrl)); |
| // User used a bookmark. |
| const NavigateParams bookmark = |
| NavigateParams(browser, GURL(), ui::PAGE_TRANSITION_AUTO_BOOKMARK); |
| EXPECT_TRUE( |
| lacros_url_handling::IsNavigationInterceptable(bookmark, normalUrl)); |
| // User clicked on a link inside a system page. |
| const NavigateParams syslink = |
| NavigateParams(browser, GURL(), ui::PAGE_TRANSITION_LINK); |
| EXPECT_TRUE( |
| lacros_url_handling::IsNavigationInterceptable(syslink, systemUrl)); |
| |
| // Check for unacceptable cases: |
| |
| // Want to follow link, but not coming from system page. |
| EXPECT_FALSE( |
| lacros_url_handling::IsNavigationInterceptable(syslink, normalUrl)); |
| |
| // Any other combination. |
| ui::PageTransition invalid_qualifier[] = { |
| static_cast<ui::PageTransition>(0), ui::PAGE_TRANSITION_BLOCKED, |
| ui::PAGE_TRANSITION_FORWARD_BACK, ui::PAGE_TRANSITION_HOME_PAGE, |
| ui::PAGE_TRANSITION_FROM_API, ui::PAGE_TRANSITION_CHAIN_START, |
| ui::PAGE_TRANSITION_CHAIN_END, ui::PAGE_TRANSITION_CLIENT_REDIRECT}; |
| ui::PageTransition invalid_core[] = {ui::PAGE_TRANSITION_LINK, |
| ui::PAGE_TRANSITION_AUTO_SUBFRAME, |
| ui::PAGE_TRANSITION_MANUAL_SUBFRAME, |
| ui::PAGE_TRANSITION_AUTO_TOPLEVEL, |
| ui::PAGE_TRANSITION_FORM_SUBMIT, |
| ui::PAGE_TRANSITION_RELOAD, |
| ui::PAGE_TRANSITION_KEYWORD, |
| ui::PAGE_TRANSITION_KEYWORD_GENERATED}; |
| for (auto qualifier : invalid_qualifier) { |
| const NavigateParams typed2 = NavigateParams( |
| browser, GURL(), |
| ui::PageTransitionFromInt(ui::PAGE_TRANSITION_TYPED | qualifier)); |
| EXPECT_FALSE( |
| lacros_url_handling::IsNavigationInterceptable(typed2, systemUrl)); |
| const NavigateParams omnibox2 = NavigateParams( |
| browser, GURL(), |
| ui::PageTransitionFromInt(ui::PAGE_TRANSITION_GENERATED | qualifier)); |
| EXPECT_FALSE( |
| lacros_url_handling::IsNavigationInterceptable(omnibox2, systemUrl)); |
| |
| for (auto core : invalid_core) { |
| // Check with normal source first. |
| const NavigateParams other = NavigateParams( |
| browser, GURL(), ui::PageTransitionFromInt(core | qualifier)); |
| EXPECT_FALSE( |
| lacros_url_handling::IsNavigationInterceptable(other, normalUrl)); |
| // And then with a system source. |
| if (PageTransitionCoreTypeIs(core, ui::PAGE_TRANSITION_LINK)) { |
| EXPECT_FALSE( |
| lacros_url_handling::IsNavigationInterceptable(other, normalUrl)); |
| } else { |
| EXPECT_FALSE( |
| lacros_url_handling::IsNavigationInterceptable(other, systemUrl)); |
| } |
| } |
| } |
| } |