15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CONTENT_BROWSER_SSL_SSL_POLICY_BACKEND_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CONTENT_BROWSER_SSL_SSL_POLICY_BACKEND_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector>
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h"
12868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/string16.h"
131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "content/public/browser/ssl_host_state_delegate.h"
14a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "net/cert/cert_status_flags.h"
15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "net/cert/x509_certificate.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content {
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class NavigationControllerImpl;
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SSLPolicyBackend {
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  explicit SSLPolicyBackend(NavigationControllerImpl* controller);
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Records that a host has run insecure content.
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void HostRanInsecureContent(const std::string& host, int pid);
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns whether the specified host ran insecure content.
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool DidHostRunInsecureContent(const std::string& host, int pid) const;
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
30a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  // Records that |cert| is permitted to be used for |host| in the future, for
31a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  // a specific error type.
321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  void AllowCertForHost(const net::X509Certificate& cert,
33a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)                        const std::string& host,
34a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)                        net::CertStatus error);
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Queries whether |cert| is allowed for |host|. Returns true in
376e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  // |expired_previous_decision| if a user decision had been made previously but
386e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  // that decision has expired, otherwise false.
391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  SSLHostStateDelegate::CertJudgment QueryPolicy(
401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      const net::X509Certificate& cert,
411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      const std::string& host,
421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      net::CertStatus error,
431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      bool* expired_previous_decision);
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
466e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  // SSL state delegate specific for each host.
476e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  SSLHostStateDelegate* ssl_host_state_delegate_;
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NavigationControllerImpl* controller_;
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(SSLPolicyBackend);
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace content
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CONTENT_BROWSER_SSL_SSL_POLICY_BACKEND_H_
57