Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(722)

Unified Diff: chrome/utility/importer/firefox_importer.cc

Issue 247223003: Parsed search.json for importing search engine settings from FireFox. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/utility/importer/firefox_importer.cc
diff --git a/chrome/utility/importer/firefox_importer.cc b/chrome/utility/importer/firefox_importer.cc
index c74947b685e91f288f07952175711e58a8890a2b..d03741ceffbd9275a754408ce54f2cbe9cd854c6 100644
--- a/chrome/utility/importer/firefox_importer.cc
+++ b/chrome/utility/importer/firefox_importer.cc
@@ -112,6 +112,7 @@ void FirefoxImporter::StartImport(
if ((items & importer::HOME_PAGE) && !cancelled()) {
bridge_->NotifyItemStarted(importer::HOME_PAGE);
ImportHomepage(); // Doesn't have a UI item.
+ ImportHomepage(); // Doesn't have a UI item.
tfarina 2014/04/22 23:49:12 I don't think you meant to call ImportHomepage() t
bridge_->NotifyItemEnded(importer::HOME_PAGE);
}
@@ -383,12 +384,59 @@ void FirefoxImporter::ImportHomepage() {
void FirefoxImporter::GetSearchEnginesXMLData(
std::vector<std::string>* search_engine_data) {
- // TODO(mpawlowski): This may no longer work, search engines are stored in
- // search.json since Firefox 3.5, not in search.sqlite. XML definitions are
- // still necessary. http://crbug.com/329175
+
base::FilePath file = source_path_.AppendASCII("search.sqlite");
- if (!base::PathExists(file))
+ if (!base::PathExists(file)) {
+ // since Firefox 3.5, search engines are no longer stored in search.sqlite.
+ // Instead, search.json is used for storing search engines.
+
+ base::FilePath search_json_file = source_path_.AppendASCII("search.json");
+ if (!base::PathExists(search_json_file))
+ return;
+
+ JSONFileValueSerializer serializer(search_json_file);
+ scoped_ptr<base::Value> root(serializer.Deserialize(NULL, NULL));
+
+ if (!root.get())
+ return;
+
+ base::DictionaryValue* search_root =
+ static_cast<base::DictionaryValue*>(root.release());
+ const std::string kDirectories("directories");
+ const base::DictionaryValue* search_directories = NULL;
+
+ if (!search_root->GetDictionary(kDirectories, &search_directories))
+ return;
+
+ // search engine list can be found from key <engines> of the dictionary.
+ // key <engines> is a grandchild of key <directories>.
+ // However, key <engines> parent's key is dynamic which
+ // depends on operating systems. For example,
+ // Ubuntu: /usr/lib/firefox/distribution/searchplugins/locale/en-US
+ // Windows: C:\\Program Files (x86)\\Mozilla Firefox\\browser\\searchplugins
+ // Therefore, it needs to be retrieved by using iterator
+
+ base::DictionaryValue::Iterator it(*search_directories);
+ const base::ListValue* search_engines = NULL;
+ const std::string kEngines(it.key() + ".engines");
+
+ if (search_directories->GetList(kEngines, &search_engines)) {
+ const std::string kFilePath("filePath");
+ for (size_t i = 0; i < search_engines->GetSize(); ++i) {
+ const base::DictionaryValue* engine_info = NULL;
+ if (search_engines->GetDictionary(i, &engine_info)) {
+ std::string file_path;
+ if (engine_info->GetString(kFilePath, &file_path)) {
+ std::string file_data;
+ base::FilePath xml_file = base::FilePath::FromUTF8Unsafe(file_path);
+ base::ReadFileToString(xml_file, &file_data);
+ search_engine_data->push_back(file_data);
+ }
+ }
+ }
+ }
return;
+ }
sql::Connection db;
if (!db.Open(file))
@@ -489,54 +537,6 @@ void FirefoxImporter::LoadRootNodeID(sql::Connection* db,
while (s.Step()) {
std::string folder = s.ColumnString(0);
- int id = s.ColumnInt(1);
- if (folder == kToolbarFolderName)
- *toolbar_folder_id = id;
- else if (folder == kMenuFolderName)
- *menu_folder_id = id;
- else if (folder == kUnsortedFolderName)
- *unsorted_folder_id = id;
- }
-}
-
-void FirefoxImporter::LoadLivemarkIDs(sql::Connection* db,
- std::set<int>* livemark) {
- static const char* kFeedAnnotation = "livemark/feedURI";
- livemark->clear();
-
- const char* query = "SELECT b.item_id "
- "FROM moz_anno_attributes a "
- "JOIN moz_items_annos b ON a.id = b.anno_attribute_id "
- "WHERE a.name = ? ";
- sql::Statement s(db->GetUniqueStatement(query));
- s.BindString(0, kFeedAnnotation);
-
- while (s.Step() && !cancelled())
- livemark->insert(s.ColumnInt(0));
-}
-
-void FirefoxImporter::GetTopBookmarkFolder(sql::Connection* db,
- int folder_id,
- BookmarkList* list) {
- const char* query = "SELECT b.title "
- "FROM moz_bookmarks b "
- "WHERE b.type = 2 AND b.id = ? "
- "ORDER BY b.position";
- sql::Statement s(db->GetUniqueStatement(query));
- s.BindInt(0, folder_id);
-
- if (s.Step()) {
- BookmarkItem* item = new BookmarkItem;
- item->parent = -1; // The top level folder has no parent.
- item->id = folder_id;
- item->title = s.ColumnString16(0);
- item->type = TYPE_FOLDER;
- item->favicon = 0;
- item->empty_folder = true;
- list->push_back(item);
- }
-}
-
void FirefoxImporter::GetWholeBookmarkFolder(sql::Connection* db,
BookmarkList* list,
size_t position,
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698