// Copyright 2019 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_LOOKALIKES_LOOKALIKE_URL_NAVIGATION_THROTTLE_H_ #define CHROME_BROWSER_LOOKALIKES_LOOKALIKE_URL_NAVIGATION_THROTTLE_H_ #include <memory> #include <set> #include <string> #include <vector> #include "base/feature_list.h" #include "base/memory/raw_ptr.h" #include "base/memory/weak_ptr.h" #include "base/timer/timer.h" #include "chrome/browser/lookalikes/lookalike_url_blocking_page.h" #include "components/url_formatter/url_formatter.h" #include "content/public/browser/navigation_throttle.h" #include "services/metrics/public/cpp/ukm_source_id.h" namespace content { class NavigationHandle; } // namespace content class Profile; namespace lookalikes { struct DomainInfo; } // A feature to enable Prewarming the Lookalike check during navigation. URLs in // the redirect chain are queried while the request is on the wire instead of // when the request is ready to commit. BASE_DECLARE_FEATURE(kPrewarmLookalikeCheck); // Returns true if the redirect is deemed to be safe. These are generally // defensive registrations where the domain owner redirects the IDN to the ASCII // domain. See the unit tests for examples. // In short, |url| must redirect to the root of |safe_url_host| or one // of its subdomains. bool IsSafeRedirect(const std::string& safe_url_host, const std::vector<GURL>& redirect_chain); // Observes navigations and shows an interstitial if the navigated domain name // is visually similar to a top domain or a domain with a site engagement score. // // Remember to update //docs/idn.md with the appropriate information if you // modify the lookalike heuristics. // // This throttle assumes that two navigations never share the same throttle. class LookalikeUrlNavigationThrottle : public content::NavigationThrottle { … }; #endif // CHROME_BROWSER_LOOKALIKES_LOOKALIKE_URL_NAVIGATION_THROTTLE_H_