form_cache.h revision a1401311d1ab56c4ed0a474bd38c108f75cb0cd9
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_RENDERER_FORM_CACHE_H_
6#define COMPONENTS_AUTOFILL_CONTENT_RENDERER_FORM_CACHE_H_
7
8#include <map>
9#include <set>
10#include <vector>
11
12#include "base/strings/string16.h"
13
14namespace blink {
15class WebDocument;
16class WebFormControlElement;
17class WebFormElement;
18class WebFrame;
19class WebInputElement;
20class WebSelectElement;
21}
22
23namespace autofill {
24
25struct FormData;
26struct FormDataPredictions;
27
28// Manages the forms in a RenderView.
29class FormCache {
30 public:
31  FormCache();
32  ~FormCache();
33
34  // Scans the DOM in |frame| extracting and storing forms.
35  // Fills |forms| with extracted forms.
36  void ExtractForms(const blink::WebFrame& frame,
37                    std::vector<FormData>* forms);
38
39  // Scans the DOM in |frame| extracting and storing forms.
40  // Fills |forms| with extracted forms and |web_form_elements| with associated
41  // web form elements. Returns true if there are unextracted forms due to
42  // |minimum_required_fields| limit, else false.
43  bool ExtractFormsAndFormElements(
44      const blink::WebFrame& frame,
45      size_t minimum_required_fields,
46      std::vector<FormData>* forms,
47      std::vector<blink::WebFormElement>* web_form_elements);
48
49  // Resets the forms for the specified |frame|.
50  void ResetFrame(const blink::WebFrame& frame);
51
52  // Clears the values of all input elements in the form that contains
53  // |element|.  Returns false if the form is not found.
54  bool ClearFormWithElement(const blink::WebFormControlElement& element);
55
56  // For each field in the |form|, sets the field's placeholder text to the
57  // field's overall predicted type.  Also sets the title to include the field's
58  // heuristic type, server type, and signature; as well as the form's signature
59  // and the experiment id for the server predictions.
60  bool ShowPredictions(const FormDataPredictions& form);
61
62 private:
63  // The cached web frames.
64  std::set<blink::WebDocument> web_documents_;
65
66  // The cached initial values for <select> elements.
67  std::map<const blink::WebSelectElement, base::string16>
68      initial_select_values_;
69
70  // The cached initial values for checkable <input> elements.
71  std::map<const blink::WebInputElement, bool> initial_checked_state_;
72
73  DISALLOW_COPY_AND_ASSIGN(FormCache);
74};
75
76}  // namespace autofill
77
78#endif  // COMPONENTS_AUTOFILL_CONTENT_RENDERER_FORM_CACHE_H_
79