• 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 // Browser-side interface to analyze zip files for SafeBrowsing download
6 // protection.  The actual zip decoding is performed in a sandboxed utility
7 // process.
8 //
9 // This class lives on the UI thread.
10 
11 #ifndef CHROME_BROWSER_SAFE_BROWSING_SANDBOXED_ZIP_ANALYZER_H_
12 #define CHROME_BROWSER_SAFE_BROWSING_SANDBOXED_ZIP_ANALYZER_H_
13 
14 #include "base/basictypes.h"
15 #include "base/callback.h"
16 #include "base/files/file.h"
17 #include "base/files/file_path.h"
18 #include "base/memory/weak_ptr.h"
19 #include "content/public/browser/utility_process_host.h"
20 #include "content/public/browser/utility_process_host_client.h"
21 
22 namespace IPC {
23 class Message;
24 }
25 
26 namespace safe_browsing {
27 namespace zip_analyzer {
28 struct Results;
29 }
30 
31 class SandboxedZipAnalyzer : public content::UtilityProcessHostClient {
32  public:
33   // Callback that is invoked when the analysis results are ready.
34   typedef base::Callback<void(const zip_analyzer::Results&)> ResultCallback;
35 
36   SandboxedZipAnalyzer(const base::FilePath& zip_file,
37                        const ResultCallback& result_callback);
38 
39   // Posts a task to start the zip analysis in the utility process.
40   void Start();
41 
42  private:
43   virtual ~SandboxedZipAnalyzer();
44 
45   // Creates the sandboxed utility process and tells it to start analysis.
46   // Runs on a worker thread.
47   void AnalyzeInSandbox();
48 
49   // content::UtilityProcessHostClient implementation.
50   // These notifications run on the IO thread.
51   virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
52 
53   // Notification that the utility process is running, and we can now get its
54   // process handle.
55   void OnUtilityProcessStarted();
56 
57   // Notification from the utility process that the zip file has been analyzed,
58   // with the given results.  Runs on the IO thread.
59   void OnAnalyzeZipFileFinished(const zip_analyzer::Results& results);
60 
61   // Launches the utility process.  Must run on the IO thread.
62   void StartProcessOnIOThread();
63 
64   const base::FilePath zip_file_name_;
65   // Once we have opened the file, we store the handle so that we can use it
66   // once the utility process has launched.
67   base::File zip_file_;
68   base::WeakPtr<content::UtilityProcessHost> utility_process_host_;
69   const ResultCallback callback_;
70   // Initialized on the UI thread, but only accessed on the IO thread.
71   bool callback_called_;
72 
73   DISALLOW_COPY_AND_ASSIGN(SandboxedZipAnalyzer);
74 };
75 
76 }  // namespace safe_browsing
77 
78 #endif  // CHROME_BROWSER_SAFE_BROWSING_SANDBOXED_ZIP_ANALYZER_H_
79