Index: chrome/browser/importer/firefox_importer_utils.cc |
diff --git a/chrome/browser/importer/firefox_importer_utils.cc b/chrome/browser/importer/firefox_importer_utils.cc |
index 8f8aee16f8c1ca0811608783e116ece8eff62d92..0ec9109cc7cba82454477280b67e7cf37303f5c1 100644 |
--- a/chrome/browser/importer/firefox_importer_utils.cc |
+++ b/chrome/browser/importer/firefox_importer_utils.cc |
@@ -282,30 +282,7 @@ std::string ReadPrefsJsValue(const FilePath& profile_path, |
if (!ReadPrefFile(profile_path.AppendASCII("prefs.js"), &content)) |
return ""; |
- // This file has the syntax: user_pref("key", value); |
- std::string search_for = std::string("user_pref(\"") + pref_key + |
- std::string("\", "); |
- size_t prop_index = content.find(search_for); |
- if (prop_index == std::string::npos) |
- return ""; |
- |
- size_t start = prop_index + search_for.length(); |
- size_t stop = std::string::npos; |
- if (start != std::string::npos) |
- stop = content.find(")", start + 1); |
- |
- if (start == std::string::npos || stop == std::string::npos) { |
- NOTREACHED() << "Firefox property " << pref_key << " could not be parsed."; |
- return ""; |
- } |
- |
- // String values have double quotes we don't need to return to the caller. |
- if (content[start] == '\"' && content[stop - 1] == '\"') { |
- ++start; |
- --stop; |
- } |
- |
- return content.substr(start, stop - start); |
+ return GetPrefsJsValue(content, pref_key); |
} |
int GetFirefoxDefaultSearchEngineIndex( |
@@ -317,8 +294,8 @@ int GetFirefoxDefaultSearchEngineIndex( |
if (search_engines.empty()) |
return -1; |
- std::wstring default_se_name = UTF8ToWide( |
- ReadPrefsJsValue(profile_path, "browser.search.selectedEngine")); |
+ std::string default_se_name = |
+ ReadPrefsJsValue(profile_path, "browser.search.selectedEngine"); |
if (default_se_name.empty()) { |
// browser.search.selectedEngine does not exist if the user has not changed |
@@ -331,7 +308,7 @@ int GetFirefoxDefaultSearchEngineIndex( |
int default_se_index = -1; |
for (std::vector<TemplateURL*>::const_iterator iter = search_engines.begin(); |
iter != search_engines.end(); ++iter) { |
- if (default_se_name == (*iter)->short_name()) { |
+ if (default_se_name == WideToUTF8((*iter)->short_name())) { |
default_se_index = static_cast<int>(iter - search_engines.begin()); |
break; |
} |
@@ -449,3 +426,35 @@ bool ParsePrefFile(const FilePath& pref_file, DictionaryValue* prefs) { |
} |
return true; |
} |
+ |
+std::string GetPrefsJsValue(const std::string& content, |
+ const std::string& pref_key) { |
+ // This file has the syntax: user_pref("key", value); |
+ std::string search_for = std::string("user_pref(\"") + pref_key + |
+ std::string("\", "); |
+ size_t prop_index = content.find(search_for); |
+ if (prop_index == std::string::npos) |
+ return ""; |
+ |
+ size_t start = prop_index + search_for.length(); |
+ size_t stop = std::string::npos; |
+ if (start != std::string::npos) { |
+ // Stop at the last ')' on this line. |
+ stop = content.find("\n", start + 1); |
+ stop = content.rfind(")", stop); |
+ } |
+ |
+ if (start == std::string::npos || stop == std::string::npos || |
+ stop < start) { |
+ LOG(WARNING) << "Firefox property " << pref_key << " could not be parsed."; |
+ return ""; |
+ } |
+ |
+ // String values have double quotes we don't need to return to the caller. |
+ if (content[start] == '\"' && content[stop - 1] == '\"') { |
+ ++start; |
+ --stop; |
+ } |
+ |
+ return content.substr(start, stop - start); |
+} |