summaryrefslogtreecommitdiffstats
path: root/chrome/utility
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/utility')
-rw-r--r--chrome/utility/importer/external_process_importer_bridge.cc29
-rw-r--r--chrome/utility/importer/external_process_importer_bridge.h3
-rw-r--r--chrome/utility/importer/firefox_importer.cc41
-rw-r--r--chrome/utility/importer/firefox_importer.h1
4 files changed, 73 insertions, 1 deletions
diff --git a/chrome/utility/importer/external_process_importer_bridge.cc b/chrome/utility/importer/external_process_importer_bridge.cc
index c399d52..56c82be 100644
--- a/chrome/utility/importer/external_process_importer_bridge.cc
+++ b/chrome/utility/importer/external_process_importer_bridge.cc
@@ -25,7 +25,7 @@ namespace {
const int kNumBookmarksToSend = 100;
const int kNumHistoryRowsToSend = 100;
const int kNumFaviconsToSend = 100;
-
+const int kNumAutofillFormDataToSend = 100;
}
ExternalProcessImporterBridge::ExternalProcessImporterBridge(
@@ -141,6 +141,33 @@ void ExternalProcessImporterBridge::SetPasswordForm(
Send(new ProfileImportProcessHostMsg_NotifyPasswordFormReady(form));
}
+void ExternalProcessImporterBridge::SetAutofillFormData(
+ const std::vector<ImporterAutofillFormDataEntry>& entries) {
+ Send(new ProfileImportProcessHostMsg_AutofillFormDataImportStart(
+ entries.size()));
+
+ // |autofill_form_data_entries_left| is required for the checks below as
+ // Windows has a Debug bounds-check which prevents pushing an iterator beyond
+ // its end() (i.e., |it + 2 < s.end()| crashes in debug mode if |i + 1 ==
+ // s.end()|).
+ int autofill_form_data_entries_left = entries.end() - entries.begin();
+ for (std::vector<ImporterAutofillFormDataEntry>::const_iterator it =
+ entries.begin();
+ it < entries.end();) {
+ std::vector<ImporterAutofillFormDataEntry> autofill_form_data_entry_group;
+ std::vector<ImporterAutofillFormDataEntry>::const_iterator end_group =
+ it +
+ std::min(autofill_form_data_entries_left, kNumAutofillFormDataToSend);
+ autofill_form_data_entry_group.assign(it, end_group);
+
+ Send(new ProfileImportProcessHostMsg_AutofillFormDataImportGroup(
+ autofill_form_data_entry_group));
+ autofill_form_data_entries_left -= end_group - it;
+ it = end_group;
+ }
+ DCHECK_EQ(0, autofill_form_data_entries_left);
+}
+
void ExternalProcessImporterBridge::NotifyStarted() {
Send(new ProfileImportProcessHostMsg_Import_Started());
}
diff --git a/chrome/utility/importer/external_process_importer_bridge.h b/chrome/utility/importer/external_process_importer_bridge.h
index 57efe35..f1f1a46 100644
--- a/chrome/utility/importer/external_process_importer_bridge.h
+++ b/chrome/utility/importer/external_process_importer_bridge.h
@@ -73,6 +73,9 @@ class ExternalProcessImporterBridge : public ImporterBridge {
virtual void SetPasswordForm(
const autofill::PasswordForm& form) OVERRIDE;
+ virtual void SetAutofillFormData(
+ const std::vector<ImporterAutofillFormDataEntry>& entries) OVERRIDE;
+
virtual void NotifyStarted() OVERRIDE;
virtual void NotifyItemStarted(importer::ImportItem item) OVERRIDE;
virtual void NotifyItemEnded(importer::ImportItem item) OVERRIDE;
diff --git a/chrome/utility/importer/firefox_importer.cc b/chrome/utility/importer/firefox_importer.cc
index 6f37095..6444e29 100644
--- a/chrome/utility/importer/firefox_importer.cc
+++ b/chrome/utility/importer/firefox_importer.cc
@@ -18,6 +18,7 @@
#include "chrome/common/importer/firefox_importer_utils.h"
#include "chrome/common/importer/imported_bookmark_entry.h"
#include "chrome/common/importer/imported_favicon_usage.h"
+#include "chrome/common/importer/importer_autofill_form_data_entry.h"
#include "chrome/common/importer/importer_bridge.h"
#include "chrome/common/importer/importer_url_row.h"
#include "chrome/grit/generated_resources.h"
@@ -140,6 +141,11 @@ void FirefoxImporter::StartImport(
ImportPasswords();
bridge_->NotifyItemEnded(importer::PASSWORDS);
}
+ if ((items & importer::AUTOFILL_FORM_DATA) && !cancelled()) {
+ bridge_->NotifyItemStarted(importer::AUTOFILL_FORM_DATA);
+ ImportAutofillFormData();
+ bridge_->NotifyItemEnded(importer::AUTOFILL_FORM_DATA);
+ }
bridge_->NotifyEnded();
}
@@ -382,6 +388,41 @@ void FirefoxImporter::ImportHomepage() {
}
}
+void FirefoxImporter::ImportAutofillFormData() {
+ base::FilePath file = source_path_.AppendASCII("formhistory.sqlite");
+ if (!base::PathExists(file))
+ return;
+
+ sql::Connection db;
+ if (!db.Open(file))
+ return;
+
+ const char query[] =
+ "SELECT fieldname, value, timesUsed, firstUsed, lastUsed FROM "
+ "moz_formhistory";
+
+ sql::Statement s(db.GetUniqueStatement(query));
+
+ std::vector<ImporterAutofillFormDataEntry> form_entries;
+ while (s.Step() && !cancelled()) {
+ ImporterAutofillFormDataEntry form_entry;
+ form_entry.name = s.ColumnString16(0);
+ form_entry.value = s.ColumnString16(1);
+ form_entry.times_used = s.ColumnInt(2);
+ form_entry.first_used = base::Time::FromTimeT(s.ColumnInt64(3) / 1000000);
+ form_entry.last_used = base::Time::FromTimeT(s.ColumnInt64(4) / 1000000);
+
+ // Don't import search bar history.
+ if (base::UTF16ToUTF8(form_entry.name) == "searchbar-history")
+ continue;
+
+ form_entries.push_back(form_entry);
+ }
+
+ if (!form_entries.empty() && !cancelled())
+ bridge_->SetAutofillFormData(form_entries);
+}
+
void FirefoxImporter::GetSearchEnginesXMLData(
std::vector<std::string>* search_engine_data) {
base::FilePath file = source_path_.AppendASCII("search.sqlite");
diff --git a/chrome/utility/importer/firefox_importer.h b/chrome/utility/importer/firefox_importer.h
index 0ad10d6..9402024 100644
--- a/chrome/utility/importer/firefox_importer.h
+++ b/chrome/utility/importer/firefox_importer.h
@@ -46,6 +46,7 @@ class FirefoxImporter : public Importer {
// Import the user's home page, unless it is set to default home page as
// defined in browserconfig.properties.
void ImportHomepage();
+ void ImportAutofillFormData();
void GetSearchEnginesXMLData(std::vector<std::string>* search_engine_data);
void GetSearchEnginesXMLDataFromJSON(
std::vector<std::string>* search_engine_data);