| Index: base/file_path.cc
|
| diff --git a/base/file_path.cc b/base/file_path.cc
|
| index a938ca63c7ec5b78726cd4c34e0b54c49707feba..b88d1e80937135adab33a656a09380584e9d474c 100644
|
| --- a/base/file_path.cc
|
| +++ b/base/file_path.cc
|
| @@ -3,11 +3,13 @@
|
| // found in the LICENSE file.
|
|
|
| #include "base/file_path.h"
|
| +#include "base/file_util.h"
|
| #include "base/logging.h"
|
|
|
| // These includes are just for the *Hack functions, and should be removed
|
| // when those functions are removed.
|
| #include "base/string_piece.h"
|
| +#include "base/string_util.h"
|
| #include "base/sys_string_conversions.h"
|
|
|
| #if defined(FILE_PATH_USES_WIN_SEPARATORS)
|
| @@ -178,6 +180,31 @@ bool FilePath::IsAbsolute() const {
|
| return IsPathAbsolute(path_);
|
| }
|
|
|
| +bool FilePath::Contains(const FilePath &other) const {
|
| + FilePath parent = FilePath(*this);
|
| + FilePath child = FilePath(other);
|
| +
|
| + if (!file_util::AbsolutePath(&parent) || !file_util::AbsolutePath(&child))
|
| + return false;
|
| +
|
| +#if defined(OS_WIN)
|
| + // file_util::AbsolutePath() does not flatten case on Windows, so we must do
|
| + // a case-insensitive compare.
|
| + if (!StartsWith(child.value(), parent.value(), false))
|
| +#else
|
| + if (!StartsWithASCII(child.value(), parent.value(), true))
|
| +#endif
|
| + return false;
|
| +
|
| + // file_util::AbsolutePath() normalizes '/' to '\', so we only need to check
|
| + // kSeparators[0].
|
| + if (child.value().length() <= parent.value().length() ||
|
| + child.value()[parent.value().length()] != kSeparators[0])
|
| + return false;
|
| +
|
| + return true;
|
| +}
|
| +
|
| #if defined(OS_POSIX)
|
| // See file_path.h for a discussion of the encoding of paths on POSIX
|
| // platforms. These *Hack() functions are not quite correct, but they're
|
|
|