// Copyright 2018 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.

#ifndef CHROME_SERVICES_FILE_UTIL_PUBLIC_CPP_SANDBOXED_RAR_ANALYZER_H_
#define CHROME_SERVICES_FILE_UTIL_PUBLIC_CPP_SANDBOXED_RAR_ANALYZER_H_

#include "base/callback.h"
#include "base/files/file_path.h"
#include "base/macros.h"
#include "base/memory/ref_counted.h"
#include "chrome/services/file_util/public/mojom/safe_archive_analyzer.mojom.h"

namespace safe_browsing {
struct ArchiveAnalyzerResults;
}

namespace service_manager {
class Connector;
}

// This class is used to analyze rar files in a sandbox for file download
// protection. This class lives on the UI thread, which is where the result
// callback will be invoked.
class SandboxedRarAnalyzer
    : public base::RefCountedThreadSafe<SandboxedRarAnalyzer> {
 public:
  using ResultCallback = base::RepeatingCallback<void(
      const safe_browsing::ArchiveAnalyzerResults&)>;

  SandboxedRarAnalyzer(const base::FilePath& rar_file_path,
                       const ResultCallback& callback,
                       service_manager::Connector* connector);

  // Starts the analysis. Must be called on the UI thread.
  void Start();

  // Returns a string reflecting internal state. Useful for debugging.
  std::string DebugString() const;

 private:
  friend class base::RefCountedThreadSafe<SandboxedRarAnalyzer>;

  ~SandboxedRarAnalyzer();

  // 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 request to analyze the file
  // |file|, given a handle for |temp_file|, where it can extract files.
  void AnalyzeFile(base::File file, base::File temp_file);

  // The response containing the file analyze results.
  void AnalyzeFileDone(const safe_browsing::ArchiveAnalyzerResults& results);

  // The file path of the file to analyze.
  const base::FilePath file_path_;

  // Callback invoked on the UI thread with the file analyze results.
  const ResultCallback callback_;

  // The connector to the service manager, only used on the UI thread.
  service_manager::Connector* connector_;

  // Pointer to the SafeArchiveAnalyzer interface. Only used from the UI thread.
  chrome::mojom::SafeArchiveAnalyzerPtr analyzer_ptr_;

  DISALLOW_COPY_AND_ASSIGN(SandboxedRarAnalyzer);
};

std::ostream& operator<<(std::ostream& os,
                         const SandboxedRarAnalyzer& rar_analyzer);

#endif  // CHROME_SERVICES_FILE_UTIL_PUBLIC_CPP_SANDBOXED_RAR_ANALYZER_H_
