Index: chrome/browser/importer/firefox3_importer.cc |
=================================================================== |
--- chrome/browser/importer/firefox3_importer.cc (revision 16887) |
+++ chrome/browser/importer/firefox3_importer.cc (working copy) |
@@ -325,7 +325,11 @@ |
scoped_ptr_malloc<sqlite3, DBClose> db(sqlite); |
SQLStatement s; |
- const char* stmt = "SELECT engineid FROM engine_data ORDER BY value ASC"; |
+ const char* stmt = "SELECT engineid FROM engine_data " |
+ "WHERE engineid NOT IN " |
+ "(SELECT engineid FROM engine_data " |
+ "WHERE name='hidden') " |
+ "ORDER BY value ASC"; |
if (s.prepare(db.get(), stmt) != SQLITE_OK) |
return; |
@@ -335,31 +339,48 @@ |
std::wstring profile_path = source_path_; |
file_util::AppendToPath(&profile_path, L"searchplugins"); |
- const std::wstring kAppPrefix = L"[app]/"; |
- const std::wstring kProfilePrefix = L"[profile]/"; |
- while (s.step() == SQLITE_ROW && !cancelled()) { |
- std::wstring file; |
- std::wstring engine = UTF8ToWide(s.column_string(0)); |
- // The string contains [app]/<name>.xml or [profile]/<name>.xml where the |
- // [app] and [profile] need to be replaced with the actual app or profile |
- // path. |
- size_t index = engine.find(kAppPrefix); |
- if (index != std::wstring::npos) { |
- file = app_path; |
- file_util::AppendToPath( |
- &file, |
- engine.substr(index + kAppPrefix.length())); // Remove '[app]/'. |
- } else if ((index = engine.find(kProfilePrefix)) != std::wstring::npos) { |
- file = profile_path; |
- file_util::AppendToPath( |
- &file, |
- engine.substr(index + kProfilePrefix.length())); // Remove |
- // '[profile]/'. |
- } else { |
- NOTREACHED() << "Unexpected Firefox 3 search engine id"; |
- continue; |
+ // Firefox doesn't store any search engines in its sqlite database unless |
+ // the user has changed the standard set of engines. If we find that the |
+ // database is empty, get the standard Firefox set from the app folder. |
+ if (s.step() != SQLITE_ROW) { |
+ file_util::FileEnumerator engines(FilePath::FromWStringHack(app_path), |
+ false, |
+ file_util::FileEnumerator::FILES); |
+ for (FilePath engine_path = engines.Next(); !engine_path.value().empty(); |
+ engine_path = engines.Next()) { |
+ std::wstring enginew = engine_path.ToWStringHack(); |
+ files->push_back(enginew); |
} |
- files->push_back(file); |
+ } else { |
+ const std::wstring kAppPrefix = L"[app]/"; |
+ const std::wstring kProfilePrefix = L"[profile]/"; |
+ do { |
+ std::wstring file; |
+ std::wstring engine = UTF8ToWide(s.column_string(0)); |
+ |
+ // The string contains [app]/<name>.xml or [profile]/<name>.xml where |
+ // the [app] and [profile] need to be replaced with the actual app or |
+ // profile path. |
+ size_t index = engine.find(kAppPrefix); |
+ if (index != std::wstring::npos) { |
+ // Remove '[app]/'. |
+ file = app_path; |
+ file_util::AppendToPath( |
+ &file, |
+ engine.substr(index + kAppPrefix.length())); |
+ } else if ((index = engine.find(kProfilePrefix)) != |
+ std::wstring::npos) { |
+ // Remove '[profile]/'. |
+ file = profile_path; |
+ file_util::AppendToPath( |
+ &file, |
+ engine.substr(index + kProfilePrefix.length())); |
+ } else { |
+ NOTREACHED() << "Unexpected Firefox 3 search engine id"; |
+ continue; |
+ } |
+ files->push_back(file); |
+ } while (s.step() == SQLITE_ROW && !cancelled()); |
} |
} |