1// Copyright (c) 2012 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 BASE_TEST_TEST_FILE_UTIL_H_
6#define BASE_TEST_TEST_FILE_UTIL_H_
7
8// File utility functions used only by tests.
9
10#include <string>
11
12#include "base/compiler_specific.h"
13#include "base/files/file_path.h"
14
15#if defined(OS_ANDROID)
16#include <jni.h>
17#include "base/basictypes.h"
18#endif
19
20namespace base {
21
22class FilePath;
23
24// Clear a specific file from the system cache like EvictFileFromSystemCache,
25// but on failure it will sleep and retry. On the Windows buildbots, eviction
26// can fail if the file is marked in use, and this will throw off timings that
27// rely on uncached files.
28bool EvictFileFromSystemCacheWithRetry(const FilePath& file);
29
30// Wrapper over base::Delete. On Windows repeatedly invokes Delete in case
31// of failure to workaround Windows file locking semantics. Returns true on
32// success.
33bool DieFileDie(const FilePath& file, bool recurse);
34
35// Clear a specific file from the system cache. After this call, trying
36// to access this file will result in a cold load from the hard drive.
37bool EvictFileFromSystemCache(const FilePath& file);
38
39#if defined(OS_WIN)
40// Returns true if the volume supports Alternate Data Streams.
41bool VolumeSupportsADS(const FilePath& path);
42
43// Returns true if the ZoneIdentifier is correctly set to "Internet" (3).
44// Note that this function must be called from the same process as
45// the one that set the zone identifier.  I.e. don't use it in UI/automation
46// based tests.
47bool HasInternetZoneIdentifier(const FilePath& full_path);
48#endif  // defined(OS_WIN)
49
50// For testing, make the file unreadable or unwritable.
51// In POSIX, this does not apply to the root user.
52bool MakeFileUnreadable(const FilePath& path) WARN_UNUSED_RESULT;
53bool MakeFileUnwritable(const FilePath& path) WARN_UNUSED_RESULT;
54
55// Saves the current permissions for a path, and restores it on destruction.
56class FilePermissionRestorer {
57 public:
58  explicit FilePermissionRestorer(const FilePath& path);
59  ~FilePermissionRestorer();
60
61 private:
62  const FilePath path_;
63  void* info_;  // The opaque stored permission information.
64  size_t length_;  // The length of the stored permission information.
65
66  DISALLOW_COPY_AND_ASSIGN(FilePermissionRestorer);
67};
68
69#if defined(OS_ANDROID)
70// Register the ContentUriTestUrils JNI bindings.
71bool RegisterContentUriTestUtils(JNIEnv* env);
72
73// Insert an image file into the MediaStore, and retrieve the content URI for
74// testing purpose.
75FilePath InsertImageIntoMediaStore(const FilePath& path);
76#endif  // defined(OS_ANDROID)
77
78}  // namespace base
79
80#endif  // BASE_TEST_TEST_FILE_UTIL_H_
81