| 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 ca4c46b50743b51f7420c01019f6aa948ad89096..f7ba62e38e59a4003a99ae88e34a5ed21f365911 100644 | 
| --- a/components/autofill/content/renderer/autofill_agent.cc | 
| +++ b/components/autofill/content/renderer/autofill_agent.cc | 
| @@ -63,8 +63,6 @@ const size_t kMaximumTextSizeForAutofill = 1000; | 
| // via IPC (to prevent long IPC messages). | 
| const size_t kMaximumDataListSizeForAutofill = 30; | 
|  | 
| -const int kAutocheckoutClickTimeout = 3; | 
| - | 
|  | 
| // Gets all the data list values (with corresponding label) for the given | 
| // element. | 
| @@ -130,14 +128,11 @@ AutofillAgent::AutofillAgent(content::RenderView* render_view, | 
| password_autofill_agent_(password_autofill_agent), | 
| autofill_query_id_(0), | 
| autofill_action_(AUTOFILL_NONE), | 
| -      topmost_frame_(NULL), | 
| web_view_(render_view->GetWebView()), | 
| display_warning_if_disabled_(false), | 
| was_query_node_autofilled_(false), | 
| has_shown_autofill_popup_for_current_edit_(false), | 
| did_set_node_text_(false), | 
| -      autocheckout_click_in_progress_(false), | 
| -      is_autocheckout_supported_(false), | 
| has_new_forms_for_browser_(false), | 
| ignore_text_changes_(false), | 
| weak_ptr_factory_(this) { | 
| @@ -153,7 +148,6 @@ AutofillAgent::~AutofillAgent() {} | 
| bool AutofillAgent::OnMessageReceived(const IPC::Message& message) { | 
| bool handled = true; | 
| IPC_BEGIN_MESSAGE_MAP(AutofillAgent, message) | 
| -    IPC_MESSAGE_HANDLER(AutofillMsg_GetAllForms, OnGetAllForms) | 
| IPC_MESSAGE_HANDLER(AutofillMsg_FormDataFilled, OnFormDataFilled) | 
| IPC_MESSAGE_HANDLER(AutofillMsg_FieldTypePredictionsAvailable, | 
| OnFieldTypePredictionsAvailable) | 
| @@ -173,10 +167,6 @@ bool AutofillAgent::OnMessageReceived(const IPC::Message& message) { | 
| OnAcceptPasswordAutofillSuggestion) | 
| IPC_MESSAGE_HANDLER(AutofillMsg_RequestAutocompleteResult, | 
| OnRequestAutocompleteResult) | 
| -    IPC_MESSAGE_HANDLER(AutofillMsg_FillFormsAndClick, | 
| -                        OnFillFormsAndClick) | 
| -    IPC_MESSAGE_HANDLER(AutofillMsg_AutocheckoutSupported, | 
| -                        OnAutocheckoutSupported) | 
| IPC_MESSAGE_HANDLER(AutofillMsg_PageShown, | 
| OnPageShown) | 
| IPC_MESSAGE_UNHANDLED(handled = false) | 
| @@ -194,7 +184,6 @@ void AutofillAgent::DidFinishDocumentLoad(WebFrame* frame) { | 
| std::vector<FormData> forms; | 
| bool has_more_forms = false; | 
| if (!frame->parent()) { | 
| -    topmost_frame_ = frame; | 
| form_elements_.clear(); | 
| has_more_forms = form_cache_.ExtractFormsAndFormElements( | 
| *frame, kRequiredAutofillFields, &forms, &form_elements_); | 
| @@ -213,41 +202,13 @@ void AutofillAgent::DidFinishDocumentLoad(WebFrame* frame) { | 
| } | 
| } | 
|  | 
| -void AutofillAgent::DidStartProvisionalLoad(WebFrame* frame) { | 
| -  if (!frame->parent()) { | 
| -    is_autocheckout_supported_ = false; | 
| -    topmost_frame_ = NULL; | 
| -    if (click_timer_.IsRunning()) { | 
| -      click_timer_.Stop(); | 
| -      autocheckout_click_in_progress_ = true; | 
| -    } | 
| -  } | 
| -} | 
| - | 
| -void AutofillAgent::DidFailProvisionalLoad(WebFrame* frame, | 
| -                                           const WebKit::WebURLError& error) { | 
| -  if (!frame->parent() && autocheckout_click_in_progress_) { | 
| -    autocheckout_click_in_progress_ = false; | 
| -    ClickFailed(); | 
| -  } | 
| -} | 
| - | 
| void AutofillAgent::DidCommitProvisionalLoad(WebFrame* frame, | 
| bool is_new_navigation) { | 
| in_flight_request_form_.reset(); | 
| -  if (!frame->parent() && autocheckout_click_in_progress_) { | 
| -    autocheckout_click_in_progress_ = false; | 
| -    CompleteAutocheckoutPage(SUCCESS); | 
| -  } | 
| } | 
|  | 
| void AutofillAgent::FrameDetached(WebFrame* frame) { | 
| form_cache_.ResetFrame(*frame); | 
| -  if (!frame->parent()) { | 
| -    // |frame| is about to be destroyed so we need to clear |top_most_frame_|. | 
| -    topmost_frame_ = NULL; | 
| -    click_timer_.Stop(); | 
| -  } | 
| } | 
|  | 
| void AutofillAgent::WillSubmitForm(WebFrame* frame, | 
| @@ -288,30 +249,12 @@ void AutofillAgent::FocusedNodeChanged(const WebKit::WebNode& node) { | 
| return; | 
|  | 
| element_ = *element; | 
| - | 
| -  MaybeShowAutocheckoutBubble(); | 
| } | 
|  | 
| void AutofillAgent::OrientationChangeEvent(int orientation) { | 
| HideAutofillUI(); | 
| } | 
|  | 
| -void AutofillAgent::MaybeShowAutocheckoutBubble() { | 
| -  if (element_.isNull() || !element_.focused()) | 
| -    return; | 
| - | 
| -  FormData form; | 
| -  FormFieldData field; | 
| -  // This must be called to short circuit this method if it fails. | 
| -  if (!FindFormAndFieldForInputElement(element_, &form, &field, REQUIRE_NONE)) | 
| -    return; | 
| - | 
| -  Send(new AutofillHostMsg_MaybeShowAutocheckoutBubble( | 
| -      routing_id(), | 
| -      form, | 
| -      GetScaledBoundingBox(web_view_->pageScaleFactor(), &element_))); | 
| -} | 
| - | 
| void AutofillAgent::DidChangeScrollOffset(WebKit::WebFrame*) { | 
| HideAutofillUI(); | 
| } | 
| @@ -528,24 +471,6 @@ void AutofillAgent::OnAcceptPasswordAutofillSuggestion( | 
| DCHECK(handled); | 
| } | 
|  | 
| -void AutofillAgent::OnGetAllForms() { | 
| -  form_elements_.clear(); | 
| - | 
| -  // Force fetch all non empty forms. | 
| -  std::vector<FormData> forms; | 
| -  form_cache_.ExtractFormsAndFormElements( | 
| -      *topmost_frame_, 0, &forms, &form_elements_); | 
| - | 
| -  // OnGetAllForms should only be called if AutofillAgent reported to | 
| -  // AutofillManager that there are more forms | 
| -  DCHECK(!forms.empty()); | 
| - | 
| -  // Report to AutofillManager that all forms are being sent. | 
| -  Send(new AutofillHostMsg_FormsSeen(routing_id(), forms, | 
| -                                     forms_seen_timestamp_, | 
| -                                     NO_SPECIAL_FORMS_SEEN)); | 
| -} | 
| - | 
| void AutofillAgent::OnRequestAutocompleteResult( | 
| WebFormElement::AutocompleteResult result, const FormData& form_data) { | 
| if (in_flight_request_form_.isNull()) | 
| @@ -561,77 +486,7 @@ void AutofillAgent::OnRequestAutocompleteResult( | 
| in_flight_request_form_.reset(); | 
| } | 
|  | 
| -void AutofillAgent::OnFillFormsAndClick( | 
| -    const std::vector<FormData>& forms, | 
| -    const std::vector<WebElementDescriptor>& click_elements_before_form_fill, | 
| -    const std::vector<WebElementDescriptor>& click_elements_after_form_fill, | 
| -    const WebElementDescriptor& click_element_descriptor) { | 
| -  DCHECK_EQ(forms.size(), form_elements_.size()); | 
| - | 
| -  // Click elements in click_elements_before_form_fill. | 
| -  for (size_t i = 0; i < click_elements_before_form_fill.size(); ++i) { | 
| -    if (!ClickElement(topmost_frame_->document(), | 
| -                      click_elements_before_form_fill[i])) { | 
| -      CompleteAutocheckoutPage(MISSING_CLICK_ELEMENT_BEFORE_FORM_FILLING); | 
| -      return; | 
| -    } | 
| -  } | 
| - | 
| -  // Fill the form. | 
| -  for (size_t i = 0; i < forms.size(); ++i) | 
| -    FillFormForAllElements(forms[i], form_elements_[i]); | 
| - | 
| -  // Click elements in click_elements_after_form_fill. | 
| -  for (size_t i = 0; i < click_elements_after_form_fill.size(); ++i) { | 
| -    if (!ClickElement(topmost_frame_->document(), | 
| -                      click_elements_after_form_fill[i])) { | 
| -      CompleteAutocheckoutPage(MISSING_CLICK_ELEMENT_AFTER_FORM_FILLING); | 
| -      return; | 
| -    } | 
| -  } | 
| - | 
| -  // Exit early if there is nothing to click. | 
| -  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 | 
| -  // is a new required field that Autocheckout does not know how to fill.  In | 
| -  // order to capture this case and present the user with an error a timer is | 
| -  // set that informs the browser of the error. |click_timer_| has to be started | 
| -  // before clicking so it can start before DidStartProvisionalLoad started. | 
| -  click_timer_.Start(FROM_HERE, | 
| -                     base::TimeDelta::FromSeconds(kAutocheckoutClickTimeout), | 
| -                     this, | 
| -                     &AutofillAgent::ClickFailed); | 
| -  if (!ClickElement(topmost_frame_->document(), | 
| -                    click_element_descriptor)) { | 
| -    CompleteAutocheckoutPage(MISSING_ADVANCE); | 
| -  } | 
| -} | 
| - | 
| -void AutofillAgent::OnAutocheckoutSupported() { | 
| -  is_autocheckout_supported_ = true; | 
| -  if (has_new_forms_for_browser_) | 
| -    MaybeSendDynamicFormsSeen(); | 
| -  MaybeShowAutocheckoutBubble(); | 
| -} | 
| - | 
| void AutofillAgent::OnPageShown() { | 
| -  if (is_autocheckout_supported_) | 
| -    MaybeShowAutocheckoutBubble(); | 
| -} | 
| - | 
| -void AutofillAgent::CompleteAutocheckoutPage( | 
| -    autofill::AutocheckoutStatus status) { | 
| -  click_timer_.Stop(); | 
| -  Send(new AutofillHostMsg_AutocheckoutPageCompleted(routing_id(), status)); | 
| -} | 
| - | 
| -void AutofillAgent::ClickFailed() { | 
| -  CompleteAutocheckoutPage(CANNOT_PROCEED); | 
| } | 
|  | 
| void AutofillAgent::ShowSuggestions(const WebInputElement& element, | 
| @@ -752,38 +607,9 @@ void AutofillAgent::HideAutofillUI() { | 
| Send(new AutofillHostMsg_HideAutofillUI(routing_id())); | 
| } | 
|  | 
| +// TODO(isherman): Decide if we want to support autofill with AJAX. | 
| void AutofillAgent::didAssociateFormControls( | 
| const WebKit::WebVector<WebKit::WebNode>& nodes) { | 
| -  for (size_t i = 0; i < nodes.size(); ++i) { | 
| -    WebKit::WebNode node = nodes[i]; | 
| -    if (node.document().frame() == topmost_frame_) { | 
| -      forms_seen_timestamp_ = base::TimeTicks::Now(); | 
| -      has_new_forms_for_browser_ = true; | 
| -      break; | 
| -    } | 
| -  } | 
| - | 
| -  if (has_new_forms_for_browser_ && is_autocheckout_supported_) | 
| -    MaybeSendDynamicFormsSeen(); | 
| -} | 
| - | 
| -void AutofillAgent::MaybeSendDynamicFormsSeen() { | 
| -  has_new_forms_for_browser_ = false; | 
| -  form_elements_.clear(); | 
| -  std::vector<FormData> forms; | 
| -  // This will only be called for Autocheckout flows, so send all forms to | 
| -  // save an IPC. | 
| -  form_cache_.ExtractFormsAndFormElements( | 
| -      *topmost_frame_, 0, &forms, &form_elements_); | 
| -  autofill::FormsSeenState state = autofill::DYNAMIC_FORMS_SEEN; | 
| - | 
| -  if (!forms.empty()) { | 
| -    if (click_timer_.IsRunning()) | 
| -      click_timer_.Stop(); | 
| -    Send(new AutofillHostMsg_FormsSeen(routing_id(), forms, | 
| -                                       forms_seen_timestamp_, | 
| -                                       state)); | 
| -  } | 
| } | 
|  | 
| }  // namespace autofill | 
|  |