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

Unified Diff: chrome/common/importer/firefox_importer_utils.cc

Issue 117123002: Fixing Firefox 21+ password import (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Revert enabling browser tests on Mac Created 6 years, 11 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 | chrome/utility/importer/firefox_importer.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/common/importer/firefox_importer_utils.cc
diff --git a/chrome/common/importer/firefox_importer_utils.cc b/chrome/common/importer/firefox_importer_utils.cc
index 4f6a2019e781551b516cdde924b5aca31f755e1e..b542c183592583cedcb4121349100db2acbccc16 100644
--- a/chrome/common/importer/firefox_importer_utils.cc
+++ b/chrome/common/importer/firefox_importer_utils.cc
@@ -13,6 +13,7 @@
#include "base/logging.h"
#include "base/strings/string_number_conversions.h"
#include "base/strings/string_split.h"
+#include "base/strings/string_util.h"
#include "base/strings/stringprintf.h"
#include "base/strings/utf_string_conversions.h"
#include "base/values.h"
@@ -93,6 +94,40 @@ base::FilePath GetFirefoxProfilePathFromDictionary(
return GetProfilePath(root, profiles.front());
}
+#if defined(OS_MACOSX)
+// Find the "*.app" component of the path and build up from there.
+// The resulting path will be .../Firefox.app/Contents/MacOS.
+// We do this because we don't trust LastAppDir to always be
+// this particular path, without any subdirs, and we want to make
+// our assumption about Firefox's root being in that path explicit.
+bool ComposeMacAppPath(const std::string& path_from_file,
+ base::FilePath* output) {
+ base::FilePath path(path_from_file);
+ typedef std::vector<base::FilePath::StringType> ComponentVector;
+ ComponentVector path_components;
+ path.GetComponents(&path_components);
+ if (path_components.empty())
+ return false;
+ // The first path component is special because it may be absolute. Calling
+ // Append with an absolute path component will trigger an assert, so we
+ // must handle it differently and initialize output with it.
+ *output = base::FilePath(path_components[0]);
+ // Append next path components untill we find the *.app component. When we do,
+ // append Contents/MacOS.
+ for (size_t i = 1; i < path_components.size(); ++i) {
+ *output = output->Append(path_components[i]);
+ if (EndsWith(path_components[i], ".app", true)) {
+ *output = output->Append("Contents");
+ *output = output->Append("MacOS");
+ return true;
+ }
+ }
+ LOG(ERROR) << path_from_file << " doesn't look like a valid Firefox "
+ << "installation path: missing /*.app/ directory.";
+ return false;
+}
+#endif // OS_MACOSX
+
bool GetFirefoxVersionAndPathFromProfile(const base::FilePath& profile_path,
int* version,
base::FilePath* app_path) {
@@ -120,7 +155,15 @@ bool GetFirefoxVersionAndPathFromProfile(const base::FilePath& profile_path,
// UTF-8, what does Firefox do? If it puts raw bytes in the
// file, we could go straight from bytes -> filepath;
// otherwise, we're out of luck here.
+#if defined(OS_MACOSX)
+ // Extract path from "LastAppDir=/actual/path"
+ size_t separator_pos = line.find_first_of('=');
+ const std::string& path_from_ini = line.substr(separator_pos + 1);
+ if (!ComposeMacAppPath(path_from_ini, app_path))
+ return false;
+#else // !OS_MACOSX
*app_path = base::FilePath::FromUTF8Unsafe(line.substr(equal + 1));
+#endif // OS_MACOSX
}
}
}
« no previous file with comments | « no previous file | chrome/utility/importer/firefox_importer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698