• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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