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