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.
5 // Browser-side interface to analyze zip files for SafeBrowsing download
6 // protection. The actual zip decoding is performed in a sandboxed utility
9 // This class lives on the UI thread.
11 #ifndef CHROME_BROWSER_SAFE_BROWSING_SANDBOXED_ZIP_ANALYZER_H_
12 #define CHROME_BROWSER_SAFE_BROWSING_SANDBOXED_ZIP_ANALYZER_H_
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"
26 namespace safe_browsing
{
27 namespace zip_analyzer
{
31 class SandboxedZipAnalyzer
: public content::UtilityProcessHostClient
{
33 // Callback that is invoked when the analysis results are ready.
34 typedef base::Callback
<void(const zip_analyzer::Results
&)> ResultCallback
;
36 SandboxedZipAnalyzer(const base::FilePath
& zip_file
,
37 const ResultCallback
& result_callback
);
39 // Posts a task to start the zip analysis in the utility process.
43 virtual ~SandboxedZipAnalyzer();
45 // Creates the sandboxed utility process and tells it to start analysis.
46 // Runs on a worker thread.
47 void AnalyzeInSandbox();
49 // content::UtilityProcessHostClient implementation.
50 // These notifications run on the IO thread.
51 virtual bool OnMessageReceived(const IPC::Message
& message
) OVERRIDE
;
53 // Notification that the utility process is running, and we can now get its
55 void OnUtilityProcessStarted();
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
);
61 // Launches the utility process. Must run on the IO thread.
62 void StartProcessOnIOThread();
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.
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_
;
73 DISALLOW_COPY_AND_ASSIGN(SandboxedZipAnalyzer
);
76 } // namespace safe_browsing
78 #endif // CHROME_BROWSER_SAFE_BROWSING_SANDBOXED_ZIP_ANALYZER_H_