1// Copyright 2013 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef COMPONENTS_AUTOFILL_CONTENT_BROWSER_REQUEST_AUTOCOMPLETE_MANAGER_H_
6#define COMPONENTS_AUTOFILL_CONTENT_BROWSER_REQUEST_AUTOCOMPLETE_MANAGER_H_
7
8#include "base/callback_forward.h"
9#include "base/memory/weak_ptr.h"
10#include "third_party/WebKit/public/web/WebFormElement.h"
11
12class GURL;
13
14namespace autofill {
15
16class AutofillDriverImpl;
17struct FormData;
18class FormStructure;
19
20// Driver for the requestAutocomplete flow.
21class RequestAutocompleteManager {
22 public:
23  explicit RequestAutocompleteManager(AutofillDriverImpl* autofill_driver);
24  ~RequestAutocompleteManager();
25
26  // Requests an interactive autocomplete UI to be shown for |frame_url| with
27  // |form|.
28  void OnRequestAutocomplete(const FormData& form, const GURL& frame_url);
29
30 private:
31  // Tells the renderer that the current interactive autocomplete dialog
32  // finished with the |result| saying if it was successfull or not, and
33  // |form_data| containing the filled form data.
34  void ReturnAutocompleteResult(
35      blink::WebFormElement::AutocompleteResult result,
36      const FormData& form_data);
37
38  // Shows the requestAutocomplete dialog for |source_url| with data from |form|
39  // and calls |callback| once the interaction is complete.
40  void ShowRequestAutocompleteDialog(
41      const FormData& form,
42      const GURL& source_url,
43      const base::Callback<void(const FormStructure*)>& callback);
44
45  // If |result| is not null, derives a FormData object from it and passes it
46  // back to the page along an |AutocompleteResultSuccess| result. Otherwise, it
47  // passes to the page an empty FormData along an
48  // |AutocompleteResultErrorCancel| result.
49  void ReturnAutocompleteData(const FormStructure* result);
50
51  // The autofill driver owns and outlives |this|.
52  AutofillDriverImpl* const autofill_driver_;  // weak.
53
54  base::WeakPtrFactory<RequestAutocompleteManager> weak_ptr_factory_;
55};
56
57}  // namespace autofill
58
59#endif  // COMPONENTS_AUTOFILL_CONTENT_BROWSER_REQUEST_AUTOCOMPLETE_MANAGER_H_
60