// Copyright (c) 2006-2008 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_BLOCKING_PAGE_H_
#define CHROME_BROWSER_SSL_SSL_BLOCKING_PAGE_H_
#pragma once
#include <string>
#include <vector>
#include "base/string16.h"
#include "chrome/browser/ssl/ssl_error_info.h"
#include "content/browser/tab_contents/interstitial_page.h"
class DictionaryValue;
class SSLCertErrorHandler;
// This class is responsible for showing/hiding the interstitial page that is
// shown when a certificate error happens.
// It deletes itself when the interstitial page is closed.
class SSLBlockingPage : public InterstitialPage {
public:
// An interface that classes that want to interact with the SSLBlockingPage
// should implement.
class Delegate {
public:
// Should return the information about the error that causes this blocking
// page.
virtual SSLErrorInfo GetSSLErrorInfo(SSLCertErrorHandler* handler) = 0;
// Notification that the user chose to reject the certificate.
virtual void OnDenyCertificate(SSLCertErrorHandler* handler) = 0;
// Notification that the user chose to accept the certificate.
virtual void OnAllowCertificate(SSLCertErrorHandler* handler) = 0;
protected:
virtual ~Delegate() {}
};
// The severity of the certificate error.
enum ErrorLevel {
ERROR_OVERRIDABLE, // The interstitial page has a "Proceed anyway" button.
ERROR_FATAL, // The interstitial page doesn't allow the user to
// proceed to the site.
};
SSLBlockingPage(SSLCertErrorHandler* handler, Delegate* delegate,
ErrorLevel error_level);
virtual ~SSLBlockingPage();
// A method that sets strings in the specified dictionary from the passed
// vector so that they can be used to resource the ssl_roadblock.html/
// ssl_error.html files.
// Note: there can be up to 5 strings in |extra_info|.
static void SetExtraInfo(DictionaryValue* strings,
const std::vector<string16>& extra_info);
protected:
// InterstitialPage implementation.
virtual std::string GetHTMLContents();
virtual void CommandReceived(const std::string& command);
virtual void UpdateEntry(NavigationEntry* entry);
virtual void Proceed();
virtual void DontProceed();
private:
void NotifyDenyCertificate();
void NotifyAllowCertificate();
// The error we represent. We will either call CancelRequest() or
// ContinueRequest() on this object.
scoped_refptr<SSLCertErrorHandler> handler_;
// Our delegate. It provides useful information, like the title and details
// about this error.
Delegate* delegate_;
// A flag to indicate if we've notified |delegate_| of the user's decision.
bool delegate_has_been_notified_;
// Is the certificate error overridable or fatal?
ErrorLevel error_level_;
DISALLOW_COPY_AND_ASSIGN(SSLBlockingPage);
};
#endif // CHROME_BROWSER_SSL_SSL_BLOCKING_PAGE_H_