Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(299)

Side by Side Diff: chrome/installer/util/create_reg_key_work_item.cc

Issue 1882923003: Add best-effort/allow rollback flags on WorkItem. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@simple_list_tests
Patch Set: fix build error Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 <shlwapi.h> 5 #include <shlwapi.h>
6 #include <stddef.h> 6 #include <stddef.h>
7 7
8 #include "base/files/file_path.h" 8 #include "base/files/file_path.h"
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/win/registry.h" 10 #include "base/win/registry.h"
(...skipping 28 matching lines...) Expand all
39 REGSAM wow64_access) 39 REGSAM wow64_access)
40 : predefined_root_(predefined_root), 40 : predefined_root_(predefined_root),
41 path_(path), 41 path_(path),
42 wow64_access_(wow64_access), 42 wow64_access_(wow64_access),
43 key_created_(false) { 43 key_created_(false) {
44 DCHECK(wow64_access == 0 || 44 DCHECK(wow64_access == 0 ||
45 wow64_access == KEY_WOW64_32KEY || 45 wow64_access == KEY_WOW64_32KEY ||
46 wow64_access == KEY_WOW64_64KEY); 46 wow64_access == KEY_WOW64_64KEY);
47 } 47 }
48 48
49 bool CreateRegKeyWorkItem::Do() { 49 bool CreateRegKeyWorkItem::DoImpl() {
50 if (!InitKeyList()) { 50 if (!InitKeyList()) {
51 // Nothing needs to be done here. 51 // Nothing needs to be done here.
52 VLOG(1) << "no key to create"; 52 VLOG(1) << "no key to create";
53 return true; 53 return true;
54 } 54 }
55 55
56 RegKey key; 56 RegKey key;
57 std::wstring key_path; 57 std::wstring key_path;
58 58
59 // To create keys, we iterate from back to front. 59 // To create keys, we iterate from back to front.
(...skipping 23 matching lines...) Expand all
83 } 83 }
84 } else { 84 } else {
85 LOG(ERROR) << "Failed to create " << key_path; 85 LOG(ERROR) << "Failed to create " << key_path;
86 return false; 86 return false;
87 } 87 }
88 } 88 }
89 89
90 return true; 90 return true;
91 } 91 }
92 92
93 void CreateRegKeyWorkItem::Rollback() { 93 void CreateRegKeyWorkItem::RollbackImpl() {
94 if (!key_created_) 94 if (!key_created_)
95 return; 95 return;
96 96
97 std::wstring key_path; 97 std::wstring key_path;
98 // To delete keys, we iterate from front to back. 98 // To delete keys, we iterate from front to back.
99 std::vector<std::wstring>::iterator itr; 99 std::vector<std::wstring>::iterator itr;
100 for (itr = key_list_.begin(); itr != key_list_.end(); ++itr) { 100 for (itr = key_list_.begin(); itr != key_list_.end(); ++itr) {
101 key_path.assign(*itr); 101 key_path.assign(*itr);
102 RegKey key(predefined_root_, L"", KEY_WRITE | wow64_access_); 102 RegKey key(predefined_root_, L"", KEY_WRITE | wow64_access_);
103 if (key.DeleteEmptyKey(key_path.c_str()) == ERROR_SUCCESS) { 103 if (key.DeleteEmptyKey(key_path.c_str()) == ERROR_SUCCESS) {
(...skipping 19 matching lines...) Expand all
123 123
124 do { 124 do {
125 key_list_.push_back(key_path); 125 key_list_.push_back(key_path);
126 // This is pure string operation so it does not matter whether the 126 // This is pure string operation so it does not matter whether the
127 // path is file path or registry path. 127 // path is file path or registry path.
128 UpOneDirectoryOrEmpty(&key_path); 128 UpOneDirectoryOrEmpty(&key_path);
129 } while (!key_path.empty()); 129 } while (!key_path.empty());
130 130
131 return true; 131 return true;
132 } 132 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698