| // Copyright 2016 The Chromium Embedded Framework Authors. Portions copyright |
| // 2011 The Chromium Authors. All rights reserved. Use of this source code is |
| // governed by a BSD-style license that can be found in the LICENSE file. |
| |
| #include "include/wrapper/cef_scoped_temp_dir.h" |
| |
| #include "include/base/cef_logging.h" |
| #include "include/cef_file_util.h" |
| |
| CefScopedTempDir::CefScopedTempDir() {} |
| |
| CefScopedTempDir::~CefScopedTempDir() { |
| if (!path_.empty() && !Delete()) |
| DLOG(WARNING) << "Could not delete temp dir in dtor."; |
| } |
| |
| bool CefScopedTempDir::CreateUniqueTempDir() { |
| if (!path_.empty()) |
| return false; |
| |
| // This "scoped_dir" prefix is only used on Windows and serves as a template |
| // for the unique name. |
| if (!CefCreateNewTempDirectory("scoped_dir", path_)) |
| return false; |
| |
| return true; |
| } |
| |
| bool CefScopedTempDir::CreateUniqueTempDirUnderPath( |
| const CefString& base_path) { |
| if (!path_.empty()) |
| return false; |
| |
| // If |base_path| does not exist, create it. |
| if (!CefCreateDirectory(base_path)) |
| return false; |
| |
| // Create a new, uniquely named directory under |base_path|. |
| if (!CefCreateTempDirectoryInDirectory(base_path, "scoped_dir_", path_)) |
| return false; |
| |
| return true; |
| } |
| |
| bool CefScopedTempDir::Set(const CefString& path) { |
| if (!path_.empty()) |
| return false; |
| |
| if (!CefDirectoryExists(path) && !CefCreateDirectory(path)) |
| return false; |
| |
| path_ = path; |
| return true; |
| } |
| |
| bool CefScopedTempDir::Delete() { |
| if (path_.empty()) |
| return false; |
| |
| bool ret = CefDeleteFile(path_, true); |
| if (ret) { |
| // We only clear the path if deleted the directory. |
| path_.clear(); |
| } |
| |
| return ret; |
| } |
| |
| CefString CefScopedTempDir::Take() { |
| CefString ret = path_; |
| path_.clear(); |
| return ret; |
| } |
| |
| const CefString& CefScopedTempDir::GetPath() const { |
| DCHECK(!path_.empty()) << "Did you call CreateUniqueTempDir* before?"; |
| return path_; |
| } |
| |
| bool CefScopedTempDir::IsEmpty() const { |
| return path_.empty(); |
| } |
| |
| bool CefScopedTempDir::IsValid() const { |
| return !path_.empty() && CefDirectoryExists(path_); |
| } |