1*6777b538SAndroid Build Coastguard Worker // Copyright 2021 The Chromium Authors 2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file. 4*6777b538SAndroid Build Coastguard Worker 5*6777b538SAndroid Build Coastguard Worker #ifndef BASE_FILES_SAFE_BASE_NAME_H_ 6*6777b538SAndroid Build Coastguard Worker #define BASE_FILES_SAFE_BASE_NAME_H_ 7*6777b538SAndroid Build Coastguard Worker 8*6777b538SAndroid Build Coastguard Worker #include <optional> 9*6777b538SAndroid Build Coastguard Worker 10*6777b538SAndroid Build Coastguard Worker #include "base/base_export.h" 11*6777b538SAndroid Build Coastguard Worker #include "base/files/file_path.h" 12*6777b538SAndroid Build Coastguard Worker 13*6777b538SAndroid Build Coastguard Worker namespace base { 14*6777b538SAndroid Build Coastguard Worker 15*6777b538SAndroid Build Coastguard Worker // Represents the last path component of a FilePath object, either a file or a 16*6777b538SAndroid Build Coastguard Worker // directory. This type does not allow absolute paths or references to parent 17*6777b538SAndroid Build Coastguard Worker // directories and is considered safe to be passed over IPC. See 18*6777b538SAndroid Build Coastguard Worker // FilePath::BaseName(). 19*6777b538SAndroid Build Coastguard Worker // Usage examples: 20*6777b538SAndroid Build Coastguard Worker // std::optional<SafeBaseName> a 21*6777b538SAndroid Build Coastguard Worker // (SafeBaseName::Create(FILE_PATH_LITERAL("file.txt"))); 22*6777b538SAndroid Build Coastguard Worker // FilePath dir(FILE_PATH_LITERAL("foo")); dir.Append(*a); 23*6777b538SAndroid Build Coastguard Worker class BASE_EXPORT SafeBaseName { 24*6777b538SAndroid Build Coastguard Worker public: 25*6777b538SAndroid Build Coastguard Worker // TODO(crbug.com/1269986): Change to only be exposed to Mojo. 26*6777b538SAndroid Build Coastguard Worker SafeBaseName() = default; 27*6777b538SAndroid Build Coastguard Worker 28*6777b538SAndroid Build Coastguard Worker // Factory method that returns a valid SafeBaseName or std::nullopt. 29*6777b538SAndroid Build Coastguard Worker static std::optional<SafeBaseName> Create(const FilePath&); 30*6777b538SAndroid Build Coastguard Worker 31*6777b538SAndroid Build Coastguard Worker // Same as above, but takes a StringPieceType for convenience. 32*6777b538SAndroid Build Coastguard Worker static std::optional<SafeBaseName> Create(FilePath::StringPieceType); path()33*6777b538SAndroid Build Coastguard Worker const FilePath& path() const { return path_; } 34*6777b538SAndroid Build Coastguard Worker 35*6777b538SAndroid Build Coastguard Worker bool operator==(const SafeBaseName& that) const; 36*6777b538SAndroid Build Coastguard Worker 37*6777b538SAndroid Build Coastguard Worker private: 38*6777b538SAndroid Build Coastguard Worker // Constructs a new SafeBaseName from the given FilePath. 39*6777b538SAndroid Build Coastguard Worker explicit SafeBaseName(const FilePath&); 40*6777b538SAndroid Build Coastguard Worker FilePath path_; 41*6777b538SAndroid Build Coastguard Worker }; 42*6777b538SAndroid Build Coastguard Worker 43*6777b538SAndroid Build Coastguard Worker } // namespace base 44*6777b538SAndroid Build Coastguard Worker 45*6777b538SAndroid Build Coastguard Worker #endif // BASE_FILES_SAFE_BASE_NAME_H_ 46