Integration with Toolbar autofill servers.
Still to do:
1. Update upload rates based on response
2. Differentiate autofilled/not uploads
3. Do not query if there is no items in autofill
4. Fix forms to correspond to the data queried by toolbar
BUG=none
TEST=Should request data from toolbar servers
Review URL: http://codereview.chromium.org/1119004
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@42260 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/chrome/browser/autofill/autofill_download.h b/chrome/browser/autofill/autofill_download.h
new file mode 100644
index 0000000..c9e6ed2
--- /dev/null
+++ b/chrome/browser/autofill/autofill_download.h
@@ -0,0 +1,88 @@
+// 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_BROWSER_AUTOFILL_AUTOFILL_DOWNLOAD_H_
+#define CHROME_BROWSER_AUTOFILL_AUTOFILL_DOWNLOAD_H_
+
+#include <map>
+#include <string>
+
+#include "base/scoped_ptr.h"
+#include "base/scoped_vector.h"
+#include "base/string16.h"
+#include "chrome/browser/autofill/autofill_profile.h"
+#include "chrome/browser/autofill/field_types.h"
+#include "chrome/browser/autofill/form_structure.h"
+#include "chrome/browser/net/url_fetcher.h"
+
+// Handles getting and updating AutoFill heuristics.
+class AutoFillDownloadManager : public URLFetcher::Delegate {
+ public:
+ // An interface used to notify clients of AutoFillDownloadManager.
+ class Observer {
+ public:
+ // Called when heuristic successfully received from server.
+ // |form_signature| - the signature of the requesting form.
+ // |heuristic_xml| - server response.
+ virtual void OnLoadedAutoFillHeuristics(
+ const std::string& form_signature,
+ const std::string& heuristic_xml) = 0;
+ // Called when heuristic either successfully considered for upload and
+ // not send or uploaded.
+ // |form_signature| - the signature of the requesting form.
+ virtual void OnUploadedAutoFillHeuristics(
+ const std::string& form_signature) = 0;
+ // Called when there was an error during the request.
+ // |form_signature| - the signature of the requesting form.
+ // |http_error| - http error code.
+ virtual void OnHeuristicsRequestError(const std::string& form_signature,
+ int http_error) = 0;
+ protected:
+ virtual ~Observer() {}
+ };
+
+ AutoFillDownloadManager();
+ virtual ~AutoFillDownloadManager();
+
+ // |observer| - observer to notify on successful completion or error.
+ void SetObserver(AutoFillDownloadManager::Observer *observer);
+
+ // Initiates request to AutoFill servers to download/upload heuristics
+ // |form_xml| - form structure XML to upload/download.
+ // |form_signature| - form signature hash.
+ // |query_data| - if true the data is queried and observer notified with new
+ // data, if available. If false heuristic data is uploaded to our servers.
+ // |form_was_matched| - if |query_data| is false indicates if the form was
+ // matched. Ignored otherwise.
+ bool StartRequest(const std::string& form_xml,
+ const std::string& form_signature,
+ bool query_data,
+ bool form_was_matched);
+
+ bool CancelRequest(const std::string& form_signature, bool query_data);
+
+ protected:
+ // URLFetcher::Delegate implementation:
+ virtual void OnURLFetchComplete(const URLFetcher* source,
+ const GURL& url,
+ const URLRequestStatus& status,
+ int response_code,
+ const ResponseCookies& cookies,
+ const std::string& data);
+
+ private:
+ struct FormRequestData {
+ std::string form_signature;
+ bool query;
+ };
+
+ // For each requested form for both query and upload we create a separate
+ // request and save its info. As url fetcher is identified by its address
+ // we use a map between fetchers and info.
+ std::map<URLFetcher *, FormRequestData> url_fetchers_;
+ AutoFillDownloadManager::Observer *observer_;
+};
+
+#endif // CHROME_BROWSER_AUTOFILL_AUTOFILL_DOWNLOAD_H_
+