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 CHROME_BROWSER_MEDIA_GALLERIES_FILEAPI_SUPPORTED_AUDIO_VIDEO_CHECKER_H_
6#define CHROME_BROWSER_MEDIA_GALLERIES_FILEAPI_SUPPORTED_AUDIO_VIDEO_CHECKER_H_
7
8#include "base/basictypes.h"
9#include "base/files/file.h"
10#include "base/files/file_path.h"
11#include "base/memory/ref_counted.h"
12#include "base/memory/weak_ptr.h"
13#include "chrome/browser/media_galleries/fileapi/av_scanning_file_validator.h"
14
15class MediaFileValidatorFactory;
16class SafeAudioVideoChecker;
17
18// Uses SafeAudioVideoChecker to validate supported audio and video files in
19// the utility process and then uses AVScanningFileValidator to ask the OS to
20// virus scan them. The entire file is not decoded so a positive result from
21// this class does not make the file safe to use in the browser process.
22class SupportedAudioVideoChecker : public AVScanningFileValidator {
23 public:
24  virtual ~SupportedAudioVideoChecker();
25
26  static bool SupportsFileType(const base::FilePath& path);
27
28  virtual void StartPreWriteValidation(
29      const ResultCallback& result_callback) OVERRIDE;
30
31 private:
32  friend class MediaFileValidatorFactory;
33
34  explicit SupportedAudioVideoChecker(const base::FilePath& file);
35
36  void OnFileOpen(base::File file);
37
38  base::FilePath path_;
39  storage::CopyOrMoveFileValidator::ResultCallback callback_;
40  scoped_refptr<SafeAudioVideoChecker> safe_checker_;
41  base::WeakPtrFactory<SupportedAudioVideoChecker> weak_factory_;
42
43  DISALLOW_COPY_AND_ASSIGN(SupportedAudioVideoChecker);
44};
45
46#endif  // CHROME_BROWSER_MEDIA_GALLERIES_FILEAPI_SUPPORTED_AUDIO_VIDEO_CHECKER_H_
47