1 // Copyright 2017 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 #include "chrome/services/file_util/safe_archive_analyzer.h"
6 
7 #include "base/macros.h"
8 #include "build/build_config.h"
9 #include "chrome/common/safe_browsing/archive_analyzer_results.h"
10 #include "chrome/common/safe_browsing/rar_analyzer.h"
11 #include "chrome/common/safe_browsing/zip_analyzer.h"
12 
13 #if defined(OS_MAC)
14 #include "chrome/utility/safe_browsing/mac/dmg_analyzer.h"
15 #endif
16 
17 SafeArchiveAnalyzer::SafeArchiveAnalyzer() = default;
18 
19 SafeArchiveAnalyzer::~SafeArchiveAnalyzer() = default;
20 
AnalyzeZipFile(base::File zip_file,base::File temporary_file,AnalyzeZipFileCallback callback)21 void SafeArchiveAnalyzer::AnalyzeZipFile(base::File zip_file,
22                                          base::File temporary_file,
23                                          AnalyzeZipFileCallback callback) {
24   DCHECK(temporary_file.IsValid());
25   DCHECK(zip_file.IsValid());
26 
27   safe_browsing::ArchiveAnalyzerResults results;
28   safe_browsing::zip_analyzer::AnalyzeZipFile(
29       std::move(zip_file), std::move(temporary_file), &results);
30   std::move(callback).Run(results);
31 }
32 
AnalyzeDmgFile(base::File dmg_file,AnalyzeDmgFileCallback callback)33 void SafeArchiveAnalyzer::AnalyzeDmgFile(base::File dmg_file,
34                                          AnalyzeDmgFileCallback callback) {
35 #if defined(OS_MAC)
36   DCHECK(dmg_file.IsValid());
37   safe_browsing::ArchiveAnalyzerResults results;
38   safe_browsing::dmg::AnalyzeDMGFile(std::move(dmg_file), &results);
39   std::move(callback).Run(results);
40 #else
41   NOTREACHED();
42 #endif
43 }
44 
AnalyzeRarFile(base::File rar_file,base::File temporary_file,AnalyzeRarFileCallback callback)45 void SafeArchiveAnalyzer::AnalyzeRarFile(base::File rar_file,
46                                          base::File temporary_file,
47                                          AnalyzeRarFileCallback callback) {
48   DCHECK(rar_file.IsValid());
49 
50   safe_browsing::ArchiveAnalyzerResults results;
51   safe_browsing::rar_analyzer::AnalyzeRarFile(
52       std::move(rar_file), std::move(temporary_file), &results);
53   std::move(callback).Run(results);
54 }
55