blob: a359c07f01916220781784793063ac0e776f662d [file] [log] [blame]
// Copyright 2025 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_ENTERPRISE_CONNECTORS_REFERRER_CACHE_UTILS_H_
#define CHROME_BROWSER_ENTERPRISE_CONNECTORS_REFERRER_CACHE_UTILS_H_
#include "base/supports_user_data.h"
#include "components/safe_browsing/core/browser/referrer_chain_provider.h"
class GURL;
namespace content {
class WebContents;
} // namespace content
namespace download {
class DownloadItem;
} // namespace download
namespace enterprise_connectors {
// This function returns a `safe_browsing::ReferrerChain` to be used for DLP
// checks or reporting for enterprise functionality.
safe_browsing::ReferrerChain GetReferrerChain(
const GURL& url,
content::WebContents& web_contents);
// Create a chain containing `download_item`'s URL and whatever corresponding
// chain can be found from the cache in its web contents.
safe_browsing::ReferrerChain GetOrCreateReferrerChain(
download::DownloadItem& download_item);
// Get the cached chain for the given download if it exists.
safe_browsing::ReferrerChain GetCachedReferrerChain(
download::DownloadItem& download_item);
// Obtains the referrer chain for the given arguments and caches it in
// `web_contents`'s user data.
void SetReferrerChain(const GURL& url, content::WebContents& web_contents);
// Cache the given `referrer_chain` into the passed download item's user data.
void SetReferrerChain(safe_browsing::ReferrerChain referrer_chain,
download::DownloadItem& download_item);
// Test-only helper to check if a value has already been cached for the existing
// web contents or download item.
bool HasCachedChainForTesting(base::SupportsUserData& supports_user_data);
} // namespace enterprise_connectors
#endif // CHROME_BROWSER_ENTERPRISE_CONNECTORS_REFERRER_CACHE_UTILS_H_