Index: chrome/browser/safe_browsing/sandboxed_zip_analyzer.h |
diff --git a/chrome/browser/safe_browsing/sandboxed_zip_analyzer.h b/chrome/browser/safe_browsing/sandboxed_zip_analyzer.h |
index b251e3220447770497c3ac618973bd1c8055863e..753f55d6d4ff46be120825ec98a74d6bdec906b0 100644 |
--- a/chrome/browser/safe_browsing/sandboxed_zip_analyzer.h |
+++ b/chrome/browser/safe_browsing/sandboxed_zip_analyzer.h |
@@ -1,12 +1,6 @@ |
// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
-// |
-// Browser-side interface to analyze zip files for SafeBrowsing download |
-// protection. The actual zip decoding is performed in a sandboxed utility |
-// process. |
-// |
-// This class lives on the UI thread. |
#ifndef CHROME_BROWSER_SAFE_BROWSING_SANDBOXED_ZIP_ANALYZER_H_ |
#define CHROME_BROWSER_SAFE_BROWSING_SANDBOXED_ZIP_ANALYZER_H_ |
@@ -15,66 +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" |
- |
-namespace IPC { |
-class Message; |
-} |
+#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; |
-} |
-class SandboxedZipAnalyzer : public content::UtilityProcessHostClient { |
+// This class is used to analyze zip files in a sandboxed utility process |
+// for file download protection. This class lives on the UI thread, which |
+// is where the result callback will be invoked. |
+class SandboxedZipAnalyzer |
+ : public base::RefCountedThreadSafe<SandboxedZipAnalyzer> { |
public: |
- // Callback that is invoked when the analysis results are ready. |
- typedef base::Callback<void(const zip_analyzer::Results&)> ResultCallback; |
+ using Results = zip_analyzer::Results; |
+ |
+ using ResultCallback = base::Callback<void(const Results&)>; |
SandboxedZipAnalyzer(const base::FilePath& zip_file, |
- const ResultCallback& result_callback); |
+ const ResultCallback& callback); |
- // Posts a task to start the zip analysis in the utility process. |
+ // Starts the analysis. Must be called on the UI thread. |
void Start(); |
private: |
- ~SandboxedZipAnalyzer() override; |
- |
- // Posts a fire-and-forget task to close the temporary file in the blocking |
- // pool. |
- void CloseTemporaryFile(); |
- |
- // Creates the sandboxed utility process and tells it to start analysis. |
- // Runs on a worker thread. |
- void AnalyzeInSandbox(); |
- |
- // content::UtilityProcessHostClient implementation. |
- // These notifications run on the IO thread. |
- void OnProcessCrashed(int exit_code) override; |
- void OnProcessLaunchFailed(int error_code) override; |
- bool OnMessageReceived(const IPC::Message& message) override; |
- |
- // Launches the utility process. Must run on the IO thread. |
- void StartProcessOnIOThread(); |
- |
- // Notification from the utility process that the zip file has been analyzed, |
- // with the given results. Runs on the IO thread. |
- void OnAnalyzeZipFileFinished(const zip_analyzer::Results& results); |
- |
- const base::FilePath zip_file_name_; |
- // Once we have opened the file, we store the handle so that we can use it |
- // once the utility process has launched. |
- base::File zip_file_; |
- |
- // A temporary file to be used by the utility process for extracting files |
- // from the archive. |
- base::File temp_file_; |
- base::WeakPtr<content::UtilityProcessHost> utility_process_host_; |
+ friend class base::RefCountedThreadSafe<SandboxedZipAnalyzer>; |
+ |
+ ~SandboxedZipAnalyzer(); |
+ |
+ // Prepare the file for analysis. |
+ void PrepareFileToAnalyze(); |
+ |
+ // If file preparation failed, analysis has failed: report failure. |
+ void ReportFileFailure(); |
+ |
+ // Starts the utility process and sends it a file analyze request. |
+ void AnalyzeFile(base::File file, base::File temp); |
+ |
+ // The response containing the file analyze results. |
+ void AnalyzeFileDone(const Results& results); |
+ |
+ // 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_; |
- // Initialized on the UI thread, but only accessed on the IO thread. |
- bool callback_called_; |
DISALLOW_COPY_AND_ASSIGN(SandboxedZipAnalyzer); |
}; |