| 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());
|
| }
|
| }
|
|
|
|
|