| OLD | NEW | 
|    1 // Copyright 2015 The Crashpad Authors. All rights reserved. |    1 // Copyright 2015 The Crashpad Authors. All rights reserved. | 
|    2 // |    2 // | 
|    3 // Licensed under the Apache License, Version 2.0 (the "License"); |    3 // Licensed under the Apache License, Version 2.0 (the "License"); | 
|    4 // you may not use this file except in compliance with the License. |    4 // you may not use this file except in compliance with the License. | 
|    5 // You may obtain a copy of the License at |    5 // You may obtain a copy of the License at | 
|    6 // |    6 // | 
|    7 //     http://www.apache.org/licenses/LICENSE-2.0 |    7 //     http://www.apache.org/licenses/LICENSE-2.0 | 
|    8 // |    8 // | 
|    9 // Unless required by applicable law or agreed to in writing, software |    9 // Unless required by applicable law or agreed to in writing, software | 
|   10 // distributed under the License is distributed on an "AS IS" BASIS, |   10 // distributed under the License is distributed on an "AS IS" BASIS, | 
|   11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |   11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
|   12 // See the License for the specific language governing permissions and |   12 // See the License for the specific language governing permissions and | 
|   13 // limitations under the License. |   13 // limitations under the License. | 
|   14  |   14  | 
|   15 #include "util/test/scoped_temp_dir.h" |   15 #include "util/test/scoped_temp_dir.h" | 
|   16  |   16  | 
|   17 #include <windows.h> |   17 #include <windows.h> | 
|   18  |   18  | 
|   19 #include "base/logging.h" |   19 #include "base/logging.h" | 
|   20 #include "base/rand_util.h" |   20 #include "base/rand_util.h" | 
|   21 #include "base/strings/string16.h" |   21 #include "base/strings/string16.h" | 
|   22 #include "base/strings/stringprintf.h" |   22 #include "base/strings/stringprintf.h" | 
|   23 #include "base/strings/utf_string_conversions.h" |   23 #include "base/strings/utf_string_conversions.h" | 
|   24 #include "gtest/gtest.h" |   24 #include "gtest/gtest.h" | 
|   25  |   25  | 
|   26 namespace crashpad { |   26 namespace crashpad { | 
|   27 namespace test { |   27 namespace test { | 
|   28  |   28  | 
|   29 // static |   29 namespace { | 
|   30 base::FilePath ScopedTempDir::CreateTemporaryDirectory() { |   30  | 
 |   31 base::FilePath GenerateCandidateName() { | 
|   31   wchar_t temp_path[MAX_PATH + 1]; |   32   wchar_t temp_path[MAX_PATH + 1]; | 
|   32   DWORD path_len = GetTempPath(MAX_PATH, temp_path); |   33   DWORD path_len = GetTempPath(MAX_PATH, temp_path); | 
|   33   PCHECK(path_len != 0) << "GetTempPath"; |   34   PCHECK(path_len != 0) << "GetTempPath"; | 
|   34   base::FilePath system_temp_dir(temp_path); |   35   base::FilePath system_temp_dir(temp_path); | 
 |   36   base::string16 new_dir_name = base::UTF8ToUTF16(base::StringPrintf( | 
 |   37         "crashpad.test.%d.%I64x", GetCurrentProcessId(), base::RandUint64())); | 
 |   38   return system_temp_dir.Append(new_dir_name); | 
 |   39 } | 
|   35  |   40  | 
|   36   for (int count = 0; count < 50; ++count) { |   41 const int kRetries = 50; | 
|   37     // Try create a new temporary directory with random generated name. If the |   42  | 
|   38     // one we generate exists, keep trying another path name until we reach some |   43 }  // namespace | 
 |   44  | 
 |   45 void ScopedTempDir::Rename() { | 
 |   46   for (int count = 0; count < kRetries; ++count) { | 
 |   47     // Try to move to a new temporary directory with a randomly generated name. | 
 |   48     // If the one we try exists, retry with a new name until we reach some | 
|   39     // limit. |   49     // limit. | 
|   40     base::string16 new_dir_name = base::UTF8ToUTF16(base::StringPrintf( |   50     base::FilePath target_path = GenerateCandidateName(); | 
|   41         "crashpad.test.%d.%I64x", GetCurrentProcessId(), base::RandUint64())); |   51     if (MoveFileEx(path_.value().c_str(), target_path.value().c_str(), 0)) { | 
 |   52       path_ = target_path; | 
 |   53       return; | 
 |   54     } | 
 |   55   } | 
|   42  |   56  | 
|   43     base::FilePath path_to_create = system_temp_dir.Append(new_dir_name); |   57   CHECK(false) << "Couldn't find temp dir name"; | 
 |   58 } | 
 |   59  | 
 |   60 // static | 
 |   61 base::FilePath ScopedTempDir::CreateTemporaryDirectory() { | 
 |   62   for (int count = 0; count < kRetries; ++count) { | 
 |   63     // Try to create a new temporary directory with random generated name. If | 
 |   64     // the one we generate exists, keep trying another path name until we reach | 
 |   65     // some limit. | 
 |   66     base::FilePath path_to_create = GenerateCandidateName(); | 
|   44     if (CreateDirectory(path_to_create.value().c_str(), NULL)) |   67     if (CreateDirectory(path_to_create.value().c_str(), NULL)) | 
|   45       return path_to_create; |   68       return path_to_create; | 
|   46   } |   69   } | 
|   47  |   70  | 
|   48   CHECK(false) << "Couldn't find temp dir name"; |   71   CHECK(false) << "Couldn't find temp dir name"; | 
|   49   return base::FilePath(); |   72   return base::FilePath(); | 
|   50 } |   73 } | 
|   51  |   74  | 
|   52 // static |   75 // static | 
|   53 void ScopedTempDir::RecursivelyDeleteTemporaryDirectory( |   76 void ScopedTempDir::RecursivelyDeleteTemporaryDirectory( | 
| (...skipping 25 matching lines...) Expand all  Loading... | 
|   79       break; |  102       break; | 
|   80     } |  103     } | 
|   81   } |  104   } | 
|   82  |  105  | 
|   83   EXPECT_TRUE(FindClose(search_handle)); |  106   EXPECT_TRUE(FindClose(search_handle)); | 
|   84   EXPECT_TRUE(RemoveDirectory(path.value().c_str())); |  107   EXPECT_TRUE(RemoveDirectory(path.value().c_str())); | 
|   85 } |  108 } | 
|   86  |  109  | 
|   87 }  // namespace test |  110 }  // namespace test | 
|   88 }  // namespace crashpad |  111 }  // namespace crashpad | 
| OLD | NEW |