| Index: chrome/browser/autofill/autofill_download.cc
|
| ===================================================================
|
| --- chrome/browser/autofill/autofill_download.cc (revision 0)
|
| +++ chrome/browser/autofill/autofill_download.cc (revision 0)
|
| @@ -0,0 +1,126 @@
|
| +// 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.
|
| +
|
| +#include "chrome/browser/autofill/autofill_download.h"
|
| +
|
| +#include "base/logging.h"
|
| +#include "base/rand_util.h"
|
| +#include "base/stl_util-inl.h"
|
| +#include "chrome/browser/profile.h"
|
| +
|
| +#if defined(GOOGLE_CHROME_BUILD)
|
| +#include "chrome/browser/autofill/internal/autofill_download_internal.h"
|
| +#else
|
| +#define AUTO_FILL_QUERY_SERVER_REQUEST_URL "http://disabled"
|
| +#define AUTO_FILL_UPLOAD_SERVER_REQUEST_URL "http://disabled"
|
| +#endif
|
| +
|
| +namespace {
|
| +// We only send a fraction of the forms to upload server.
|
| +// The rate for positive/negative matches potentially could be different.
|
| +const double kAutoFillPositiveUploadRate = 0.01;
|
| +const double kAutoFillNegativeUploadRate = 0.01;
|
| +} // namespace
|
| +
|
| +AutoFillDownloadManager::AutoFillDownloadManager()
|
| + : observer_(NULL) {
|
| +}
|
| +
|
| +AutoFillDownloadManager::~AutoFillDownloadManager() {
|
| + STLDeleteContainerPairFirstPointers(url_fetchers_.begin(),
|
| + url_fetchers_.end());
|
| +}
|
| +
|
| +void AutoFillDownloadManager::SetObserver(
|
| + AutoFillDownloadManager::Observer *observer) {
|
| + if (observer) {
|
| + DCHECK(!observer_);
|
| + observer_ = observer;
|
| + } else {
|
| + observer_ = NULL;
|
| + }
|
| +}
|
| +
|
| +bool AutoFillDownloadManager::StartRequest(const std::string& form_xml,
|
| + const std::string& form_signature,
|
| + bool query_data,
|
| + bool form_was_matched) {
|
| + if (!query_data) {
|
| + // Check if we need to upload form.
|
| + double upload_rate = form_was_matched ? kAutoFillPositiveUploadRate :
|
| + kAutoFillNegativeUploadRate;
|
| + if (base::RandDouble() > upload_rate) {
|
| + LOG(INFO) << "AutoFillDownloadManager: Upload request is ignored";
|
| + if (observer_)
|
| + observer_->OnUploadedAutoFillHeuristics(form_signature);
|
| + return true;
|
| + }
|
| + }
|
| +
|
| + std::string request_url;
|
| + if (query_data)
|
| + request_url = AUTO_FILL_QUERY_SERVER_REQUEST_URL;
|
| + else
|
| + request_url = AUTO_FILL_UPLOAD_SERVER_REQUEST_URL;
|
| +
|
| + URLFetcher *fetcher =
|
| + URLFetcher::Create(0, GURL(request_url), URLFetcher::POST, this);
|
| + FormRequestData data;
|
| + data.form_signature = form_signature;
|
| + data.query = query_data;
|
| + url_fetchers_[fetcher] = data;
|
| + fetcher->set_request_context(Profile::GetDefaultRequestContext());
|
| + fetcher->set_upload_data("text/plain", form_xml);
|
| + fetcher->Start();
|
| + return true;
|
| +}
|
| +
|
| +bool AutoFillDownloadManager::CancelRequest(const std::string& form_signature,
|
| + bool query_data) {
|
| + for (std::map<URLFetcher *, FormRequestData>::iterator it =
|
| + url_fetchers_.begin();
|
| + it != url_fetchers_.end();
|
| + ++it) {
|
| + if (it->second.form_signature == form_signature &&
|
| + it->second.query == query_data) {
|
| + delete it->first;
|
| + url_fetchers_.erase(it);
|
| + return true;
|
| + }
|
| + }
|
| + return false;
|
| +}
|
| +
|
| +void AutoFillDownloadManager::OnURLFetchComplete(const URLFetcher* source,
|
| + const GURL& url,
|
| + const URLRequestStatus& status,
|
| + int response_code,
|
| + const ResponseCookies& cookies,
|
| + const std::string& data) {
|
| + std::map<URLFetcher *, FormRequestData>::iterator it =
|
| + url_fetchers_.find(const_cast<URLFetcher*>(source));
|
| + DCHECK(it != url_fetchers_.end());
|
| + std::string type_of_request(it->second.query ? "query" : "upload");
|
| + const int kHttpResponseOk = 200;
|
| + if (response_code != kHttpResponseOk) {
|
| + LOG(INFO) << "AutoFillDownloadManager: " << type_of_request <<
|
| + " request has failed with response" << response_code;
|
| + if (observer_) {
|
| + observer_->OnHeuristicsRequestError(it->second.form_signature,
|
| + response_code);
|
| + }
|
| + } else {
|
| + LOG(INFO) << "AutoFillDownloadManager: " << type_of_request <<
|
| + " request has succeeded";
|
| + if (it->second.query) {
|
| + if (observer_)
|
| + observer_->OnLoadedAutoFillHeuristics(it->second.form_signature, data);
|
| + } else {
|
| + if (observer_)
|
| + observer_->OnUploadedAutoFillHeuristics(it->second.form_signature);
|
| + }
|
| + }
|
| +}
|
| +
|
| +
|
|
|
| Property changes on: chrome\browser\autofill\autofill_download.cc
|
| ___________________________________________________________________
|
| Added: svn:eol-style
|
| + LF
|
|
|
|
|