Index: components/autofill/content/browser/autocheckout_manager.cc |
diff --git a/components/autofill/content/browser/autocheckout_manager.cc b/components/autofill/content/browser/autocheckout_manager.cc |
index b06f41fc0f2b387be3d14c94588d457c172a3a96..4f2455d93276c3f7ddd2b7329a30088dc7bd083a 100644 |
--- a/components/autofill/content/browser/autocheckout_manager.cc |
+++ b/components/autofill/content/browser/autocheckout_manager.cc |
@@ -201,26 +201,29 @@ void AutocheckoutManager::FillForms() { |
RecordTimeTaken(page_meta_data_->current_page_number); |
} |
-void AutocheckoutManager::OnClickFailed(AutocheckoutStatus status) { |
- // |in_autocheckout_flow_| get reset in |OnLoadedPageMetaData| for the last |
- // page, so when click failed on the last page, the value is already 'false'. |
- // This check stops crashing, a better solution should be sending an IPC |
- // message to browser when the renderer completes a step. |
- DCHECK(page_meta_data_->IsEndOfAutofillableFlow() || in_autocheckout_flow_); |
+void AutocheckoutManager::OnAutocheckoutPageCompleted( |
+ AutocheckoutStatus status) { |
+ DVLOG(2) << "OnAutocheckoutPageCompleted, page_no: " |
+ << page_meta_data_->current_page_number |
+ << " status: " |
+ << status; |
+ if (!in_autocheckout_flow_) |
+ return; |
+ |
DCHECK_NE(MISSING_FIELDMAPPING, status); |
- SendAutocheckoutStatus(status); |
- SetStepProgressForPage(page_meta_data_->current_page_number, |
- AUTOCHECKOUT_STEP_FAILED); |
+ SetStepProgressForPage( |
+ page_meta_data_->current_page_number, |
+ (status == SUCCESS) ? AUTOCHECKOUT_STEP_COMPLETED : |
+ AUTOCHECKOUT_STEP_FAILED); |
- autofill_manager_->delegate()->OnAutocheckoutError(); |
- in_autocheckout_flow_ = false; |
+ if (page_meta_data_->IsEndOfAutofillableFlow() || status != SUCCESS) |
+ EndAutocheckout(status); |
} |
void AutocheckoutManager::OnLoadedPageMetaData( |
scoped_ptr<AutocheckoutPageMetaData> page_meta_data) { |
- scoped_ptr<AutocheckoutPageMetaData> old_meta_data = |
- page_meta_data_.Pass(); |
+ scoped_ptr<AutocheckoutPageMetaData> old_meta_data = page_meta_data_.Pass(); |
page_meta_data_ = page_meta_data.Pass(); |
// Don't log that the bubble could be displayed if the user entered an |
@@ -239,51 +242,33 @@ void AutocheckoutManager::OnLoadedPageMetaData( |
AutocheckoutStatus status = SUCCESS; |
// Missing Autofill server results. |
- if (!page_meta_data_) { |
- in_autocheckout_flow_ = false; |
+ if (!page_meta_data_.get()) { |
status = MISSING_FIELDMAPPING; |
- } else if (page_meta_data_->IsStartOfAutofillableFlow()) { |
+ } else if (IsStartOfAutofillableFlow()) { |
// Not possible unless Autocheckout failed to proceed. |
- in_autocheckout_flow_ = false; |
status = CANNOT_PROCEED; |
} else if (!page_meta_data_->IsInAutofillableFlow()) { |
// Missing Autocheckout meta data in the Autofill server results. |
- in_autocheckout_flow_ = false; |
status = MISSING_FIELDMAPPING; |
} else if (page_meta_data_->current_page_number <= |
old_meta_data->current_page_number) { |
// Not possible unless Autocheckout failed to proceed. |
- in_autocheckout_flow_ = false; |
status = CANNOT_PROCEED; |
} |
// Encountered an error during the Autocheckout flow, probably to |
// do with a problem on the previous page. |
- if (!in_autocheckout_flow_) { |
- if (old_meta_data) { |
- SetStepProgressForPage(old_meta_data->current_page_number, |
- AUTOCHECKOUT_STEP_FAILED); |
- } |
- SendAutocheckoutStatus(status); |
- autofill_manager_->delegate()->OnAutocheckoutError(); |
+ if (status != SUCCESS) { |
+ SetStepProgressForPage(old_meta_data->current_page_number, |
+ AUTOCHECKOUT_STEP_FAILED); |
+ EndAutocheckout(status); |
return; |
} |
- SetStepProgressForPage(old_meta_data->current_page_number, |
- AUTOCHECKOUT_STEP_COMPLETED); |
SetStepProgressForPage(page_meta_data_->current_page_number, |
AUTOCHECKOUT_STEP_STARTED); |
FillForms(); |
- // If the current page is the last page in the flow, set in-progress |
- // steps to 'completed', and send status. |
- if (page_meta_data_->IsEndOfAutofillableFlow()) { |
- SetStepProgressForPage(page_meta_data_->current_page_number, |
- AUTOCHECKOUT_STEP_COMPLETED); |
- SendAutocheckoutStatus(status); |
- autofill_manager_->delegate()->OnAutocheckoutSuccess(); |
- in_autocheckout_flow_ = false; |
- } |
} |
void AutocheckoutManager::OnFormsSeen() { |
@@ -377,16 +362,6 @@ void AutocheckoutManager::ReturnAutocheckoutData( |
AUTOCHECKOUT_STEP_STARTED); |
FillForms(); |
- |
- // If the current page is the last page in the flow, set in-progress |
- // steps to 'completed', and send status. |
- if (page_meta_data_->IsEndOfAutofillableFlow()) { |
- SetStepProgressForPage(page_meta_data_->current_page_number, |
- AUTOCHECKOUT_STEP_COMPLETED); |
- SendAutocheckoutStatus(SUCCESS); |
- autofill_manager_->delegate()->OnAutocheckoutSuccess(); |
- in_autocheckout_flow_ = false; |
- } |
} |
void AutocheckoutManager::set_metric_logger( |
@@ -548,4 +523,20 @@ void AutocheckoutManager::RecordTimeTaken(int page_number) { |
last_step_completion_timestamp_ = base::TimeTicks().Now(); |
} |
+void AutocheckoutManager::EndAutocheckout(AutocheckoutStatus status) { |
+ DCHECK(in_autocheckout_flow_); |
+ |
+ DVLOG(2) << "EndAutocheckout at step: " |
+ << page_meta_data_->current_page_number |
+ << " with status: " |
+ << status; |
+ |
+ SendAutocheckoutStatus(status); |
+ if (status == SUCCESS) |
+ autofill_manager_->delegate()->OnAutocheckoutSuccess(); |
+ else |
+ autofill_manager_->delegate()->OnAutocheckoutError(); |
+ in_autocheckout_flow_ = false; |
+} |
+ |
} // namespace autofill |