| OLD | NEW |
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include <windows.h> | 5 #include <windows.h> |
| 6 #include <shlobj.h> | 6 #include <shlobj.h> |
| 7 | 7 |
| 8 #include "base/file_util.h" | 8 #include "base/file_util.h" |
| 9 #include "base/scoped_ptr.h" | 9 #include "base/scoped_ptr.h" |
| 10 #include "base/string_util.h" | 10 #include "base/string_util.h" |
| (...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 131 for (int i = 0; i < arraysize(failures); i++) { | 131 for (int i = 0; i < arraysize(failures); i++) { |
| 132 std::vector<PendingMove> string_list; | 132 std::vector<PendingMove> string_list; |
| 133 EXPECT_FALSE(SUCCEEDED( | 133 EXPECT_FALSE(SUCCEEDED( |
| 134 MultiSZBytesToStringArray(reinterpret_cast<char*>(failures[i].str), | 134 MultiSZBytesToStringArray(reinterpret_cast<char*>(failures[i].str), |
| 135 failures[i].length, &string_list))) | 135 failures[i].length, &string_list))) |
| 136 << failures[i].test_name; | 136 << failures[i].test_name; |
| 137 } | 137 } |
| 138 } | 138 } |
| 139 | 139 |
| 140 | 140 |
| 141 TEST_F(DeleteAfterRebootHelperTest, TestFileDeletes) { | 141 TEST_F(DeleteAfterRebootHelperTest, TestFileDeleteScheduleAndUnschedule) { |
| 142 if (!IsUserAnAdmin()) { | 142 if (!IsUserAnAdmin()) { |
| 143 return; | 143 return; |
| 144 } | 144 } |
| 145 | 145 |
| 146 EXPECT_TRUE(ScheduleDirectoryForDeletion(temp_dir_.value().c_str())); | 146 EXPECT_TRUE(ScheduleDirectoryForDeletion(temp_dir_.value().c_str())); |
| 147 | 147 |
| 148 std::vector<PendingMove> pending_moves; | 148 std::vector<PendingMove> pending_moves; |
| 149 EXPECT_TRUE(SUCCEEDED(GetPendingMovesValue(&pending_moves))); | 149 EXPECT_TRUE(SUCCEEDED(GetPendingMovesValue(&pending_moves))); |
| 150 | 150 |
| 151 // We should see, somewhere in this key, deletion writs for | 151 // We should see, somewhere in this key, deletion writs for |
| 152 // temp_file_, temp_subdir_file_, temp_subdir_ and temp_dir_ in that order. | 152 // temp_file_, temp_subdir_file_, temp_subdir_ and temp_dir_ in that order. |
| 153 EXPECT_TRUE(pending_moves.size() > 3); | 153 EXPECT_TRUE(pending_moves.size() > 3); |
| 154 | 154 |
| 155 // Get the short form of temp_file_ and use that to match. | 155 // Get the short form of temp_file_ and use that to match. |
| 156 std::wstring short_temp_file(GetShortPathName(temp_file_.value().c_str())); | 156 std::wstring short_temp_file(GetShortPathName(temp_file_.value().c_str())); |
| 157 | 157 |
| 158 // Scan for the first expected delete. | 158 // Scan for the first expected delete. |
| 159 std::vector<PendingMove>::const_iterator iter(pending_moves.begin()); | 159 std::vector<PendingMove>::const_iterator iter(pending_moves.begin()); |
| 160 for (; iter != pending_moves.end(); iter++) { | 160 for (; iter != pending_moves.end(); iter++) { |
| 161 if (MatchPendingDeletePath(short_temp_file, iter->first)) | 161 if (MatchPendingDeletePath(short_temp_file, iter->first)) |
| 162 break; | 162 break; |
| 163 } | 163 } |
| 164 | 164 |
| 165 // Check that each of the deletes we expect are there in order. | 165 // Check that each of the deletes we expect are there in order. |
| 166 FilePath expected_paths[] = | 166 FilePath expected_paths[] = |
| 167 { temp_file_, temp_subdir_file_, temp_subdir_, temp_dir_ }; | 167 { temp_file_, temp_subdir_file_, temp_subdir_, temp_dir_ }; |
| 168 for (int i = 0; i < arraysize(expected_paths); i++) { | 168 for (int i = 0; i < arraysize(expected_paths); ++i) { |
| 169 EXPECT_FALSE(iter == pending_moves.end()); | 169 EXPECT_FALSE(iter == pending_moves.end()); |
| 170 if (iter != pending_moves.end()) { | 170 if (iter != pending_moves.end()) { |
| 171 std::wstring short_path_name( | 171 std::wstring short_path_name( |
| 172 GetShortPathName(expected_paths[i].value().c_str())); | 172 GetShortPathName(expected_paths[i].value().c_str())); |
| 173 EXPECT_TRUE(MatchPendingDeletePath(short_path_name, iter->first)); | 173 EXPECT_TRUE(MatchPendingDeletePath(short_path_name, iter->first)); |
| 174 iter++; | 174 ++iter; |
| 175 } | 175 } |
| 176 } | 176 } |
| 177 | 177 |
| 178 // Test that we can remove the pending deletes. | 178 // Test that we can remove the pending deletes. |
| 179 EXPECT_TRUE(RemoveFromMovesPendingReboot(temp_dir_.value().c_str())); | 179 EXPECT_TRUE(RemoveFromMovesPendingReboot(temp_dir_.value().c_str())); |
| 180 HRESULT hr = GetPendingMovesValue(&pending_moves); | 180 HRESULT hr = GetPendingMovesValue(&pending_moves); |
| 181 EXPECT_TRUE(hr == S_OK || hr == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND)); | 181 EXPECT_TRUE(hr == S_OK || hr == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND)); |
| 182 | 182 |
| 183 std::vector<PendingMove>::const_iterator check_iter(pending_moves.begin()); | 183 std::vector<PendingMove>::const_iterator check_iter(pending_moves.begin()); |
| 184 for (; check_iter != pending_moves.end(); ++check_iter) { | 184 for (; check_iter != pending_moves.end(); ++check_iter) { |
| 185 EXPECT_FALSE(MatchPendingDeletePath(short_temp_file, check_iter->first)); | 185 EXPECT_FALSE(MatchPendingDeletePath(short_temp_file, check_iter->first)); |
| 186 } | 186 } |
| 187 } | 187 } |
| 188 |
| 189 TEST_F(DeleteAfterRebootHelperTest, TestFileDeleteSchedulingWithActualDeletes) { |
| 190 if (!IsUserAnAdmin()) { |
| 191 return; |
| 192 } |
| 193 |
| 194 std::vector<PendingMove> initial_pending_moves; |
| 195 GetPendingMovesValue(&initial_pending_moves); |
| 196 size_t initial_pending_moves_size = initial_pending_moves.size(); |
| 197 |
| 198 EXPECT_TRUE(ScheduleDirectoryForDeletion(temp_dir_.value().c_str())); |
| 199 |
| 200 std::vector<PendingMove> pending_moves; |
| 201 EXPECT_TRUE(SUCCEEDED(GetPendingMovesValue(&pending_moves))); |
| 202 |
| 203 // We should see, somewhere in this key, deletion writs for |
| 204 // temp_file_, temp_subdir_file_, temp_subdir_ and temp_dir_ in that order. |
| 205 EXPECT_TRUE(pending_moves.size() > 3); |
| 206 |
| 207 // Get the short form of temp_file_ and use that to match. |
| 208 std::wstring short_temp_file(GetShortPathName(temp_file_.value().c_str())); |
| 209 |
| 210 // Scan for the first expected delete. |
| 211 std::vector<PendingMove>::const_iterator iter(pending_moves.begin()); |
| 212 for (; iter != pending_moves.end(); iter++) { |
| 213 if (MatchPendingDeletePath(short_temp_file, iter->first)) |
| 214 break; |
| 215 } |
| 216 |
| 217 // Check that each of the deletes we expect are there in order. |
| 218 FilePath expected_paths[] = |
| 219 { temp_file_, temp_subdir_file_, temp_subdir_, temp_dir_ }; |
| 220 for (int i = 0; i < arraysize(expected_paths); ++i) { |
| 221 EXPECT_FALSE(iter == pending_moves.end()); |
| 222 if (iter != pending_moves.end()) { |
| 223 std::wstring short_path_name( |
| 224 GetShortPathName(expected_paths[i].value().c_str())); |
| 225 EXPECT_TRUE(MatchPendingDeletePath(short_path_name, iter->first)); |
| 226 ++iter; |
| 227 } |
| 228 } |
| 229 |
| 230 // Delete the temporary directory. |
| 231 file_util::Delete(temp_dir_, true); |
| 232 |
| 233 // Test that we can remove the pending deletes. |
| 234 EXPECT_TRUE(RemoveFromMovesPendingReboot(temp_dir_.value().c_str())); |
| 235 HRESULT hr = GetPendingMovesValue(&pending_moves); |
| 236 EXPECT_TRUE(hr == S_OK || hr == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND)); |
| 237 |
| 238 EXPECT_EQ(initial_pending_moves_size, pending_moves.size()); |
| 239 |
| 240 std::vector<PendingMove>::const_iterator check_iter(pending_moves.begin()); |
| 241 for (; check_iter != pending_moves.end(); ++check_iter) { |
| 242 EXPECT_FALSE(MatchPendingDeletePath(short_temp_file, check_iter->first)); |
| 243 } |
| 244 } |
| 245 |
| OLD | NEW |