910e62b5创建于 1月15日历史提交
// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "content/public/test/btm_service_test_utils.h"

#include "base/logging.h"
#include "content/browser/btm/btm_bounce_detector.h"
#include "content/public/browser/btm_redirect_info.h"

namespace content {
void Populate3PcExceptions(BrowserContext* browser_context,
                           WebContents* web_contents,
                           const GURL& initial_url,
                           const GURL& final_url,
                           base::span<BtmRedirectInfoPtr> redirects) {
  btm::Populate3PcExceptions(browser_context, web_contents, initial_url,
                             final_url, redirects);
}

bool Are3PcsGenerallyEnabled(BrowserContext* browser_context,
                             WebContents* web_contents) {
  return btm::Are3PcsGenerallyEnabled(browser_context, web_contents);
}

BtmRedirectChainObserver::BtmRedirectChainObserver(BtmService* service,
                                                   GURL final_url)
    : final_url_(std::move(final_url)) {
  observation_.Observe(service);
}

BtmRedirectChainObserver::~BtmRedirectChainObserver() = default;

void BtmRedirectChainObserver::OnChainHandled(
    const std::vector<BtmRedirectInfoPtr>& redirects,
    const BtmRedirectChainInfoPtr& chain) {
  if (chain->final_url == final_url_) {
    if (!redirects_.has_value()) {
      redirects_.emplace();
      for (const BtmRedirectInfoPtr& redirect : redirects) {
        redirects_->push_back(std::make_unique<BtmRedirectInfo>(*redirect));
      }
    } else {
      LOG(WARNING)
          << "BtmRedirectChainObserver: multiple chains handled ending at "
          << final_url_;
    }
    run_loop_.Quit();
  }
}

void BtmRedirectChainObserver::Wait() {
  run_loop_.Run();
}

}  // namespace content