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