Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1573)

Unified Diff: chrome/test/testing_profile.cc

Issue 3133031: Make TestingProfile use ScopedTempDir. (Closed)
Patch Set: trybots Created 10 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/test/testing_profile.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/test/testing_profile.cc
diff --git a/chrome/test/testing_profile.cc b/chrome/test/testing_profile.cc
index 2cdf40ffdaffc03b81d32a099462b63318f6bdf3..27bb9ef40b2a7ce75b8644dcf3640976c18369f0 100644
--- a/chrome/test/testing_profile.cc
+++ b/chrome/test/testing_profile.cc
@@ -170,32 +170,29 @@ TestingProfile::TestingProfile()
has_history_service_(false),
off_the_record_(false),
last_session_exited_cleanly_(true) {
- PathService::Get(base::DIR_TEMP, &path_);
- path_ = path_.Append(FILE_PATH_LITERAL("TestingProfilePath"));
- file_util::Delete(path_, true);
- file_util::CreateDirectory(path_);
-}
-
-TestingProfile::TestingProfile(int count)
- : start_time_(Time::Now()),
- created_theme_provider_(false),
- has_history_service_(false),
- off_the_record_(false),
- last_session_exited_cleanly_(true) {
- PathService::Get(base::DIR_TEMP, &path_);
- path_ = path_.Append(FILE_PATH_LITERAL("TestingProfilePath"));
- path_ = path_.AppendASCII(base::IntToString(count));
- file_util::Delete(path_, true);
- file_util::CreateDirectory(path_);
-}
-
-TestingProfile::TestingProfile(const FilePath& path)
- : start_time_(Time::Now()),
- created_theme_provider_(false),
- has_history_service_(false),
- off_the_record_(false),
- last_session_exited_cleanly_(true) {
- path_ = path;
+ if (!temp_dir_.CreateUniqueTempDir()) {
+ LOG(ERROR) << "Failed to create unique temporary directory.";
+
+ // Fallback logic in case we fail to create unique temporary directory.
+ FilePath system_tmp_dir;
+ bool success = PathService::Get(base::DIR_TEMP, &system_tmp_dir);
+
+ // We're severly screwed if we can't get the system temporary
+ // directory. Die now to avoid writing to the filesystem root
+ // or other bad places.
+ CHECK(success);
+
+ FilePath fallback_dir(system_tmp_dir.AppendASCII("TestingProfilePath"));
+ file_util::Delete(fallback_dir, true);
+ file_util::CreateDirectory(fallback_dir);
+ if (!temp_dir_.Set(fallback_dir)) {
+ // That shouldn't happen, but if it does, try to recover.
+ LOG(ERROR) << "Failed to use a fallback temporary directory.";
+
+ // We're screwed if this fails, see CHECK above.
+ CHECK(temp_dir_.Set(system_tmp_dir));
+ }
+ }
}
TestingProfile::~TestingProfile() {
@@ -210,8 +207,6 @@ TestingProfile::~TestingProfile() {
if (top_sites_.get())
top_sites_->ClearProfile();
history::TopSites::DeleteTopSites(top_sites_);
-
- file_util::Delete(path_, true);
}
void TestingProfile::CreateFaviconService() {
@@ -320,6 +315,11 @@ void TestingProfile::UseThemeProvider(BrowserThemeProvider* theme_provider) {
theme_provider_.reset(theme_provider);
}
+FilePath TestingProfile::GetPath() {
+ DCHECK(temp_dir_.IsValid()); // TODO(phajdan.jr): do it better.
+ return temp_dir_.path();
+}
+
TestingPrefService* TestingProfile::GetTestingPrefService() {
return static_cast<TestingPrefService*>(GetPrefs());
}
@@ -360,8 +360,6 @@ PrefService* TestingProfile::GetPrefs() {
history::TopSites* TestingProfile::GetTopSites() {
if (!top_sites_.get()) {
top_sites_ = new history::TopSites(this);
- if (!temp_dir_.CreateUniqueTempDir())
- return NULL;
FilePath file_name = temp_dir_.path().AppendASCII("TopSites.db");
top_sites_->Init(file_name);
}
« no previous file with comments | « chrome/test/testing_profile.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698