Index: chrome/browser/safe_browsing/sandboxed_dmg_analyzer_mac.h |
diff --git a/chrome/browser/safe_browsing/sandboxed_dmg_analyzer_mac.h b/chrome/browser/safe_browsing/sandboxed_dmg_analyzer_mac.h |
index f016699aee0a6dfc5e60af6a3231466fa238a4e7..fba7aa083122aae1a97b7708954be871947d1b79 100644 |
--- a/chrome/browser/safe_browsing/sandboxed_dmg_analyzer_mac.h |
+++ b/chrome/browser/safe_browsing/sandboxed_dmg_analyzer_mac.h |
@@ -9,54 +9,55 @@ |
#include "base/files/file.h" |
#include "base/files/file_path.h" |
#include "base/macros.h" |
-#include "base/memory/weak_ptr.h" |
-#include "content/public/browser/utility_process_host.h" |
-#include "content/public/browser/utility_process_host_client.h" |
+#include "base/memory/ref_counted.h" |
+#include "chrome/common/safe_archive_analyzer.mojom.h" |
+#include "content/public/browser/utility_process_mojo_client.h" |
namespace safe_browsing { |
-namespace zip_analyzer { |
-struct Results; |
-} |
+using Results = zip_analyzer::Results; |
dcheng
2017/03/10 04:13:43
Nit: no using declaration in header (Results is a
Noel Gordon
2017/03/10 14:53:17
Right.
|
-// This class is used to analyze DMG files in a sandboxed utility process for |
-// file download protection. This class must be created on the UI thread, and |
+// This class is used to analyze DMG files in a sandboxed utility process |
+// for file download protection. This class must be created on the UI thread, |
// which is where the result callback will be invoked. |
-class SandboxedDMGAnalyzer : public content::UtilityProcessHostClient { |
+class SandboxedDMGAnalyzer |
+ : public base::RefCountedThreadSafe<SandboxedDMGAnalyzer> { |
public: |
- // Callback that is invoked when the analysis results are ready. |
- using ResultsCallback = base::Callback<void(const zip_analyzer::Results&)>; |
+ using ResultCallback = base::Callback<void(const Results&)>; |
SandboxedDMGAnalyzer(const base::FilePath& dmg_file, |
- const ResultsCallback& callback); |
+ const ResultCallback& callback); |
- // Begins the analysis. This must be called on the UI thread. |
+ // Starts the analysis. Must be called on the UI thread. |
void Start(); |
private: |
- ~SandboxedDMGAnalyzer() override; |
+ friend class base::RefCountedThreadSafe<SandboxedDMGAnalyzer>; |
- // Called on the blocking pool, this opens the DMG file, in preparation for |
- // sending the FD to the utility process. |
- void OpenDMGFile(); |
+ ~SandboxedDMGAnalyzer(); |
- // Called on the IO thread, this starts the utility process. |
- void StartAnalysis(); |
+ // Prepare the file for analysis. |
+ void PrepareFileToAnalyze(); |
- // content::UtilityProcessHostClient: |
- void OnProcessCrashed(int exit_code) override; |
- void OnProcessLaunchFailed(int error_code) override; |
- bool OnMessageReceived(const IPC::Message& message) override; |
+ // If file preparation failed, analysis has failed: report failure. |
+ void ReportFileFailure(); |
- // Message handler to receive the results of the analysis. Invokes the |
- // |callback_|. |
- void OnAnalysisFinished(const zip_analyzer::Results& results); |
+ // Starts the utility process and sends it a file analyze request. |
+ void AnalyzeFile(base::File file); |
- const base::FilePath file_path_; // The path of the DMG file. |
- base::File file_; // The opened file handle for |file_path_|. |
+ // The response containing the file analyze results. |
+ void AnalyzeFileDone(const Results& results); |
- const ResultsCallback callback_; // Result callback. |
- bool callback_called_; // Whether |callback_| has already been invoked. |
+ // The file path of the file to analyze. |
+ const base::FilePath file_path_; |
+ |
+ // Utility client used to send analyze tasks to the utility process. |
+ std::unique_ptr< |
+ content::UtilityProcessMojoClient<chrome::mojom::SafeArchiveAnalyzer>> |
+ utility_process_mojo_client_; |
+ |
+ // Callback invoked on the UI thread with the file analyze results. |
+ const ResultCallback callback_; |
DISALLOW_COPY_AND_ASSIGN(SandboxedDMGAnalyzer); |
}; |