Home | History | Annotate | Download | only in ssl
      1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef CONTENT_BROWSER_SSL_SSL_MANAGER_H_
      6 #define CONTENT_BROWSER_SSL_SSL_MANAGER_H_
      7 
      8 #include <string>
      9 
     10 #include "base/basictypes.h"
     11 #include "base/memory/scoped_ptr.h"
     12 #include "base/memory/weak_ptr.h"
     13 #include "content/browser/ssl/ssl_error_handler.h"
     14 #include "content/browser/ssl/ssl_policy_backend.h"
     15 #include "content/common/content_export.h"
     16 #include "content/public/browser/global_request_id.h"
     17 #include "net/base/net_errors.h"
     18 #include "net/cert/cert_status_flags.h"
     19 #include "url/gurl.h"
     20 
     21 namespace net {
     22 class SSLInfo;
     23 }
     24 
     25 namespace content {
     26 class BrowserContext;
     27 class NavigationEntryImpl;
     28 class NavigationControllerImpl;
     29 class SSLPolicy;
     30 struct LoadCommittedDetails;
     31 struct LoadFromMemoryCacheDetails;
     32 struct ResourceRedirectDetails;
     33 struct ResourceRequestDetails;
     34 
     35 // The SSLManager SSLManager controls the SSL UI elements in a WebContents.  It
     36 // listens for various events that influence when these elements should or
     37 // should not be displayed and adjusts them accordingly.
     38 //
     39 // There is one SSLManager per tab.
     40 // The security state (secure/insecure) is stored in the navigation entry.
     41 // Along with it are stored any SSL error code and the associated cert.
     42 
     43 class SSLManager {
     44  public:
     45   // Entry point for SSLCertificateErrors.  This function begins the process
     46   // of resolving a certificate error during an SSL connection.  SSLManager
     47   // will adjust the security UI and either call |CancelSSLRequest| or
     48   // |ContinueSSLRequest| of |delegate| with |id| as the first argument.
     49   //
     50   // Called on the IO thread.
     51   static void OnSSLCertificateError(
     52       const base::WeakPtr<SSLErrorHandler::Delegate>& delegate,
     53       const GlobalRequestID& id,
     54       ResourceType resource_type,
     55       const GURL& url,
     56       int render_process_id,
     57       int render_frame_id,
     58       const net::SSLInfo& ssl_info,
     59       bool fatal);
     60 
     61   // Called when SSL state for a host or tab changes.
     62   static void NotifySSLInternalStateChanged(BrowserContext* context);
     63 
     64   // Construct an SSLManager for the specified tab.
     65   // If |delegate| is NULL, SSLPolicy::GetDefaultPolicy() is used.
     66   explicit SSLManager(NavigationControllerImpl* controller);
     67   virtual ~SSLManager();
     68 
     69   SSLPolicy* policy() { return policy_.get(); }
     70   SSLPolicyBackend* backend() { return &backend_; }
     71 
     72   // The navigation controller associated with this SSLManager.  The
     73   // NavigationController is guaranteed to outlive the SSLManager.
     74   NavigationControllerImpl* controller() { return controller_; }
     75 
     76   void DidCommitProvisionalLoad(const LoadCommittedDetails& details);
     77   void DidLoadFromMemoryCache(const LoadFromMemoryCacheDetails& details);
     78   void DidStartResourceResponse(const ResourceRequestDetails& details);
     79   void DidReceiveResourceRedirect(const ResourceRedirectDetails& details);
     80 
     81   // Insecure content entry point.
     82   void DidDisplayInsecureContent();
     83   void DidRunInsecureContent(const std::string& security_origin);
     84 
     85  private:
     86   // Update the NavigationEntry with our current state.
     87   void UpdateEntry(NavigationEntryImpl* entry);
     88 
     89   // The backend for the SSLPolicy to actuate its decisions.
     90   SSLPolicyBackend backend_;
     91 
     92   // The SSLPolicy instance for this manager.
     93   scoped_ptr<SSLPolicy> policy_;
     94 
     95   // The NavigationController that owns this SSLManager.  We are responsible
     96   // for the security UI of this tab.
     97   NavigationControllerImpl* controller_;
     98 
     99   DISALLOW_COPY_AND_ASSIGN(SSLManager);
    100 };
    101 
    102 }  // namespace content
    103 
    104 #endif  // CONTENT_BROWSER_SSL_SSL_MANAGER_H_
    105