OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 #include "chrome/utility/importer/firefox_importer.h" | 5 #include "chrome/utility/importer/firefox_importer.h" |
6 | 6 |
7 #include <set> | 7 #include <set> |
8 | 8 |
9 #include "base/files/file_enumerator.h" | 9 #include "base/files/file_enumerator.h" |
10 #include "base/files/file_util.h" | 10 #include "base/files/file_util.h" |
11 #include "base/json/json_file_value_serializer.h" | 11 #include "base/json/json_file_value_serializer.h" |
12 #include "base/memory/scoped_ptr.h" | 12 #include "base/memory/scoped_ptr.h" |
13 #include "base/message_loop/message_loop.h" | 13 #include "base/message_loop/message_loop.h" |
14 #include "base/stl_util.h" | 14 #include "base/stl_util.h" |
15 #include "base/strings/string_util.h" | 15 #include "base/strings/string_util.h" |
16 #include "base/strings/utf_string_conversions.h" | 16 #include "base/strings/utf_string_conversions.h" |
17 #include "chrome/common/importer/firefox_importer_utils.h" | 17 #include "chrome/common/importer/firefox_importer_utils.h" |
18 #include "chrome/common/importer/firefox_importer_utils.h" | 18 #include "chrome/common/importer/firefox_importer_utils.h" |
19 #include "chrome/common/importer/imported_bookmark_entry.h" | 19 #include "chrome/common/importer/imported_bookmark_entry.h" |
20 #include "chrome/common/importer/imported_favicon_usage.h" | 20 #include "chrome/common/importer/imported_favicon_usage.h" |
| 21 #include "chrome/common/importer/importer_autofill_form_data_entry.h" |
21 #include "chrome/common/importer/importer_bridge.h" | 22 #include "chrome/common/importer/importer_bridge.h" |
22 #include "chrome/common/importer/importer_url_row.h" | 23 #include "chrome/common/importer/importer_url_row.h" |
23 #include "chrome/grit/generated_resources.h" | 24 #include "chrome/grit/generated_resources.h" |
24 #include "chrome/utility/importer/bookmark_html_reader.h" | 25 #include "chrome/utility/importer/bookmark_html_reader.h" |
25 #include "chrome/utility/importer/favicon_reencode.h" | 26 #include "chrome/utility/importer/favicon_reencode.h" |
26 #include "chrome/utility/importer/nss_decryptor.h" | 27 #include "chrome/utility/importer/nss_decryptor.h" |
27 #include "components/autofill/core/common/password_form.h" | 28 #include "components/autofill/core/common/password_form.h" |
28 #include "sql/connection.h" | 29 #include "sql/connection.h" |
29 #include "sql/statement.h" | 30 #include "sql/statement.h" |
30 #include "url/gurl.h" | 31 #include "url/gurl.h" |
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
133 if ((items & importer::SEARCH_ENGINES) && !cancelled()) { | 134 if ((items & importer::SEARCH_ENGINES) && !cancelled()) { |
134 bridge_->NotifyItemStarted(importer::SEARCH_ENGINES); | 135 bridge_->NotifyItemStarted(importer::SEARCH_ENGINES); |
135 ImportSearchEngines(); | 136 ImportSearchEngines(); |
136 bridge_->NotifyItemEnded(importer::SEARCH_ENGINES); | 137 bridge_->NotifyItemEnded(importer::SEARCH_ENGINES); |
137 } | 138 } |
138 if ((items & importer::PASSWORDS) && !cancelled()) { | 139 if ((items & importer::PASSWORDS) && !cancelled()) { |
139 bridge_->NotifyItemStarted(importer::PASSWORDS); | 140 bridge_->NotifyItemStarted(importer::PASSWORDS); |
140 ImportPasswords(); | 141 ImportPasswords(); |
141 bridge_->NotifyItemEnded(importer::PASSWORDS); | 142 bridge_->NotifyItemEnded(importer::PASSWORDS); |
142 } | 143 } |
| 144 if ((items & importer::AUTOFILL_FORM_DATA) && !cancelled()) { |
| 145 bridge_->NotifyItemStarted(importer::AUTOFILL_FORM_DATA); |
| 146 ImportAutofillFormData(); |
| 147 bridge_->NotifyItemEnded(importer::AUTOFILL_FORM_DATA); |
| 148 } |
143 bridge_->NotifyEnded(); | 149 bridge_->NotifyEnded(); |
144 } | 150 } |
145 | 151 |
146 void FirefoxImporter::ImportHistory() { | 152 void FirefoxImporter::ImportHistory() { |
147 base::FilePath file = source_path_.AppendASCII("places.sqlite"); | 153 base::FilePath file = source_path_.AppendASCII("places.sqlite"); |
148 if (!base::PathExists(file)) | 154 if (!base::PathExists(file)) |
149 return; | 155 return; |
150 | 156 |
151 sql::Connection db; | 157 sql::Connection db; |
152 if (!db.Open(file)) | 158 if (!db.Open(file)) |
(...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
375 bridge_->SetFirefoxSearchEnginesXMLData(search_engine_data); | 381 bridge_->SetFirefoxSearchEnginesXMLData(search_engine_data); |
376 } | 382 } |
377 | 383 |
378 void FirefoxImporter::ImportHomepage() { | 384 void FirefoxImporter::ImportHomepage() { |
379 GURL home_page = GetHomepage(source_path_); | 385 GURL home_page = GetHomepage(source_path_); |
380 if (home_page.is_valid() && !IsDefaultHomepage(home_page, app_path_)) { | 386 if (home_page.is_valid() && !IsDefaultHomepage(home_page, app_path_)) { |
381 bridge_->AddHomePage(home_page); | 387 bridge_->AddHomePage(home_page); |
382 } | 388 } |
383 } | 389 } |
384 | 390 |
| 391 void FirefoxImporter::ImportAutofillFormData() { |
| 392 base::FilePath file = source_path_.AppendASCII("formhistory.sqlite"); |
| 393 if (!base::PathExists(file)) |
| 394 return; |
| 395 |
| 396 sql::Connection db; |
| 397 if (!db.Open(file)) |
| 398 return; |
| 399 |
| 400 const char query[] = |
| 401 "SELECT fieldname, value, timesUsed, firstUsed, lastUsed FROM " |
| 402 "moz_formhistory"; |
| 403 |
| 404 sql::Statement s(db.GetUniqueStatement(query)); |
| 405 |
| 406 std::vector<ImporterAutofillFormDataEntry> form_entries; |
| 407 while (s.Step() && !cancelled()) { |
| 408 ImporterAutofillFormDataEntry form_entry; |
| 409 form_entry.name = s.ColumnString16(0); |
| 410 form_entry.value = s.ColumnString16(1); |
| 411 form_entry.times_used = s.ColumnInt(2); |
| 412 form_entry.first_used = base::Time::FromTimeT(s.ColumnInt64(3) / 1000000); |
| 413 form_entry.last_used = base::Time::FromTimeT(s.ColumnInt64(4) / 1000000); |
| 414 |
| 415 // Don't import search bar history. |
| 416 if (base::UTF16ToUTF8(form_entry.name) == "searchbar-history") |
| 417 continue; |
| 418 |
| 419 form_entries.push_back(form_entry); |
| 420 } |
| 421 |
| 422 if (!form_entries.empty() && !cancelled()) |
| 423 bridge_->SetAutofillFormData(form_entries); |
| 424 } |
| 425 |
385 void FirefoxImporter::GetSearchEnginesXMLData( | 426 void FirefoxImporter::GetSearchEnginesXMLData( |
386 std::vector<std::string>* search_engine_data) { | 427 std::vector<std::string>* search_engine_data) { |
387 base::FilePath file = source_path_.AppendASCII("search.sqlite"); | 428 base::FilePath file = source_path_.AppendASCII("search.sqlite"); |
388 if (!base::PathExists(file)) { | 429 if (!base::PathExists(file)) { |
389 // Since Firefox 3.5, search engines are no longer stored in search.sqlite. | 430 // Since Firefox 3.5, search engines are no longer stored in search.sqlite. |
390 // Instead, search.json is used for storing search engines. | 431 // Instead, search.json is used for storing search engines. |
391 GetSearchEnginesXMLDataFromJSON(search_engine_data); | 432 GetSearchEnginesXMLDataFromJSON(search_engine_data); |
392 return; | 433 return; |
393 } | 434 } |
394 | 435 |
(...skipping 330 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
725 | 766 |
726 if (!importer::ReencodeFavicon(&data[0], data.size(), &usage.png_data)) | 767 if (!importer::ReencodeFavicon(&data[0], data.size(), &usage.png_data)) |
727 continue; // Unable to decode. | 768 continue; // Unable to decode. |
728 | 769 |
729 usage.urls = i->second; | 770 usage.urls = i->second; |
730 favicons->push_back(usage); | 771 favicons->push_back(usage); |
731 } | 772 } |
732 s.Reset(true); | 773 s.Reset(true); |
733 } | 774 } |
734 } | 775 } |
OLD | NEW |