Add File::Open / Create functions to take an rtc::Pathname

When implementing ISOLATED_OUTDIR feature in WebRTC, I found two issues,
1. pathutils and flags are not accessible in testsupport. But both of them are
useful for the feature. Pathname can help to combine path with filename, while
a flag is needed to handle command line parameter.
2. rtc::File cannot accept an rtc::Pathname, which is a little bit inconvenient.

After investigating bug webrtc:3806, flags, pathutils and urlencode are
removed from rtc_base_approved because of the including of common.h. So I
replaced common.h with checks.h, and ASSERT with RTC_DCHECK. flags,
pathutils and urlencode pairs now can be placed into rtc_base_approved to
unblock file.h to include pathutils.h.

Please kindly let me know if you have other concerns about this change.

BUG=webrtc:3806, webrtc:6732

CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.linux:linux_chromium_rel_ng;master.tryserver.chromium.mac:mac_chromium_rel_ng;master.tryserver.chromium.win:win_chromium_rel_ng;master.tryserver.chromium.android:linux_android_rel_ng

Review-Url: https://codereview.webrtc.org/2533213005
Cr-Commit-Position: refs/heads/master@{#15451}
This commit is contained in:
zijiehe
2016-12-06 15:04:02 -08:00
committed by Commit bot
parent bd28681d02
commit dd87d580e8
9 changed files with 81 additions and 76 deletions

View File

@ -12,8 +12,8 @@
#define WEBRTC_BASE_PATHUTILS_H__
#include <string>
// Temporary, until deprecated helpers are removed.
#include "webrtc/base/fileutils.h"
#include "webrtc/base/checks.h"
namespace rtc {
@ -108,63 +108,6 @@ private:
char folder_delimiter_;
};
///////////////////////////////////////////////////////////////////////////////
// Global Helpers (deprecated)
///////////////////////////////////////////////////////////////////////////////
inline void SetOrganizationName(const std::string& organization) {
Filesystem::SetOrganizationName(organization);
}
inline void SetApplicationName(const std::string& application) {
Filesystem::SetApplicationName(application);
}
inline void GetOrganizationName(std::string* organization) {
Filesystem::GetOrganizationName(organization);
}
inline void GetApplicationName(std::string* application) {
Filesystem::GetApplicationName(application);
}
inline bool CreateFolder(const Pathname& path) {
return Filesystem::CreateFolder(path);
}
inline bool FinishPath(Pathname& path, bool create, const std::string& append) {
if (!append.empty())
path.AppendFolder(append);
return !create || CreateFolder(path);
}
// Note: this method uses the convention of <temp>/<appname> for the temporary
// folder. Filesystem uses <temp>/<exename>. We will be migrating exclusively
// to <temp>/<orgname>/<appname> eventually. Since these are temp folders,
// it's probably ok to orphan them during the transition.
inline bool GetTemporaryFolder(Pathname& path, bool create,
const std::string& append) {
std::string application_name;
Filesystem::GetApplicationName(&application_name);
ASSERT(!application_name.empty());
return Filesystem::GetTemporaryFolder(path, create, &application_name)
&& FinishPath(path, create, append);
}
inline bool GetAppDataFolder(Pathname& path, bool create,
const std::string& append) {
ASSERT(!create); // TODO: Support create flag on Filesystem::GetAppDataFolder.
return Filesystem::GetAppDataFolder(&path, true)
&& FinishPath(path, create, append);
}
inline bool CleanupTemporaryFolder() {
Pathname path;
if (!GetTemporaryFolder(path, false, ""))
return false;
if (Filesystem::IsAbsent(path))
return true;
if (!Filesystem::IsTemporaryPath(path)) {
ASSERT(false);
return false;
}
return Filesystem::DeleteFolderContents(path);
}
///////////////////////////////////////////////////////////////////////////////
} // namespace rtc
#endif // WEBRTC_BASE_PATHUTILS_H__