// Copyright 2017 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.

#include "chrome/browser/ssl/ssl_blocking_page_base.h"

#include "chrome/browser/ssl/cert_report_helper.h"
#include "chrome/browser/ssl/ssl_cert_reporter.h"
#include "components/security_interstitials/content/security_interstitial_controller_client.h"

SSLBlockingPageBase::SSLBlockingPageBase(
    content::WebContents* web_contents,
    certificate_reporting::ErrorReport::InterstitialReason interstitial_reason,
    const net::SSLInfo& ssl_info,
    const GURL& request_url,
    std::unique_ptr<SSLCertReporter> ssl_cert_reporter,
    bool overridable,
    const base::Time& time_triggered,
    std::unique_ptr<
        security_interstitials::SecurityInterstitialControllerClient>
        controller_client)
    : security_interstitials::SecurityInterstitialPage(
          web_contents,
          request_url,
          std::move(controller_client)),
      cert_report_helper_(
          new CertReportHelper(std::move(ssl_cert_reporter),
                               web_contents,
                               request_url,
                               ssl_info,
                               interstitial_reason,
                               overridable,
                               time_triggered,
                               controller()->metrics_helper())) {}

SSLBlockingPageBase::~SSLBlockingPageBase() {}

void SSLBlockingPageBase::OnInterstitialClosing() {
  UpdateMetricsAfterSecurityInterstitial();
  cert_report_helper_->FinishCertCollection();
}

CertReportHelper* SSLBlockingPageBase::cert_report_helper() {
  return cert_report_helper_.get();
}
