Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(5947)

Unified Diff: chrome/browser/ssl/chrome_ssl_host_state_delegate.h

Issue 369703002: Remember user decisions on invalid certificates behind a flag (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fixed broken include Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ssl/chrome_ssl_host_state_delegate.h
diff --git a/chrome/browser/ssl/chrome_ssl_host_state_delegate.h b/chrome/browser/ssl/chrome_ssl_host_state_delegate.h
new file mode 100644
index 0000000000000000000000000000000000000000..4adc094bf61023dd297bf980df8060cef81c36ac
--- /dev/null
+++ b/chrome/browser/ssl/chrome_ssl_host_state_delegate.h
@@ -0,0 +1,106 @@
+// Copyright (c) 2014 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_CHROME_SSL_HOST_STATE_DELEGATE_H_
+#define CHROME_BROWSER_SSL_CHROME_SSL_HOST_STATE_DELEGATE_H_
+
+#include "base/gtest_prod_util.h"
+#include "base/memory/scoped_ptr.h"
+#include "base/time/time.h"
+#include "content/public/browser/ssl_host_state_delegate.h"
+
+class Profile;
+
+namespace base {
+class Clock;
+class DictionaryValue;
+} // namespace base
+
+// Implementation of the tracking of user decisions on SSL errors for sites.
+// Tracks if the user has allowed, denied, or not seen an exception for the
+// specified site, SSL fingerprint, and error. If the user makes a decision,
+// stores the decision until either the session ends or for a length of time
+// (across session restarts), based on command line flags.
+class ChromeSSLHostStateDelegate : public content::SSLHostStateDelegate {
+ public:
+ explicit ChromeSSLHostStateDelegate(Profile* profile);
+ virtual ~ChromeSSLHostStateDelegate();
+
+ // SSLHostStateDelegate:
+ virtual void DenyCert(const std::string& host,
+ net::X509Certificate* cert,
+ net::CertStatus error) OVERRIDE;
+ virtual void AllowCert(const std::string& host,
+ net::X509Certificate* cert,
+ net::CertStatus error) OVERRIDE;
+ virtual void Clear() OVERRIDE;
+ virtual net::CertPolicy::Judgment QueryPolicy(const std::string& host,
+ net::X509Certificate* cert,
+ net::CertStatus error) OVERRIDE;
+ virtual void RevokeAllowAndDenyPreferences(const std::string& host) OVERRIDE;
+ virtual bool HasAllowedOrDeniedCert(const std::string& host) OVERRIDE;
+
+ // Called on the UI thread when the profile is about to be destroyed.
+ void ShutdownOnUIThread() {}
+
+ protected:
+ // SetClock takes ownership of the passed in clock.
+ void SetClock(scoped_ptr<base::Clock> clock);
+
+ private:
+ FRIEND_TEST_ALL_PREFIXES(ForgetInstantlySSLHostStateDelegateTest,
+ MakeAndForgetException);
+ FRIEND_TEST_ALL_PREFIXES(RememberSSLHostStateDelegateTest, AfterRestart);
+
+ // Used to specify whether new content setting entries should be created if
+ // they don't already exist when querying the user's settings.
+ enum CreateDictionaryEntriesDisposition {
+ CreateDictionaryEntries,
+ DoNotCreateDictionaryEntries
+ };
+
+ // Specifies whether user SSL error decisions should be forgetten at the end
+ // of this current session (the old style of remembering decisions), or
+ // whether they should be remembered across session restarts for a specified
+ // length of time, deteremined by
+ // |default_ssl_cert_decision_expiration_delta_|.
+ enum RememberSSLExceptionDecisionsDisposition {
+ ForgetSSLExceptionDecisionsAtSessionEnd,
+ RememberSSLExceptionDecisionsForDelta
+ };
+
+ // Modify the user's content settings to specify a judgement made for a
+ // specific site and certificate, where |url| is the site in question, |cert|
+ // is the certificate with an error, |error| is the error in the certificate,
+ // and |judgement| is the user decision to be recorded.
+ void ChangeCertPolicy(const std::string& host,
+ net::X509Certificate* cert,
+ net::CertStatus error,
+ net::CertPolicy::Judgment judgment);
+
+ // Query the content settings to retrieve a dictionary of certificate
+ // fingerprints and errors of certificates to user decisions, as set by
+ // ChangeCertPolicy. Returns NULL on a failure.
+ //
+ // |dict| specifies the user's full exceptions dictionary for a specific site
+ // in their content settings. Must be retrieved directly from a website
+ // setting in the the profile's HostContentSettingsMap.
+ //
+ // If |create_entries| specifies CreateDictionaryEntries, then
+ // GetValidCertDecisionsDict will create a new set of entries within the
+ // dictionary if they do not already exist. Otherwise will fail and return if
+ // NULL if they do not exist.
+ base::DictionaryValue* GetValidCertDecisionsDict(
+ base::DictionaryValue* dict,
+ CreateDictionaryEntriesDisposition create_entries);
+
+ scoped_ptr<base::Clock> clock_;
+ RememberSSLExceptionDecisionsDisposition should_remember_ssl_decisions_;
+ base::TimeDelta default_ssl_cert_decision_expiration_delta_;
+ Profile* profile_;
+
+ DISALLOW_COPY_AND_ASSIGN(ChromeSSLHostStateDelegate);
+};
+
+#endif // CHROME_BROWSER_SSL_CHROME_SSL_HOST_STATE_DELEGATE_H_

Powered by Google App Engine
This is Rietveld 408576698