// Copyright (c) 2010 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CHROME_RENDERER_AUTOFILL_HELPER_H_ #define CHROME_RENDERER_AUTOFILL_HELPER_H_ #pragma once #include #include "base/basictypes.h" #include "chrome/renderer/form_manager.h" #include "third_party/WebKit/WebKit/chromium/public/WebNode.h" class RenderView; namespace WebKit { class WebInputElement; class WebString; } // AutoFillHelper deals with AutoFill related communications between WebKit and // the browser. There is one AutofillHelper per RenderView. // This code was originally part of RenderView. // Note that AutoFill encompasses: // - single text field suggestions, that we usually refer to as Autocomplete // - entire form fill based on one field entry, referred to as form AutoFill. class AutoFillHelper { public: explicit AutoFillHelper(RenderView* render_view); // Queries the browser for Autocomplete and AutoFill suggestions for the given // |node|. void QueryAutoFillSuggestions(const WebKit::WebNode& node, const WebKit::WebString& name, const WebKit::WebString& value); // Removes the Autocomplete suggestion |value| for the field names |name|. void RemoveAutocompleteSuggestion(const WebKit::WebString& name, const WebKit::WebString& value); // Called when we have received AutoFill suggestions from the browser. void SuggestionsReceived(int query_id, const std::vector& values, const std::vector& labels, const std::vector& icons, const std::vector& unique_ids); // Called when we have received suggestions for an entire form from the // browser. void FormDataFilled(int query_id, const webkit_glue::FormData& form); // Called by Webkit when the user has selected a suggestion in the popup (this // happens when the user hovers over an suggestion or navigates the popup with // the arrow keys). void DidSelectAutoFillSuggestion(const WebKit::WebNode& node, const WebKit::WebString& value, const WebKit::WebString& label, int unique_id); // Called by Webkit when the user has accepted a suggestion in the popup. void DidAcceptAutoFillSuggestion(const WebKit::WebNode& node, const WebKit::WebString& value, const WebKit::WebString& label, int unique_id, unsigned index); // Called by WebKit when the user has cleared the selection from the AutoFill // suggestions popup. This happens when a user uses the arrow keys to // navigate outside the range of possible selections, or when the popup // closes. void DidClearAutoFillSelection(const WebKit::WebNode& node); // Called when the frame contents are available. Extracts the forms from that // frame and sends them to the browser for parsing. void FrameContentsAvailable(WebKit::WebFrame* frame); // Called before a frame is closed. Gives us an opportunity to clean up. // DEPRECATED. void FrameWillClose(WebKit::WebFrame* frame); // Called when |frame| is detached from the view. Gives us an opportunity to // clean up. void FrameDetached(WebKit::WebFrame* frame); // WebViewClient editor call forwarded by the RenderView. void TextDidChangeInTextField(const WebKit::WebInputElement& element); // Called when an input element in the page has been clicked. // |already_focused| is true if |element| was focused before it was clicked. void InputElementClicked(const WebKit::WebInputElement& element, bool already_focused); private: enum AutoFillAction { AUTOFILL_NONE, // No state set. AUTOFILL_FILL, // Fill the AutoFill form data. AUTOFILL_PREVIEW, // Preview the AutoFill form data. }; // Shows the autocomplete suggestions for |element|. // This call is asynchronous and may or may not lead to the showing of a // suggestion popup (no popup is shown if there are no available suggestions). // |autofill_on_empty_values| specifies whether suggestions should be shown // when |element| contains no text. // |requires_caret_at_end| specifies whether suggestions should be shown when // the caret is not after the last character in |element|. void ShowSuggestions(const WebKit::WebInputElement& element, bool autofill_on_empty_values, bool requires_caret_at_end); // Queries the AutoFillManager for form data for the form containing |node|. // |value| is the current text in the field, and |unique_id| is the selected // profile's unique ID. |action| specifies whether to Fill or Preview the // values returned from the AutoFillManager. void QueryAutoFillFormData(const WebKit::WebNode& node, const WebKit::WebString& value, const WebKit::WebString& label, int unique_id, AutoFillAction action); // Scans the given frame for forms and sends them up to the browser. void SendForms(WebKit::WebFrame* frame); // Weak reference. RenderView* render_view_; FormManager form_manager_; // The ID of the last request sent for form field AutoFill. Used to ignore // out of date responses. int autofill_query_id_; // The node corresponding to the last request sent for form field AutoFill. WebKit::WebNode autofill_query_node_; // The action to take when receiving AutoFill data from the AutoFillManager. AutoFillAction autofill_action_; // The menu index of the "Clear" menu item. int suggestions_clear_index_; // The menu index of the "AutoFill options..." menu item. int suggestions_options_index_; DISALLOW_COPY_AND_ASSIGN(AutoFillHelper); }; #endif // CHROME_RENDERER_AUTOFILL_HELPER_H_