Index: components/autofill/content/renderer/autofill_agent.cc |
diff --git a/components/autofill/content/renderer/autofill_agent.cc b/components/autofill/content/renderer/autofill_agent.cc |
index 4d22a4c1b1524bf6c8390b4678cd64c7d7c27c38..75a4609bc5d99fc29213bd72ac6e5ef9fa0bc6e0 100644 |
--- a/components/autofill/content/renderer/autofill_agent.cc |
+++ b/components/autofill/content/renderer/autofill_agent.cc |
@@ -14,7 +14,6 @@ |
#include "components/autofill/content/renderer/form_autofill_util.h" |
#include "components/autofill/content/renderer/page_click_tracker.h" |
#include "components/autofill/content/renderer/password_autofill_agent.h" |
-#include "components/autofill/core/common/autocheckout_status.h" |
#include "components/autofill/core/common/autofill_constants.h" |
#include "components/autofill/core/common/autofill_messages.h" |
#include "components/autofill/core/common/autofill_switches.h" |
@@ -248,8 +247,10 @@ void AutofillAgent::DidFailProvisionalLoad(WebFrame* frame, |
void AutofillAgent::DidCommitProvisionalLoad(WebFrame* frame, |
bool is_new_navigation) { |
in_flight_request_form_.reset(); |
- if (!frame->parent()) |
+ if (!frame->parent() && autocheckout_click_in_progress_) { |
autocheckout_click_in_progress_ = false; |
+ CompleteAutocheckoutPage(SUCCESS); |
+ } |
} |
void AutofillAgent::FrameDetached(WebFrame* frame) { |
@@ -685,8 +686,7 @@ void AutofillAgent::OnFillFormsAndClick( |
for (size_t i = 0; i < click_elements_before_form_fill.size(); ++i) { |
if (!ClickElement(topmost_frame_->document(), |
click_elements_before_form_fill[i])) { |
- Send(new AutofillHostMsg_ClickFailed(routing_id(), |
- MISSING_CLICK_ELEMENT_BEFORE_FORM_FILLING)); |
+ CompleteAutocheckoutPage(MISSING_CLICK_ELEMENT_BEFORE_FORM_FILLING); |
return; |
} |
} |
@@ -699,15 +699,16 @@ void AutofillAgent::OnFillFormsAndClick( |
for (size_t i = 0; i < click_elements_after_form_fill.size(); ++i) { |
if (!ClickElement(topmost_frame_->document(), |
click_elements_after_form_fill[i])) { |
- Send(new AutofillHostMsg_ClickFailed(routing_id(), |
- MISSING_CLICK_ELEMENT_AFTER_FORM_FILLING)); |
+ CompleteAutocheckoutPage(MISSING_CLICK_ELEMENT_AFTER_FORM_FILLING); |
return; |
} |
} |
// Exit early if there is nothing to click. |
- if (click_element_descriptor.retrieval_method == WebElementDescriptor::NONE) |
+ if (click_element_descriptor.retrieval_method == WebElementDescriptor::NONE) { |
+ CompleteAutocheckoutPage(SUCCESS); |
return; |
+ } |
// It's possible that clicking the element to proceed in an Autocheckout |
// flow will not actually proceed to the next step in the flow, e.g. there |
@@ -721,9 +722,7 @@ void AutofillAgent::OnFillFormsAndClick( |
&AutofillAgent::ClickFailed); |
if (!ClickElement(topmost_frame_->document(), |
click_element_descriptor)) { |
- click_timer_.Stop(); |
- Send(new AutofillHostMsg_ClickFailed(routing_id(), |
- MISSING_ADVANCE)); |
+ CompleteAutocheckoutPage(MISSING_ADVANCE); |
} |
} |
@@ -734,9 +733,14 @@ void AutofillAgent::OnAutocheckoutSupported() { |
MaybeShowAutocheckoutBubble(); |
} |
+void AutofillAgent::CompleteAutocheckoutPage( |
+ autofill::AutocheckoutStatus status) { |
+ click_timer_.Stop(); |
+ Send(new AutofillHostMsg_AutocheckoutPageCompleted(routing_id(), status)); |
+} |
+ |
void AutofillAgent::ClickFailed() { |
- Send(new AutofillHostMsg_ClickFailed(routing_id(), |
- CANNOT_PROCEED)); |
+ CompleteAutocheckoutPage(CANNOT_PROCEED); |
} |
void AutofillAgent::ShowSuggestions(const WebInputElement& element, |