OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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/move_tree_work_item.h" | 5 #include "chrome/installer/util/move_tree_work_item.h" |
6 | 6 |
7 #include <shlwapi.h> | 7 #include <shlwapi.h> |
8 | 8 |
9 #include "base/files/file_util.h" | 9 #include "base/files/file_util.h" |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
11 #include "chrome/installer/util/duplicate_tree_detector.h" | 11 #include "chrome/installer/util/duplicate_tree_detector.h" |
12 #include "chrome/installer/util/logging_installer.h" | 12 #include "chrome/installer/util/logging_installer.h" |
13 | 13 |
14 MoveTreeWorkItem::~MoveTreeWorkItem() { | 14 MoveTreeWorkItem::~MoveTreeWorkItem() { |
15 } | 15 } |
16 | 16 |
17 MoveTreeWorkItem::MoveTreeWorkItem(const base::FilePath& source_path, | 17 MoveTreeWorkItem::MoveTreeWorkItem(const base::FilePath& source_path, |
18 const base::FilePath& dest_path, | 18 const base::FilePath& dest_path, |
19 const base::FilePath& temp_dir, | 19 const base::FilePath& temp_dir, |
20 MoveTreeOption duplicate_option) | 20 MoveTreeOption duplicate_option) |
21 : source_path_(source_path), | 21 : source_path_(source_path), |
22 dest_path_(dest_path), | 22 dest_path_(dest_path), |
23 temp_dir_(temp_dir), | 23 temp_dir_(temp_dir), |
24 moved_to_dest_path_(false), | 24 moved_to_dest_path_(false), |
25 moved_to_backup_(false), | 25 moved_to_backup_(false), |
26 source_moved_to_backup_(false), | 26 source_moved_to_backup_(false), |
27 duplicate_option_(duplicate_option) { | 27 duplicate_option_(duplicate_option) { |
28 } | 28 } |
29 | 29 |
30 bool MoveTreeWorkItem::Do() { | 30 bool MoveTreeWorkItem::DoImpl() { |
31 if (!base::PathExists(source_path_)) { | 31 if (!base::PathExists(source_path_)) { |
32 LOG(ERROR) << source_path_.value() << " does not exist"; | 32 LOG(ERROR) << source_path_.value() << " does not exist"; |
33 return false; | 33 return false; |
34 } | 34 } |
35 | 35 |
36 // If dest_path_ exists, we can do one of two things: | 36 // If dest_path_ exists, we can do one of two things: |
37 // 1) If the contents of src_path_are already fully contained in dest_path_ | 37 // 1) If the contents of src_path_are already fully contained in dest_path_ |
38 // then do nothing and return success. Fully contained means the full | 38 // then do nothing and return success. Fully contained means the full |
39 // file structure with identical files is contained in dest_path_. For | 39 // file structure with identical files is contained in dest_path_. For |
40 // Chrome, if dest_path_ exists, this is expected to be the common case. | 40 // Chrome, if dest_path_ exists, this is expected to be the common case. |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
92 << " to destination " << dest_path_.value(); | 92 << " to destination " << dest_path_.value(); |
93 } else { | 93 } else { |
94 PLOG(ERROR) << "failed move " << source_path_.value() | 94 PLOG(ERROR) << "failed move " << source_path_.value() |
95 << " to " << dest_path_.value(); | 95 << " to " << dest_path_.value(); |
96 return false; | 96 return false; |
97 } | 97 } |
98 | 98 |
99 return true; | 99 return true; |
100 } | 100 } |
101 | 101 |
102 void MoveTreeWorkItem::Rollback() { | 102 void MoveTreeWorkItem::RollbackImpl() { |
103 if (moved_to_dest_path_ && !base::Move(dest_path_, source_path_)) { | 103 if (moved_to_dest_path_ && !base::Move(dest_path_, source_path_)) { |
104 PLOG(ERROR) << "Can not move " << dest_path_.value() | 104 PLOG(ERROR) << "Can not move " << dest_path_.value() |
105 << " to " << source_path_.value(); | 105 << " to " << source_path_.value(); |
106 } | 106 } |
107 | 107 |
108 base::FilePath backup = backup_path_.path().Append(dest_path_.BaseName()); | 108 base::FilePath backup = backup_path_.path().Append(dest_path_.BaseName()); |
109 if (moved_to_backup_ && !base::Move(backup, dest_path_)) { | 109 if (moved_to_backup_ && !base::Move(backup, dest_path_)) { |
110 PLOG(ERROR) << "failed move " << backup.value() | 110 PLOG(ERROR) << "failed move " << backup.value() |
111 << " to " << dest_path_.value(); | 111 << " to " << dest_path_.value(); |
112 } | 112 } |
113 | 113 |
114 if (source_moved_to_backup_ && !base::Move(backup, source_path_)) { | 114 if (source_moved_to_backup_ && !base::Move(backup, source_path_)) { |
115 PLOG(ERROR) << "Can not restore " << backup.value() | 115 PLOG(ERROR) << "Can not restore " << backup.value() |
116 << " to " << source_path_.value(); | 116 << " to " << source_path_.value(); |
117 } | 117 } |
118 } | 118 } |
OLD | NEW |