// Copyright 2021 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/ssl/https_defaulted_callbacks.h"

#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ssl/https_only_mode_tab_helper.h"
#include "chrome/browser/ssl/typed_navigation_upgrade_throttle.h"
#include "components/omnibox/common/omnibox_features.h"
#include "components/security_interstitials/content/stateful_ssl_host_state_delegate.h"
#include "content/public/browser/navigation_handle.h"
#include "content/public/browser/web_contents.h"
#include "url/gurl.h"
#include "url/url_constants.h"

bool ShouldIgnoreSslInterstitialBecauseNavigationDefaultedToHttps(
    content::NavigationHandle* handle) {
  DCHECK_EQ(url::kHttpsScheme, handle->GetURL().GetScheme());

  // Check typed navigation upgrade status.
  if (base::FeatureList::IsEnabled(omnibox::kDefaultTypedNavigationsToHttps) &&
      TypedNavigationUpgradeThrottle::IsNavigationUsingHttpsAsDefaultScheme(
          *handle)) {
    return true;
  }

  // Check HTTPS-Only Mode upgrade status.
  // Suppress any SSL errors if the navigation was upgraded to HTTPS by
  // HTTPS-First Mode but it has not yet fallen back to HTTP. If the user
  // already clicked through the HTTPS-First Mode interstitial then the SSL
  // error should no longer be suppressed.
  auto* https_only_mode_helper =
      HttpsOnlyModeTabHelper::FromWebContents(handle->GetWebContents());
  bool is_upgraded = https_only_mode_helper &&
                     https_only_mode_helper->is_navigation_upgraded();

  Profile* profile = Profile::FromBrowserContext(
      handle->GetWebContents()->GetBrowserContext());
  if (!profile) {
    // In the edge case of there not being a Profile associated with this
    // navigation, fail safe by not suppressing SSL interstitials.
    return false;
  }
  StatefulSSLHostStateDelegate* state =
      static_cast<StatefulSSLHostStateDelegate*>(
          profile->GetSSLHostStateDelegate());
  bool is_allowlisted =
      state && state->IsHttpAllowedForHost(handle->GetURL().GetHost(),
                                           handle->GetWebContents()
                                               ->GetPrimaryMainFrame()
                                               ->GetStoragePartition());

  return is_upgraded && !is_allowlisted;
}
