summaryrefslogtreecommitdiff
path: root/chromium/chrome/common/importer/firefox_importer_utils_win.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/chrome/common/importer/firefox_importer_utils_win.cc')
-rw-r--r--chromium/chrome/common/importer/firefox_importer_utils_win.cc82
1 files changed, 82 insertions, 0 deletions
diff --git a/chromium/chrome/common/importer/firefox_importer_utils_win.cc b/chromium/chrome/common/importer/firefox_importer_utils_win.cc
new file mode 100644
index 00000000000..a44104f9b26
--- /dev/null
+++ b/chromium/chrome/common/importer/firefox_importer_utils_win.cc
@@ -0,0 +1,82 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/common/importer/firefox_importer_utils.h"
+
+#include <shlobj.h>
+
+#include "base/files/file_util.h"
+#include "base/path_service.h"
+#include "base/strings/string16.h"
+#include "base/win/registry.h"
+
+namespace {
+
+// NOTE: Keep these in order since we need test all those paths according
+// to priority. For example. One machine has multiple users. One non-admin
+// user installs Firefox 2, which causes there is a Firefox2 entry under HKCU.
+// One admin user installs Firefox 3, which causes there is a Firefox 3 entry
+// under HKLM. So when the non-admin user log in, we should deal with Firefox 2
+// related data instead of Firefox 3.
+const HKEY kFireFoxRegistryPaths[] = {HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE};
+
+constexpr const wchar_t* kFirefoxPath = L"Software\\Mozilla\\Mozilla Firefox";
+constexpr const wchar_t* kCurrentVersion = L"CurrentVersion";
+
+} // namespace
+
+int GetCurrentFirefoxMajorVersionFromRegistry() {
+ TCHAR ver_buffer[128];
+ DWORD ver_buffer_length = sizeof(ver_buffer);
+ int highest_version = 0;
+ // When installing Firefox with admin account, the product keys will be
+ // written under HKLM\Mozilla. Otherwise it the keys will be written under
+ // HKCU\Mozilla.
+ for (const HKEY kFireFoxRegistryPath : kFireFoxRegistryPaths) {
+ base::win::RegKey reg_key(kFireFoxRegistryPath, kFirefoxPath, KEY_READ);
+
+ LONG result = reg_key.ReadValue(kCurrentVersion, ver_buffer,
+ &ver_buffer_length, NULL);
+ if (result != ERROR_SUCCESS)
+ continue;
+ highest_version = std::max(highest_version, _wtoi(ver_buffer));
+ }
+ return highest_version;
+}
+
+base::FilePath GetFirefoxInstallPathFromRegistry() {
+ // Detects the path that Firefox is installed in.
+ base::string16 registry_path = kFirefoxPath;
+ wchar_t buffer[MAX_PATH];
+ DWORD buffer_length = sizeof(buffer);
+ base::win::RegKey reg_key(HKEY_LOCAL_MACHINE, registry_path.c_str(),
+ KEY_READ);
+ LONG result = reg_key.ReadValue(kCurrentVersion, buffer,
+ &buffer_length, NULL);
+ if (result != ERROR_SUCCESS)
+ return base::FilePath();
+
+ registry_path += L"\\" + base::string16(buffer) + L"\\Main";
+ buffer_length = sizeof(buffer);
+ base::win::RegKey reg_key_directory(HKEY_LOCAL_MACHINE,
+ registry_path.c_str(), KEY_READ);
+ result = reg_key_directory.ReadValue(L"Install Directory", buffer,
+ &buffer_length, NULL);
+
+ return (result != ERROR_SUCCESS) ? base::FilePath() : base::FilePath(buffer);
+}
+
+base::FilePath GetProfilesINI() {
+ base::FilePath ini_file;
+ // The default location of the profile folder containing user data is
+ // under the "Application Data" folder in Windows XP, Vista, and 7.
+ if (!base::PathService::Get(base::DIR_APP_DATA, &ini_file))
+ return base::FilePath();
+
+ ini_file = ini_file.AppendASCII("Mozilla");
+ ini_file = ini_file.AppendASCII("Firefox");
+ ini_file = ini_file.AppendASCII("profiles.ini");
+
+ return base::PathExists(ini_file) ? ini_file : base::FilePath();
+}