// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CHROME_BROWSER_SSL_SSL_ERROR_CONTROLLER_CLIENT_H_
#define CHROME_BROWSER_SSL_SSL_ERROR_CONTROLLER_CLIENT_H_

#include "base/macros.h"
#include "components/security_interstitials/content/security_interstitial_controller_client.h"
#include "net/ssl/ssl_info.h"

namespace content {
class WebContents;
}

// Provides embedder-specific logic for the SSL error page controller.
class SSLErrorControllerClient
    : public security_interstitials::SecurityInterstitialControllerClient {
 public:
  // Actions recorded on recurrent error interstitials. This enum is
  // histogrammed, so do not add, reorder, or remove values. Exposed for
  // testing.
  enum class RecurrentErrorAction {
    kShow,
    kProceed,
    kMaxValue = kProceed,
  };

  SSLErrorControllerClient(
      content::WebContents* web_contents,
      const net::SSLInfo& ssl_info,
      int cert_error,
      const GURL& request_url,
      std::unique_ptr<security_interstitials::MetricsHelper> metrics_helper);
  ~SSLErrorControllerClient() override;

  // security_interstitials::ControllerClient overrides
  void GoBack() override;
  void Proceed() override;
  bool CanLaunchDateAndTimeSettings() override;
  void LaunchDateAndTimeSettings() override;
  bool HasSeenRecurrentError() override;

 private:
  const net::SSLInfo ssl_info_;
  const GURL request_url_;
  const int cert_error_;

  DISALLOW_COPY_AND_ASSIGN(SSLErrorControllerClient);
};

#endif  // CHROME_BROWSER_SSL_SSL_ERROR_CONTROLLER_CLIENT_H_
