Home | History | Annotate | Download | only in net
      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 CHROME_BROWSER_NET_CRL_SET_FETCHER_H_
      6 #define CHROME_BROWSER_NET_CRL_SET_FETCHER_H_
      7 
      8 #include <string>
      9 
     10 #include "base/compiler_specific.h"
     11 #include "base/memory/ref_counted.h"
     12 #include "chrome/browser/component_updater/component_updater_service.h"
     13 
     14 namespace base {
     15 class DictionaryValue;
     16 class FilePath;
     17 }
     18 
     19 namespace net {
     20 class CRLSet;
     21 }
     22 
     23 class CRLSetFetcher : public component_updater::ComponentInstaller,
     24                       public base::RefCountedThreadSafe<CRLSetFetcher> {
     25  public:
     26   CRLSetFetcher();
     27 
     28   void StartInitialLoad(component_updater::ComponentUpdateService* cus);
     29 
     30   // DeleteFromDisk asynchronously delete the CRLSet file.
     31   void DeleteFromDisk();
     32 
     33   // ComponentInstaller interface
     34   virtual void OnUpdateError(int error) OVERRIDE;
     35   virtual bool Install(const base::DictionaryValue& manifest,
     36                        const base::FilePath& unpack_path) OVERRIDE;
     37   virtual bool GetInstalledFile(const std::string& file,
     38                                 base::FilePath* installed_file) OVERRIDE;
     39 
     40  private:
     41   friend class base::RefCountedThreadSafe<CRLSetFetcher>;
     42 
     43   virtual ~CRLSetFetcher();
     44 
     45   // GetCRLSetbase::FilePath gets the path of the CRL set file in the user data
     46   // dir.
     47   bool GetCRLSetFilePath(base::FilePath* path) const;
     48 
     49   // DoInitialLoadFromDisk runs on the FILE thread and attempts to load a CRL
     50   // set from the user-data dir. It then registers this object as a component
     51   // in order to get updates.
     52   void DoInitialLoadFromDisk();
     53 
     54   // LoadFromDisk runs on the FILE thread and attempts to load a CRL set
     55   // from |load_from|.
     56   void LoadFromDisk(base::FilePath load_from,
     57                     scoped_refptr<net::CRLSet>* out_crl_set);
     58 
     59   // SetCRLSetIfNewer runs on the IO thread and installs a CRL set
     60   // as the global CRL set if it's newer than the existing one.
     61   void SetCRLSetIfNewer(scoped_refptr<net::CRLSet> crl_set);
     62 
     63   // RegisterComponent registers this object as a component updater.
     64   void RegisterComponent(uint32 sequence_of_loaded_crl);
     65 
     66   // DoDeleteFromDisk runs on the FILE thread and removes the CRLSet file from
     67   // the disk.
     68   void DoDeleteFromDisk();
     69 
     70   component_updater::ComponentUpdateService* cus_;
     71 
     72   // We keep a pointer to the current CRLSet for use on the FILE thread when
     73   // applying delta updates.
     74   scoped_refptr<net::CRLSet> crl_set_;
     75 
     76   DISALLOW_COPY_AND_ASSIGN(CRLSetFetcher);
     77 };
     78 
     79 #endif  // CHROME_BROWSER_NET_CRL_SET_FETCHER_H_
     80