1*6777b538SAndroid Build Coastguard Worker // Copyright 2023 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 #include "base/files/scoped_temp_file.h" 6*6777b538SAndroid Build Coastguard Worker 7*6777b538SAndroid Build Coastguard Worker #include <utility> 8*6777b538SAndroid Build Coastguard Worker 9*6777b538SAndroid Build Coastguard Worker #include "base/check.h" 10*6777b538SAndroid Build Coastguard Worker #include "base/files/file_util.h" 11*6777b538SAndroid Build Coastguard Worker #include "base/logging.h" 12*6777b538SAndroid Build Coastguard Worker 13*6777b538SAndroid Build Coastguard Worker namespace base { 14*6777b538SAndroid Build Coastguard Worker 15*6777b538SAndroid Build Coastguard Worker ScopedTempFile::ScopedTempFile() = default; 16*6777b538SAndroid Build Coastguard Worker ScopedTempFile(ScopedTempFile && other)17*6777b538SAndroid Build Coastguard WorkerScopedTempFile::ScopedTempFile(ScopedTempFile&& other) noexcept 18*6777b538SAndroid Build Coastguard Worker : path_(std::move(other.path_)) {} 19*6777b538SAndroid Build Coastguard Worker operator =(ScopedTempFile && other)20*6777b538SAndroid Build Coastguard WorkerScopedTempFile& ScopedTempFile::operator=(ScopedTempFile&& other) noexcept { 21*6777b538SAndroid Build Coastguard Worker if (!path_.empty()) { 22*6777b538SAndroid Build Coastguard Worker CHECK_NE(path_, other.path_); 23*6777b538SAndroid Build Coastguard Worker } 24*6777b538SAndroid Build Coastguard Worker if (!Delete()) { 25*6777b538SAndroid Build Coastguard Worker DLOG(WARNING) << "Could not delete temp dir in operator=()."; 26*6777b538SAndroid Build Coastguard Worker } 27*6777b538SAndroid Build Coastguard Worker path_ = std::move(other.path_); 28*6777b538SAndroid Build Coastguard Worker return *this; 29*6777b538SAndroid Build Coastguard Worker } 30*6777b538SAndroid Build Coastguard Worker ~ScopedTempFile()31*6777b538SAndroid Build Coastguard WorkerScopedTempFile::~ScopedTempFile() { 32*6777b538SAndroid Build Coastguard Worker if (!Delete()) { 33*6777b538SAndroid Build Coastguard Worker DLOG(WARNING) << "Could not delete temp dir in destructor."; 34*6777b538SAndroid Build Coastguard Worker } 35*6777b538SAndroid Build Coastguard Worker } 36*6777b538SAndroid Build Coastguard Worker Create()37*6777b538SAndroid Build Coastguard Workerbool ScopedTempFile::Create() { 38*6777b538SAndroid Build Coastguard Worker CHECK(path_.empty()); 39*6777b538SAndroid Build Coastguard Worker return base::CreateTemporaryFile(&path_); 40*6777b538SAndroid Build Coastguard Worker } 41*6777b538SAndroid Build Coastguard Worker Delete()42*6777b538SAndroid Build Coastguard Workerbool ScopedTempFile::Delete() { 43*6777b538SAndroid Build Coastguard Worker if (path_.empty()) { 44*6777b538SAndroid Build Coastguard Worker return true; 45*6777b538SAndroid Build Coastguard Worker } 46*6777b538SAndroid Build Coastguard Worker if (DeleteFile(path_)) { 47*6777b538SAndroid Build Coastguard Worker path_.clear(); 48*6777b538SAndroid Build Coastguard Worker return true; 49*6777b538SAndroid Build Coastguard Worker } 50*6777b538SAndroid Build Coastguard Worker return false; 51*6777b538SAndroid Build Coastguard Worker } 52*6777b538SAndroid Build Coastguard Worker Reset()53*6777b538SAndroid Build Coastguard Workervoid ScopedTempFile::Reset() { 54*6777b538SAndroid Build Coastguard Worker if (!Delete()) { 55*6777b538SAndroid Build Coastguard Worker DLOG(WARNING) << "Could not delete temp dir in Reset()."; 56*6777b538SAndroid Build Coastguard Worker } 57*6777b538SAndroid Build Coastguard Worker path_.clear(); 58*6777b538SAndroid Build Coastguard Worker } 59*6777b538SAndroid Build Coastguard Worker 60*6777b538SAndroid Build Coastguard Worker } // namespace base 61