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

Unified Diff: chrome/installer/util/work_item_list.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: self review Created 4 years, 8 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 side-by-side diff with in-line comments
Download patch
Index: chrome/installer/util/work_item_list.cc
diff --git a/chrome/installer/util/work_item_list.cc b/chrome/installer/util/work_item_list.cc
index 609933065afaa65ac768c1c48a34d0820e2b79ef..20210276495c5550a590dcab74d251e312cb3979 100644
--- a/chrome/installer/util/work_item_list.cc
+++ b/chrome/installer/util/work_item_list.cc
@@ -28,19 +28,16 @@ WorkItemList::~WorkItemList() {
}
}
-WorkItemList::WorkItemList()
- : status_(ADD_ITEM) {
-}
-
-bool WorkItemList::Do() {
- if (status_ != ADD_ITEM)
- return false;
+WorkItemList::WorkItemList() = default;
+bool WorkItemList::DoImpl() {
bool result = true;
while (!list_.empty()) {
WorkItem* work_item = list_.front();
list_.pop_front();
executed_list_.push_front(work_item);
+ work_item->set_best_effort(best_effort());
grt (UTC plus 2) 2016/05/06 18:39:13 hmm. one flaw with this is that you can't add a be
fdoray 2016/05/10 18:35:32 Now I only make the work items best-effort if the
+ work_item->set_rollback_enabled(rollback_enabled());
if (!work_item->Do()) {
LOG(ERROR) << "item execution failed " << work_item->log_message();
result = false;
@@ -51,25 +48,18 @@ bool WorkItemList::Do() {
if (result)
VLOG(1) << "list execution succeeded";
- status_ = LIST_EXECUTED;
return result;
}
-void WorkItemList::Rollback() {
- if (status_ != LIST_EXECUTED)
- return;
-
+void WorkItemList::RollbackImpl() {
for (WorkItemIterator itr = executed_list_.begin();
itr != executed_list_.end(); ++itr) {
(*itr)->Rollback();
}
-
- status_ = LIST_ROLLED_BACK;
- return;
}
void WorkItemList::AddWorkItem(WorkItem* work_item) {
- DCHECK(status_ == ADD_ITEM);
+ DCHECK_EQ(WorkItem::BEFORE_DO, state());
grt (UTC plus 2) 2016/05/06 18:39:13 nit: no need for WorkItem:: here
fdoray 2016/05/10 18:35:31 Done.
list_.push_back(work_item);
}
@@ -236,16 +226,13 @@ WorkItem* WorkItemList::AddSelfRegWorkItem(const std::wstring& dll_path,
NoRollbackWorkItemList::~NoRollbackWorkItemList() {
}
-bool NoRollbackWorkItemList::Do() {
- if (status_ != ADD_ITEM)
- return false;
-
+bool NoRollbackWorkItemList::DoImpl() {
bool result = true;
while (!list_.empty()) {
WorkItem* work_item = list_.front();
list_.pop_front();
executed_list_.push_front(work_item);
- work_item->set_ignore_failure(true);
+ work_item->set_rollback_enabled(false);
if (!work_item->Do()) {
LOG(ERROR) << "NoRollbackWorkItemList: item execution failed "
<< work_item->log_message();
@@ -256,10 +243,9 @@ bool NoRollbackWorkItemList::Do() {
if (result)
VLOG(1) << "NoRollbackWorkItemList: list execution succeeded";
- status_ = LIST_EXECUTED;
return result;
}
-void NoRollbackWorkItemList::Rollback() {
+void NoRollbackWorkItemList::RollbackImpl() {
// Ignore rollback.
}

Powered by Google App Engine
This is Rietveld 408576698