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 "chrome/installer/util/installer_state.h" | 5 #include "chrome/installer/util/installer_state.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <functional> | 8 #include <functional> |
9 #include <utility> | 9 #include <utility> |
10 | 10 |
(...skipping 370 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
381 | 381 |
382 return current_version.release(); | 382 return current_version.release(); |
383 } | 383 } |
384 | 384 |
385 FilePath InstallerState::GetInstallerDirectory(const Version& version) const { | 385 FilePath InstallerState::GetInstallerDirectory(const Version& version) const { |
386 return target_path().Append(ASCIIToWide(version.GetString())) | 386 return target_path().Append(ASCIIToWide(version.GetString())) |
387 .Append(kInstallerDir); | 387 .Append(kInstallerDir); |
388 } | 388 } |
389 | 389 |
390 void InstallerState::RemoveOldVersionDirectories( | 390 void InstallerState::RemoveOldVersionDirectories( |
391 const Version& latest_version) const { | 391 const Version& latest_version, |
| 392 const FilePath& temp_path) const { |
392 file_util::FileEnumerator version_enum(target_path(), false, | 393 file_util::FileEnumerator version_enum(target_path(), false, |
393 file_util::FileEnumerator::DIRECTORIES); | 394 file_util::FileEnumerator::DIRECTORIES); |
394 scoped_ptr<Version> version; | 395 scoped_ptr<Version> version; |
395 std::vector<FilePath> key_files; | 396 std::vector<FilePath> key_files; |
396 | 397 |
397 // We try to delete all directories whose versions are lower than | 398 // We try to delete all directories whose versions are lower than |
398 // latest_version. | 399 // latest_version. |
399 FilePath next_version = version_enum.Next(); | 400 FilePath next_version = version_enum.Next(); |
400 while (!next_version.empty()) { | 401 while (!next_version.empty()) { |
401 file_util::FileEnumerator::FindInfo find_data = {0}; | 402 file_util::FileEnumerator::FindInfo find_data = {0}; |
402 version_enum.GetFindInfo(&find_data); | 403 version_enum.GetFindInfo(&find_data); |
403 VLOG(1) << "directory found: " << find_data.cFileName; | 404 VLOG(1) << "directory found: " << find_data.cFileName; |
404 version.reset(Version::GetVersionFromString( | 405 version.reset(Version::GetVersionFromString( |
405 WideToASCII(find_data.cFileName))); | 406 WideToASCII(find_data.cFileName))); |
406 if (version.get() && latest_version.CompareTo(*version) > 0) { | 407 if (version.get() && latest_version.CompareTo(*version) > 0) { |
407 key_files.clear(); | 408 key_files.clear(); |
408 std::for_each(products_.begin(), products_.end(), | 409 std::for_each(products_.begin(), products_.end(), |
409 std::bind2nd(std::mem_fun(&Product::AddKeyFiles), | 410 std::bind2nd(std::mem_fun(&Product::AddKeyFiles), |
410 &key_files)); | 411 &key_files)); |
411 const std::vector<FilePath>::iterator end = key_files.end(); | 412 const std::vector<FilePath>::iterator end = key_files.end(); |
412 for (std::vector<FilePath>::iterator scan = key_files.begin(); | 413 for (std::vector<FilePath>::iterator scan = key_files.begin(); |
413 scan != end; ++scan) { | 414 scan != end; ++scan) { |
414 *scan = next_version.Append(*scan); | 415 *scan = next_version.Append(*scan); |
415 } | 416 } |
416 | 417 |
417 VLOG(1) << "Deleting directory: " << next_version.value(); | 418 VLOG(1) << "Deleting directory: " << next_version.value(); |
418 | 419 |
419 scoped_ptr<WorkItem> item( | 420 scoped_ptr<WorkItem> item( |
420 WorkItem::CreateDeleteTreeWorkItem(next_version, key_files)); | 421 WorkItem::CreateDeleteTreeWorkItem(next_version, temp_path, |
| 422 key_files)); |
421 if (!item->Do()) | 423 if (!item->Do()) |
422 item->Rollback(); | 424 item->Rollback(); |
423 } | 425 } |
424 | 426 |
425 next_version = version_enum.Next(); | 427 next_version = version_enum.Next(); |
426 } | 428 } |
427 } | 429 } |
428 | 430 |
429 void InstallerState::AddComDllList(std::vector<FilePath>* com_dll_list) const { | 431 void InstallerState::AddComDllList(std::vector<FilePath>* com_dll_list) const { |
430 std::for_each(products_.begin(), products_.end(), | 432 std::for_each(products_.begin(), products_.end(), |
431 std::bind2nd(std::mem_fun(&Product::AddComDllList), | 433 std::bind2nd(std::mem_fun(&Product::AddComDllList), |
432 com_dll_list)); | 434 com_dll_list)); |
433 } | 435 } |
434 | 436 |
435 bool InstallerState::SetChannelFlags(bool set, | 437 bool InstallerState::SetChannelFlags(bool set, |
436 ChannelInfo* channel_info) const { | 438 ChannelInfo* channel_info) const { |
437 bool modified = false; | 439 bool modified = false; |
438 for (Products::const_iterator scan = products_.begin(), end = products_.end(); | 440 for (Products::const_iterator scan = products_.begin(), end = products_.end(); |
439 scan != end; ++scan) { | 441 scan != end; ++scan) { |
440 modified |= (*scan)->SetChannelFlags(set, channel_info); | 442 modified |= (*scan)->SetChannelFlags(set, channel_info); |
441 } | 443 } |
442 return modified; | 444 return modified; |
443 } | 445 } |
444 | 446 |
445 } // namespace installer | 447 } // namespace installer |
OLD | NEW |