// Copyright 2017 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CHROME_BROWSER_UI_BLOCKED_CONTENT_TAB_UNDER_NAVIGATION_THROTTLE_H_ #define CHROME_BROWSER_UI_BLOCKED_CONTENT_TAB_UNDER_NAVIGATION_THROTTLE_H_ #include <memory> #include "base/feature_list.h" #include "content/public/browser/navigation_throttle.h" namespace content { class NavigationHandle; } constexpr char kBlockTabUnderFormatMessage[] = …; // TODO(crbug.com/40623730): Remove this. BASE_DECLARE_FEATURE(kBlockTabUnders); // This class blocks navigations that we've classified as tab-unders. It does so // by communicating with the popup opener tab helper. // // Currently, navigations are considered tab-unders if: // 1. It is a navigation that is "suspicious" // a. It has no user gesture. // b. It is renderer-initiated. // c. It is cross site to the last committed URL in the tab. // d. The navigation started in the background. // 2. The tab has opened a popup and hasn't received a user gesture since then. // This information is tracked by the PopupOpenerTabHelper. // // TODO(csharrison): Unfortunately, the provision that a navigation must start // in the background to be considered a tab-under restricts the scope of the // intervention. For instance, popups that do not completely hide the original // page may cause subsequent tab-under navigations to occur while visible (not // compeltely backgrounded). See https://crbug.com/733736. // // For now, we allow these tab-unders because this pattern seems to be // legitimate for some cases (like auth). class TabUnderNavigationThrottle : public content::NavigationThrottle { … }; #endif // CHROME_BROWSER_UI_BLOCKED_CONTENT_TAB_UNDER_NAVIGATION_THROTTLE_H_