// Copyright 2022 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/browser/preloading/prerender/prerender_navigation_utils.h"
#include "net/base/registry_controlled_domains/registry_controlled_domain.h"

namespace content::prerender_navigation_utils {

// https://wicg.github.io/nav-speculation/prerendering.html#no-bad-navs
// > If browsingContext is a top level prerendering browsing context, and any of
// the following hold:
bool IsDisallowedHttpResponseCode(int response_code) {
  // > - response’s status is 204 or 205,
  if (response_code == 204 || response_code == 205) {
    return true;
  }
  return response_code < 100 || response_code > 399;
}

bool IsSameSite(const GURL& target_url, const url::Origin& origin) {
  return target_url.GetScheme() == origin.scheme() &&
         net::registry_controlled_domains::SameDomainOrHost(
             target_url, origin,
             net::registry_controlled_domains::INCLUDE_PRIVATE_REGISTRIES);
}

bool IsSameSiteCrossOrigin(const GURL& target_url, const url::Origin& origin) {
  if (!IsSameSite(target_url, origin)) {
    return false;
  }
  if (origin.IsSameOriginWith(target_url)) {
    return false;
  }
  return true;
}

bool IsCrossSite(const GURL& target_url, const url::Origin& origin) {
  return !IsSameSite(target_url, origin);
}

}  // namespace content::prerender_navigation_utils
