blob: fd7b7b3ccc3765445db0afdf526c5f87992a2fd0 [file] [log] [blame]
// Copyright 2016 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/apps/intent_helper/page_transition_util.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/base/page_transition_types.h"
namespace apps {
// Tests that ShouldIgnoreNavigation returns false only for
// PAGE_TRANSITION_LINK when |allow_form_submit| is false and
// |is_in_fenced_frame_tree| is false.
TEST(PageTransitionUtilTest, TestShouldIgnoreNavigationWithCoreTypes) {
EXPECT_FALSE(
ShouldIgnoreNavigation(ui::PAGE_TRANSITION_LINK, false, false, false));
EXPECT_TRUE(
ShouldIgnoreNavigation(ui::PAGE_TRANSITION_TYPED, false, false, false));
EXPECT_TRUE(ShouldIgnoreNavigation(ui::PAGE_TRANSITION_AUTO_BOOKMARK, false,
false, false));
EXPECT_TRUE(ShouldIgnoreNavigation(ui::PAGE_TRANSITION_AUTO_SUBFRAME, false,
false, false));
EXPECT_TRUE(ShouldIgnoreNavigation(ui::PAGE_TRANSITION_MANUAL_SUBFRAME, false,
false, false));
EXPECT_TRUE(ShouldIgnoreNavigation(ui::PAGE_TRANSITION_GENERATED, false,
false, false));
EXPECT_TRUE(ShouldIgnoreNavigation(ui::PAGE_TRANSITION_AUTO_TOPLEVEL, false,
false, false));
EXPECT_TRUE(ShouldIgnoreNavigation(ui::PAGE_TRANSITION_FORM_SUBMIT, false,
false, false));
EXPECT_TRUE(
ShouldIgnoreNavigation(ui::PAGE_TRANSITION_RELOAD, false, false, false));
EXPECT_TRUE(
ShouldIgnoreNavigation(ui::PAGE_TRANSITION_KEYWORD, false, false, false));
EXPECT_TRUE(ShouldIgnoreNavigation(ui::PAGE_TRANSITION_KEYWORD_GENERATED,
false, false, false));
static_assert(static_cast<int32_t>(ui::PAGE_TRANSITION_KEYWORD_GENERATED) ==
static_cast<int32_t>(ui::PAGE_TRANSITION_LAST_CORE),
"Not all core transition types are covered here");
}
// Test that ShouldIgnoreNavigation accepts FORM_SUBMIT when |allow_form_submit|
// is true.
TEST(PageTransitionUtilTest, TestFormSubmit) {
EXPECT_FALSE(ShouldIgnoreNavigation(ui::PAGE_TRANSITION_FORM_SUBMIT, true,
false, false));
EXPECT_TRUE(ShouldIgnoreNavigation(ui::PAGE_TRANSITION_FORM_SUBMIT, false,
false, false));
}
// Tests that ShouldIgnoreNavigation returns true when no qualifiers except
// client redirect and server redirect are provided when
// |is_in_fenced_frame_tree| is false.
TEST(PageTransitionUtilTest, TestShouldIgnoreNavigationWithLinkWithQualifiers) {
// The navigation is triggered by Forward or Back button.
EXPECT_TRUE(ShouldIgnoreNavigation(
ui::PageTransitionFromInt(ui::PAGE_TRANSITION_LINK |
ui::PAGE_TRANSITION_FORWARD_BACK),
false, false, false));
EXPECT_TRUE(ShouldIgnoreNavigation(
ui::PageTransitionFromInt(ui::PAGE_TRANSITION_FORM_SUBMIT |
ui::PAGE_TRANSITION_FORWARD_BACK),
false, false, false));
// The user used the address bar to trigger the navigation.
EXPECT_TRUE(ShouldIgnoreNavigation(
ui::PageTransitionFromInt(ui::PAGE_TRANSITION_LINK |
ui::PAGE_TRANSITION_FROM_ADDRESS_BAR),
false, false, false));
// The user pressed the Home button.
EXPECT_TRUE(ShouldIgnoreNavigation(
ui::PageTransitionFromInt(ui::PAGE_TRANSITION_LINK |
ui::PAGE_TRANSITION_HOME_PAGE),
false, false, false));
// ARC (for example) opened the link in Chrome.
EXPECT_TRUE(ShouldIgnoreNavigation(
ui::PageTransitionFromInt(ui::PAGE_TRANSITION_LINK |
ui::PAGE_TRANSITION_FROM_API),
false, false, false));
// The navigation is triggered by a client side redirect.
EXPECT_FALSE(ShouldIgnoreNavigation(
ui::PageTransitionFromInt(ui::PAGE_TRANSITION_LINK |
ui::PAGE_TRANSITION_CLIENT_REDIRECT),
false, false, false));
// Also tests the case with 2+ qualifiers.
EXPECT_TRUE(ShouldIgnoreNavigation(
ui::PageTransitionFromInt(ui::PAGE_TRANSITION_LINK |
ui::PAGE_TRANSITION_FROM_ADDRESS_BAR |
ui::PAGE_TRANSITION_CLIENT_REDIRECT),
false, false, false));
// The navigation is triggered by a server side redirect.
EXPECT_FALSE(ShouldIgnoreNavigation(
ui::PageTransitionFromInt(ui::PAGE_TRANSITION_LINK |
ui::PAGE_TRANSITION_SERVER_REDIRECT),
false, false, false));
// Also tests the case with 2+ qualifiers.
EXPECT_TRUE(ShouldIgnoreNavigation(
ui::PageTransitionFromInt(ui::PAGE_TRANSITION_LINK |
ui::PAGE_TRANSITION_FROM_ADDRESS_BAR |
ui::PAGE_TRANSITION_SERVER_REDIRECT),
false, false, false));
}
// Just in case, does the same with ui::PAGE_TRANSITION_TYPED.
TEST(PageTransitionUtilTest,
TestShouldIgnoreNavigationWithTypedWithQualifiers) {
EXPECT_TRUE(ShouldIgnoreNavigation(
ui::PageTransitionFromInt(ui::PAGE_TRANSITION_TYPED |
ui::PAGE_TRANSITION_FORWARD_BACK),
false, false, false));
EXPECT_TRUE(ShouldIgnoreNavigation(
ui::PageTransitionFromInt(ui::PAGE_TRANSITION_TYPED |
ui::PAGE_TRANSITION_FORWARD_BACK),
false, false, false));
EXPECT_TRUE(ShouldIgnoreNavigation(
ui::PageTransitionFromInt(ui::PAGE_TRANSITION_TYPED |
ui::PAGE_TRANSITION_FROM_ADDRESS_BAR),
false, false, false));
EXPECT_TRUE(ShouldIgnoreNavigation(
ui::PageTransitionFromInt(ui::PAGE_TRANSITION_TYPED |
ui::PAGE_TRANSITION_HOME_PAGE),
false, false, false));
EXPECT_TRUE(ShouldIgnoreNavigation(
ui::PageTransitionFromInt(ui::PAGE_TRANSITION_TYPED |
ui::PAGE_TRANSITION_FROM_API),
false, false, false));
EXPECT_TRUE(ShouldIgnoreNavigation(
ui::PageTransitionFromInt(ui::PAGE_TRANSITION_TYPED |
ui::PAGE_TRANSITION_FROM_ADDRESS_BAR |
ui::PAGE_TRANSITION_CLIENT_REDIRECT),
false, false, false));
}
// Test that ShouldIgnoreNavigation accepts SERVER_REDIRECT and CLIENT_REDIRECT
// when |is_in_fenced_frame_tree| is false.
TEST(PageTransitionUtilTest, TestShouldIgnoreNavigationWithClientRedirect) {
EXPECT_FALSE(ShouldIgnoreNavigation(
ui::PageTransitionFromInt(ui::PAGE_TRANSITION_LINK), false, false,
false));
EXPECT_FALSE(ShouldIgnoreNavigation(
ui::PageTransitionFromInt(ui::PAGE_TRANSITION_LINK |
ui::PAGE_TRANSITION_CLIENT_REDIRECT),
false, false, false));
EXPECT_FALSE(ShouldIgnoreNavigation(
ui::PageTransitionFromInt(ui::PAGE_TRANSITION_LINK |
ui::PAGE_TRANSITION_SERVER_REDIRECT),
false, false, false));
EXPECT_FALSE(ShouldIgnoreNavigation(
ui::PageTransitionFromInt(ui::PAGE_TRANSITION_LINK |
ui::PAGE_TRANSITION_SERVER_REDIRECT |
ui::PAGE_TRANSITION_SERVER_REDIRECT),
false, false, false));
EXPECT_TRUE(ShouldIgnoreNavigation(
ui::PageTransitionFromInt(ui::PAGE_TRANSITION_LINK |
ui::PAGE_TRANSITION_CLIENT_REDIRECT |
ui::PAGE_TRANSITION_HOME_PAGE),
false, false, false));
EXPECT_TRUE(ShouldIgnoreNavigation(
ui::PageTransitionFromInt(ui::PAGE_TRANSITION_LINK |
ui::PAGE_TRANSITION_HOME_PAGE),
false, false, false));
}
// Test that MaskOutPageTransition correctly remove a qualifier from a given
// |page_transition|.
TEST(PageTransitionUtilTest, TestMaskOutPageTransition) {
ui::PageTransition page_transition = ui::PageTransitionFromInt(
ui::PAGE_TRANSITION_LINK | ui::PAGE_TRANSITION_CLIENT_REDIRECT);
EXPECT_EQ(static_cast<int>(ui::PAGE_TRANSITION_LINK),
static_cast<int>(MaskOutPageTransition(
page_transition, ui::PAGE_TRANSITION_CLIENT_REDIRECT)));
page_transition = ui::PageTransitionFromInt(
ui::PAGE_TRANSITION_LINK | ui::PAGE_TRANSITION_SERVER_REDIRECT);
EXPECT_EQ(static_cast<int>(ui::PAGE_TRANSITION_LINK),
static_cast<int>(MaskOutPageTransition(
page_transition, ui::PAGE_TRANSITION_SERVER_REDIRECT)));
}
// Test that ShouldIgnoreNavigation accepts iff |has_user_gesture| is true
// when |is_in_fenced_frame_tree| is true.
TEST(PageTransitionUtilTest, TestInFencedFrameTree) {
EXPECT_TRUE(ShouldIgnoreNavigation(
ui::PageTransitionFromInt(ui::PAGE_TRANSITION_AUTO_SUBFRAME), false, true,
false));
EXPECT_FALSE(ShouldIgnoreNavigation(
ui::PageTransitionFromInt(ui::PAGE_TRANSITION_AUTO_SUBFRAME), false, true,
true));
}
} // namespace apps