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#include "chrome/browser/media_galleries/fileapi/media_file_validator_factory.h"
6
7#include "base/files/file_path.h"
8#include "chrome/browser/media_galleries/fileapi/supported_audio_video_checker.h"
9#include "chrome/browser/media_galleries/fileapi/supported_image_type_validator.h"
10#include "storage/browser/fileapi/copy_or_move_file_validator.h"
11#include "storage/browser/fileapi/file_system_url.h"
12
13namespace {
14
15class InvalidFileValidator : public storage::CopyOrMoveFileValidator {
16 public:
17  virtual ~InvalidFileValidator() {}
18  virtual void StartPreWriteValidation(
19      const storage::CopyOrMoveFileValidator::ResultCallback& result_callback)
20      OVERRIDE {
21    result_callback.Run(base::File::FILE_ERROR_SECURITY);
22  }
23
24  virtual void StartPostWriteValidation(
25      const base::FilePath& dest_platform_path,
26      const storage::CopyOrMoveFileValidator::ResultCallback& result_callback)
27      OVERRIDE {
28    result_callback.Run(base::File::FILE_ERROR_SECURITY);
29  }
30
31 private:
32  friend class ::MediaFileValidatorFactory;
33
34  InvalidFileValidator() {}
35
36  DISALLOW_COPY_AND_ASSIGN(InvalidFileValidator);
37};
38
39}  // namespace
40
41MediaFileValidatorFactory::MediaFileValidatorFactory() {}
42MediaFileValidatorFactory::~MediaFileValidatorFactory() {}
43
44storage::CopyOrMoveFileValidator*
45MediaFileValidatorFactory::CreateCopyOrMoveFileValidator(
46    const storage::FileSystemURL& src,
47    const base::FilePath& platform_path) {
48  base::FilePath src_path = src.virtual_path();
49  if (SupportedImageTypeValidator::SupportsFileType(src_path))
50    return new SupportedImageTypeValidator(platform_path);
51  if (SupportedAudioVideoChecker::SupportsFileType(src_path))
52    return new SupportedAudioVideoChecker(platform_path);
53
54  return new InvalidFileValidator();
55}
56