1// Copyright 2013 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#ifndef STORAGE_BROWSER_FILEAPI_COPY_OR_MOVE_FILE_VALIDATOR_H_
6#define STORAGE_BROWSER_FILEAPI_COPY_OR_MOVE_FILE_VALIDATOR_H_
7
8#include "base/callback.h"
9#include "base/files/file.h"
10#include "storage/browser/storage_browser_export.h"
11
12namespace base {
13class FilePath;
14}
15
16namespace storage {
17
18class FileSystemURL;
19
20class STORAGE_EXPORT CopyOrMoveFileValidator {
21 public:
22  // Callback that is invoked when validation completes. A result of
23  // base::File::FILE_OK means the file validated.
24  typedef base::Callback<void(base::File::Error result)> ResultCallback;
25
26  virtual ~CopyOrMoveFileValidator() {}
27
28  // Called on a source file before copying or moving to the final
29  // destination.
30  virtual void StartPreWriteValidation(
31      const ResultCallback& result_callback) = 0;
32
33  // Called on a destination file after copying or moving to the final
34  // destination. Suitable for running Anti-Virus checks.
35  virtual void StartPostWriteValidation(
36      const base::FilePath& dest_platform_path,
37      const ResultCallback& result_callback) = 0;
38};
39
40class CopyOrMoveFileValidatorFactory {
41 public:
42  virtual ~CopyOrMoveFileValidatorFactory() {}
43
44  // This method must always return a non-NULL validator. |src_url| is needed
45  // in addition to |platform_path| because in the obfuscated file system
46  // case, |platform_path| will be an obfuscated filename and extension.
47  virtual CopyOrMoveFileValidator* CreateCopyOrMoveFileValidator(
48      const FileSystemURL& src_url,
49      const base::FilePath& platform_path) = 0;
50};
51
52}  // namespace storage
53
54#endif  // STORAGE_BROWSER_FILEAPI_COPY_OR_MOVE_FILE_VALIDATOR_H_
55