ssl_blocking_page.h revision ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16
1d4f11c0cf476dd854eaebec1cbacb1afc7bea18emachenbach@chromium.org// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2d4f11c0cf476dd854eaebec1cbacb1afc7bea18emachenbach@chromium.org// Use of this source code is governed by a BSD-style license that can be
3d4f11c0cf476dd854eaebec1cbacb1afc7bea18emachenbach@chromium.org// found in the LICENSE file.
4d4f11c0cf476dd854eaebec1cbacb1afc7bea18emachenbach@chromium.org
5d4f11c0cf476dd854eaebec1cbacb1afc7bea18emachenbach@chromium.org#ifndef CHROME_BROWSER_SSL_SSL_BLOCKING_PAGE_H_
6d4f11c0cf476dd854eaebec1cbacb1afc7bea18emachenbach@chromium.org#define CHROME_BROWSER_SSL_SSL_BLOCKING_PAGE_H_
7d4f11c0cf476dd854eaebec1cbacb1afc7bea18emachenbach@chromium.org
8d4f11c0cf476dd854eaebec1cbacb1afc7bea18emachenbach@chromium.org#include <string>
9d4f11c0cf476dd854eaebec1cbacb1afc7bea18emachenbach@chromium.org#include <vector>
10d4f11c0cf476dd854eaebec1cbacb1afc7bea18emachenbach@chromium.org
11d4f11c0cf476dd854eaebec1cbacb1afc7bea18emachenbach@chromium.org#include "base/callback.h"
12d4f11c0cf476dd854eaebec1cbacb1afc7bea18emachenbach@chromium.org#include "base/strings/string16.h"
13d4f11c0cf476dd854eaebec1cbacb1afc7bea18emachenbach@chromium.org#include "base/time/time.h"
14ada3a6017e603965f87fa34f6e2fa60379e8d697machenbach@chromium.org#include "chrome/browser/history/history_service.h"
15d4f11c0cf476dd854eaebec1cbacb1afc7bea18emachenbach@chromium.org#include "content/public/browser/interstitial_page_delegate.h"
16d4f11c0cf476dd854eaebec1cbacb1afc7bea18emachenbach@chromium.org#include "net/ssl/ssl_info.h"
179aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org#include "url/gurl.h"
189aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org
199aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.orgnamespace base {
209aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.orgclass DictionaryValue;
216313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org}
229aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org
239aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.orgnamespace content {
249aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.orgclass InterstitialPage;
259aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.orgclass WebContents;
269aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org}
279aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org
289aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org// This class is responsible for showing/hiding the interstitial page that is
299aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org// shown when a certificate error happens.
309aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org// It deletes itself when the interstitial page is closed.
319aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.orgclass SSLBlockingPage : public content::InterstitialPageDelegate {
326313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org public:
336313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org  SSLBlockingPage(
349aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org      content::WebContents* web_contents,
359aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org      int cert_error,
369aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org      const net::SSLInfo& ssl_info,
376313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org      const GURL& request_url,
386313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org      bool overridable,
399aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org      bool strict_enforcement,
409aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org      const base::Callback<void(bool)>& callback);
416313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org  virtual ~SSLBlockingPage();
426313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org
439aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org  // A method that sets strings in the specified dictionary from the passed
449aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org  // vector so that they can be used to resource the ssl_roadblock.html/
456313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org  // ssl_error.html files.
469aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org  // Note: there can be up to 5 strings in |extra_info|.
479aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org  static void SetExtraInfo(base::DictionaryValue* strings,
486313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org                           const std::vector<string16>& extra_info);
496313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org
506313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org protected:
516313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org  // InterstitialPageDelegate implementation.
526313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org  virtual std::string GetHTMLContents() OVERRIDE;
536313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org  virtual void CommandReceived(const std::string& command) OVERRIDE;
549aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org  virtual void OverrideEntry(content::NavigationEntry* entry) OVERRIDE;
559aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org  virtual void OverrideRendererPrefs(
569aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org      content::RendererPreferences* prefs) OVERRIDE;
579aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org  virtual void OnProceed() OVERRIDE;
589aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org  virtual void OnDontProceed() OVERRIDE;
599aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org
609aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org private:
619aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org  void NotifyDenyCertificate();
629aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org  void NotifyAllowCertificate();
639aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org
649aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org  // Used to query the HistoryService to see if the URL is in history. For UMA.
659aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org  void OnGotHistoryCount(HistoryService::Handle handle,
669aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org                         bool success,
679aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org                         int num_visits,
689aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org                         base::Time first_visit);
699aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org
709aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org  base::Callback<void(bool)> callback_;
719aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org
729aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org  content::WebContents* web_contents_;
739aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org  int cert_error_;
749aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org  base::TimeTicks display_start_time_;
759aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org  net::SSLInfo ssl_info_;
769aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org  GURL request_url_;
779aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org  // Could the user successfully override the error?
789aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org  bool overridable_;
799aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org  // Has the site requested strict enforcement of certificate errors?
809aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org  bool strict_enforcement_;
819aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org  content::InterstitialPage* interstitial_page_;  // Owns us.
829aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org  // Is the hostname for an internal network?
839aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org  bool internal_;
849aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org  // How many times is this same URL in history?
859aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org  int num_visits_;
869aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org  // Used for getting num_visits_.
879aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org  CancelableRequestConsumer request_consumer_;
889aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org
899aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org  // For the FieldTrial: this contains the name of the condition.
909aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org  std::string trialCondition_;
919aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org
929aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org  DISALLOW_COPY_AND_ASSIGN(SSLBlockingPage);
939aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org};
949aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org
959aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org#endif  // CHROME_BROWSER_SSL_SSL_BLOCKING_PAGE_H_
969aaa825cf89e1bcfece269a453300ebf4a26d64dmachenbach@chromium.org