#ifndef CHROME_BROWSER_DIPS_DIPS_BOUNCE_DETECTOR_H_
#define CHROME_BROWSER_DIPS_DIPS_BOUNCE_DETECTOR_H_
#include <memory>
#include <string>
#include <variant>
#include "base/check_deref.h"
#include "base/functional/callback.h"
#include "base/memory/raw_ptr.h"
#include "base/observer_list.h"
#include "base/observer_list_types.h"
#include "base/time/default_clock.h"
#include "base/timer/timer.h"
#include "base/types/optional_ref.h"
#include "chrome/browser/dips/cookie_access_filter.h"
#include "chrome/browser/dips/dips_redirect_info.h"
#include "chrome/browser/dips/dips_service.h"
#include "chrome/browser/dips/dips_utils.h"
#include "content/public/browser/allow_service_worker_result.h"
#include "content/public/browser/cookie_access_details.h"
#include "content/public/browser/dedicated_worker_service.h"
#include "content/public/browser/navigation_handle.h"
#include "content/public/browser/navigation_handle_user_data.h"
#include "content/public/browser/render_frame_host.h"
#include "content/public/browser/shared_worker_service.h"
#include "content/public/browser/web_contents_observer.h"
#include "content/public/browser/web_contents_user_data.h"
#include "services/metrics/public/cpp/ukm_source_id.h"
#include "url/gurl.h"
namespace base {
class Clock;
class TickClock;
}
namespace url {
class Origin;
}
DIPSIssueHandler;
DIPSIssueReportingCallback;
class ClientBounceDetectionState { … };
DIPSNavigationStart;
constexpr size_t kDIPSRedirectChainMax = …;
inline constexpr int kAllSitesFollowingFirstPartyLookbackLength = …;
class DIPSRedirectContext { … };
class DIPSBounceDetectorDelegate { … };
class ServerBounceDetectionState
: public content::NavigationHandleUserData<ServerBounceDetectionState> { … };
class DIPSNavigationHandle { … };
class DIPSBounceDetector { … };
class DelayedChainHandler { … };
class RedirectChainDetector
: public content::WebContentsObserver,
public content::WebContentsUserData<RedirectChainDetector>,
public DIPSBounceDetectorDelegate { … };
class DIPSWebContentsObserver
: public content::WebContentsObserver,
public content::WebContentsUserData<DIPSWebContentsObserver>,
public content::SharedWorkerService::Observer,
public content::DedicatedWorkerService::Observer,
public RedirectChainDetector::Observer { … };
namespace dips {
ukm::SourceId GetInitialRedirectSourceId(
content::NavigationHandle* navigation_handle);
bool IsOrWasInPrimaryPage(content::RenderFrameHost* render_frame_host);
}
#endif