// Copyright 2016 The Chromium Embedded Framework Authors. Portions copyright
// 2012 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 CEF_TESTS_SHARED_BROWSER_FILE_UTIL_H_
#define CEF_TESTS_SHARED_BROWSER_FILE_UTIL_H_
#pragma once

#include <limits>
#include <string>

namespace client {
namespace file_util {

// Platform-specific path separator.
extern const char kPathSep;

// Reads the file at |path| into |contents| and returns true on success and
// false on error.  In case of I/O error, |contents| holds the data that could
// be read from the file before the error occurred.  When the file size exceeds
// max_size|, the function returns false with |contents| holding the file
// truncated to |max_size|. |contents| may be NULL, in which case this function
// is useful for its side effect of priming the disk cache (could be used for
// unit tests). Calling this function on the browser process UI or IO threads is
// not allowed.
bool ReadFileToString(const std::string& path,
                      std::string* contents,
                      size_t max_size = std::numeric_limits<size_t>::max());

// Writes the given buffer into the file, overwriting any data that was
// previously there. Returns the number of bytes written, or -1 on error.
// Calling this function on the browser process UI or IO threads is not allowed.
int WriteFile(const std::string& path, const char* data, int size);

// Combines |path1| and |path2| with the correct platform-specific path
// separator.
std::string JoinPath(const std::string& path1, const std::string& path2);

// Extracts the file extension from |path|.
std::string GetFileExtension(const std::string& path);

}  // namespace file_util
}  // namespace client

#endif  // CEF_TESTS_SHARED_BROWSER_FILE_UTIL_H_
