Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(591)

Side by Side Diff: chrome/browser/autofill/autofill_manager.h

Issue 8387016: Move some Autofill processing logic on form submit to a background thread. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Don't rely on any particular order of evaluation for the arguments to PostTaskAndReply Created 9 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | chrome/browser/autofill/autofill_manager.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef CHROME_BROWSER_AUTOFILL_AUTOFILL_MANAGER_H_ 5 #ifndef CHROME_BROWSER_AUTOFILL_AUTOFILL_MANAGER_H_
6 #define CHROME_BROWSER_AUTOFILL_AUTOFILL_MANAGER_H_ 6 #define CHROME_BROWSER_AUTOFILL_AUTOFILL_MANAGER_H_
7 #pragma once 7 #pragma once
8 8
9 #include <list> 9 #include <list>
10 #include <map> 10 #include <map>
11 #include <string> 11 #include <string>
12 #include <vector> 12 #include <vector>
13 13
14 #include "base/basictypes.h" 14 #include "base/basictypes.h"
15 #include "base/compiler_specific.h" 15 #include "base/compiler_specific.h"
16 #include "base/gtest_prod_util.h" 16 #include "base/gtest_prod_util.h"
17 #include "base/memory/ref_counted.h"
17 #include "base/memory/scoped_ptr.h" 18 #include "base/memory/scoped_ptr.h"
18 #include "base/memory/scoped_vector.h" 19 #include "base/memory/scoped_vector.h"
19 #include "base/string16.h" 20 #include "base/string16.h"
20 #include "base/time.h" 21 #include "base/time.h"
21 #include "chrome/browser/autofill/autofill_download.h" 22 #include "chrome/browser/autofill/autofill_download.h"
22 #include "chrome/browser/autofill/field_types.h" 23 #include "chrome/browser/autofill/field_types.h"
23 #include "chrome/browser/autofill/form_structure.h" 24 #include "chrome/browser/autofill/form_structure.h"
24 #include "content/browser/tab_contents/tab_contents_observer.h" 25 #include "content/browser/tab_contents/tab_contents_observer.h"
25 26
26 class AutofillExternalDelegate; 27 class AutofillExternalDelegate;
(...skipping 13 matching lines...) Expand all
40 } 41 }
41 42
42 namespace webkit_glue { 43 namespace webkit_glue {
43 struct FormData; 44 struct FormData;
44 struct FormField; 45 struct FormField;
45 } 46 }
46 47
47 // Manages saving and restoring the user's personal information entered into web 48 // Manages saving and restoring the user's personal information entered into web
48 // forms. 49 // forms.
49 class AutofillManager : public TabContentsObserver, 50 class AutofillManager : public TabContentsObserver,
50 public AutofillDownloadManager::Observer { 51 public AutofillDownloadManager::Observer,
52 public base::RefCounted<AutofillManager> {
51 public: 53 public:
52 explicit AutofillManager(TabContentsWrapper* tab_contents); 54 explicit AutofillManager(TabContentsWrapper* tab_contents);
53 virtual ~AutofillManager();
54 55
55 // Registers our Enable/Disable Autofill pref. 56 // Registers our Enable/Disable Autofill pref.
56 static void RegisterUserPrefs(PrefService* prefs); 57 static void RegisterUserPrefs(PrefService* prefs);
57 58
58 // Set our external delegate. 59 // Set our external delegate.
59 // TODO(jrg): consider passing delegate into the ctor. That won't 60 // TODO(jrg): consider passing delegate into the ctor. That won't
60 // work if the delegate has a pointer to the AutofillManager, but 61 // work if the delegate has a pointer to the AutofillManager, but
61 // future directions may not need such a pointer. 62 // future directions may not need such a pointer.
62 void SetExternalDelegate(AutofillExternalDelegate* delegate) { 63 void SetExternalDelegate(AutofillExternalDelegate* delegate) {
63 external_delegate_ = delegate; 64 external_delegate_ = delegate;
64 } 65 }
65 66
66 protected: 67 protected:
67 // Only test code should subclass AutofillManager. 68 // Only test code should subclass AutofillManager.
69 friend class base::RefCounted<AutofillManager>;
70 virtual ~AutofillManager();
68 71
69 // The string/int pair is composed of the guid string and variant index 72 // The string/int pair is composed of the guid string and variant index
70 // respectively. The variant index is an index into the multi-valued item 73 // respectively. The variant index is an index into the multi-valued item
71 // (where applicable). 74 // (where applicable).
72 typedef std::pair<std::string, size_t> GUIDPair; 75 typedef std::pair<std::string, size_t> GUIDPair;
73 76
74 // Test code should prefer to use this constructor. 77 // Test code should prefer to use this constructor.
75 AutofillManager(TabContentsWrapper* tab_contents, 78 AutofillManager(TabContentsWrapper* tab_contents,
76 PersonalDataManager* personal_data); 79 PersonalDataManager* personal_data);
77 80
78 // Returns the value of the AutofillEnabled pref. 81 // Returns the value of the AutofillEnabled pref.
79 virtual bool IsAutofillEnabled() const; 82 virtual bool IsAutofillEnabled() const;
80 83
81 // Uploads the form data to the Autofill server. 84 // Uploads the form data to the Autofill server.
82 virtual void UploadFormData(const FormStructure& submitted_form); 85 virtual void UploadFormData(const FormStructure& submitted_form);
83 86
84 // Reset cache. 87 // Reset cache.
85 void Reset(); 88 void Reset();
86 89
90 // Logs quality metrics for the |submitted_form| and uploads the form data
91 // to the crowdsourcing server, if appropriate.
92 virtual void UploadFormDataAsyncCallback(
93 const FormStructure* submitted_form,
94 const base::TimeTicks& load_time,
95 const base::TimeTicks& interaction_time,
96 const base::TimeTicks& submission_time);
97
87 // Maps GUIDs to and from IDs that are used to identify profiles and credit 98 // Maps GUIDs to and from IDs that are used to identify profiles and credit
88 // cards sent to and from the renderer process. 99 // cards sent to and from the renderer process.
89 virtual int GUIDToID(const GUIDPair& guid) const; 100 virtual int GUIDToID(const GUIDPair& guid) const;
90 virtual const GUIDPair IDToGUID(int id) const; 101 virtual const GUIDPair IDToGUID(int id) const;
91 102
92 // Methods for packing and unpacking credit card and profile IDs for sending 103 // Methods for packing and unpacking credit card and profile IDs for sending
93 // and receiving to and from the renderer process. 104 // and receiving to and from the renderer process.
94 int PackGUIDs(const GUIDPair& cc_guid, const GUIDPair& profile_guid) const; 105 int PackGUIDs(const GUIDPair& cc_guid, const GUIDPair& profile_guid) const;
95 void UnpackGUIDs(int id, GUIDPair* cc_guid, GUIDPair* profile_guid) const; 106 void UnpackGUIDs(int id, GUIDPair* cc_guid, GUIDPair* profile_guid) const;
96 107
97 const AutofillMetrics* metric_logger() const { return metric_logger_.get(); } 108 const AutofillMetrics* metric_logger() const { return metric_logger_.get(); }
98 void set_metric_logger(const AutofillMetrics* metric_logger); 109 void set_metric_logger(const AutofillMetrics* metric_logger);
99 110
100 ScopedVector<FormStructure>* form_structures() { return &form_structures_; } 111 ScopedVector<FormStructure>* form_structures() { return &form_structures_; }
101 112
102 // Called from our external delegate so it cannot be private. 113 // Called from our external delegate so it cannot be private.
103 void OnFillAutoFillFormData(int query_id, 114 void OnFillAutoFillFormData(int query_id,
104 const webkit_glue::FormData& form, 115 const webkit_glue::FormData& form,
105 const webkit_glue::FormField& field, 116 const webkit_glue::FormField& field,
106 int unique_id); 117 int unique_id);
107 118
108 // Exposed for testing. 119 // Exposed for testing.
109 AutofillExternalDelegate* external_delegate() { 120 AutofillExternalDelegate* external_delegate() {
110 return external_delegate_; 121 return external_delegate_;
111 } 122 }
112 123
124 // Processes the submitted |form|, saving any new Autofill data and uploading
125 // the possible field types for the submitted fields to the crowdsouring
126 // server. Returns false if this form is not relevant for Autofill.
127 bool OnFormSubmitted(const webkit_glue::FormData& form,
128 const base::TimeTicks& timestamp);
129
113 private: 130 private:
114 // TabContentsObserver: 131 // TabContentsObserver:
115 virtual void DidNavigateMainFramePostCommit( 132 virtual void DidNavigateMainFramePostCommit(
116 const content::LoadCommittedDetails& details, 133 const content::LoadCommittedDetails& details,
117 const ViewHostMsg_FrameNavigate_Params& params) OVERRIDE; 134 const ViewHostMsg_FrameNavigate_Params& params) OVERRIDE;
118 virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE; 135 virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
119 136
120 // AutofillDownloadManager::Observer: 137 // AutofillDownloadManager::Observer:
121 virtual void OnLoadedServerPredictions( 138 virtual void OnLoadedServerPredictions(
122 const std::string& response_xml) OVERRIDE; 139 const std::string& response_xml) OVERRIDE;
123 140
124 void OnFormSubmitted(const webkit_glue::FormData& form,
125 const base::TimeTicks& timestamp);
126 void OnFormsSeen(const std::vector<webkit_glue::FormData>& forms, 141 void OnFormsSeen(const std::vector<webkit_glue::FormData>& forms,
127 const base::TimeTicks& timestamp); 142 const base::TimeTicks& timestamp);
128 void OnTextFieldDidChange(const webkit_glue::FormData& form, 143 void OnTextFieldDidChange(const webkit_glue::FormData& form,
129 const webkit_glue::FormField& field, 144 const webkit_glue::FormField& field,
130 const base::TimeTicks& timestamp); 145 const base::TimeTicks& timestamp);
131 void OnQueryFormFieldAutofill(int query_id, 146 void OnQueryFormFieldAutofill(int query_id,
132 const webkit_glue::FormData& form, 147 const webkit_glue::FormData& form,
133 const webkit_glue::FormField& field); 148 const webkit_glue::FormField& field);
134 void OnFillAutofillFormData(int query_id, 149 void OnFillAutofillFormData(int query_id,
135 const webkit_glue::FormData& form, 150 const webkit_glue::FormData& form,
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
216 // phone prefix or suffix. The |variant| parameter specifies which value in a 231 // phone prefix or suffix. The |variant| parameter specifies which value in a
217 // multi-valued profile. 232 // multi-valued profile.
218 void FillPhoneNumberField(const AutofillProfile& profile, 233 void FillPhoneNumberField(const AutofillProfile& profile,
219 const AutofillField& cached_field, 234 const AutofillField& cached_field,
220 size_t variant, 235 size_t variant,
221 webkit_glue::FormField* field); 236 webkit_glue::FormField* field);
222 237
223 // Parses the forms using heuristic matching and querying the Autofill server. 238 // Parses the forms using heuristic matching and querying the Autofill server.
224 void ParseForms(const std::vector<webkit_glue::FormData>& forms); 239 void ParseForms(const std::vector<webkit_glue::FormData>& forms);
225 240
226 // Uses existing personal data to determine possible field types for the
227 // |submitted_form|.
228 void DeterminePossibleFieldTypesForUpload(FormStructure* submitted_form);
229
230 // Imports the form data, submitted by the user, into |personal_data_|. 241 // Imports the form data, submitted by the user, into |personal_data_|.
231 void ImportFormData(const FormStructure& submitted_form); 242 void ImportFormData(const FormStructure& submitted_form);
232 243
233 // If |initial_interaction_timestamp_| is unset or is set to a later time than 244 // If |initial_interaction_timestamp_| is unset or is set to a later time than
234 // |interaction_timestamp|, updates the cached timestamp. The latter check is 245 // |interaction_timestamp|, updates the cached timestamp. The latter check is
235 // needed because IPC messages can arrive out of order. 246 // needed because IPC messages can arrive out of order.
236 void UpdateInitialInteractionTimestamp( 247 void UpdateInitialInteractionTimestamp(
237 const base::TimeTicks& interaction_timestamp); 248 const base::TimeTicks& interaction_timestamp);
238 249
239 // Send our current field type predictions to the renderer. This is a no-op if 250 // Send our current field type predictions to the renderer. This is a no-op if
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
311 TestTabContentsWithExternalDelegate); 322 TestTabContentsWithExternalDelegate);
312 FRIEND_TEST_ALL_PREFIXES(AutofillMetricsTest, 323 FRIEND_TEST_ALL_PREFIXES(AutofillMetricsTest,
313 UserHappinessFormLoadAndSubmission); 324 UserHappinessFormLoadAndSubmission);
314 FRIEND_TEST_ALL_PREFIXES(AutofillMetricsTest, UserHappinessFormInteraction); 325 FRIEND_TEST_ALL_PREFIXES(AutofillMetricsTest, UserHappinessFormInteraction);
315 FRIEND_TEST_ALL_PREFIXES(AutofillMetricsTest, FormFillDuration); 326 FRIEND_TEST_ALL_PREFIXES(AutofillMetricsTest, FormFillDuration);
316 327
317 DISALLOW_COPY_AND_ASSIGN(AutofillManager); 328 DISALLOW_COPY_AND_ASSIGN(AutofillManager);
318 }; 329 };
319 330
320 #endif // CHROME_BROWSER_AUTOFILL_AUTOFILL_MANAGER_H_ 331 #endif // CHROME_BROWSER_AUTOFILL_AUTOFILL_MANAGER_H_
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/autofill/autofill_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698