blob: f302a95268677c2271fc26a4b7693d9288552725 [file]
// Copyright 2026 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/preloading/preloading_utils.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/search_engines/template_url_service_factory.h"
#include "components/google/core/common/google_util.h"
#include "components/search_engines/template_url_service.h"
#include "content/public/browser/browser_context.h"
#include "url/gurl.h"
namespace preloading_utils {
// If you add a new type of preloading trigger, please refer to the internal
// document go/update-prerender-new-trigger-metrics to make sure that metrics
// include the newly added trigger type.
// LINT.IfChange
const char kBookmarkBarMetricSuffix[] = "BookmarkBar";
const char kNewTabPageMetricSuffix[] = "NewTabPage";
// LINT.ThenChange()
bool ShouldAllowPrefetchRedirection(
content::BrowserContext& browser_context,
const GURL& url,
const std::string& embedder_histogram_suffix) {
// This function is only interested in specific triggers. The related triggers
// don't generate parameters to be identified by search results providers, so
// the triggering search related urls is avoided. See crbug.com/40282403 for
// more details.
if (embedder_histogram_suffix != kBookmarkBarMetricSuffix &&
embedder_histogram_suffix != kNewTabPageMetricSuffix) {
return true;
}
Profile* profile = Profile::FromBrowserContext(&browser_context);
TemplateURLService* template_url_service =
TemplateURLServiceFactory::GetForProfile(profile);
return !((template_url_service &&
template_url_service->IsSearchResultsPageFromDefaultSearchProvider(
url)) ||
google_util::IsGoogleSearchUrl(url));
}
} // namespace preloading_utils