Index: chrome/browser/importer/nss_decryptor_win.cc |
diff --git a/chrome/browser/importer/nss_decryptor_win.cc b/chrome/browser/importer/nss_decryptor_win.cc |
deleted file mode 100644 |
index a426ce0fda23d0d6754586b7c74407fba5bde182..0000000000000000000000000000000000000000 |
--- a/chrome/browser/importer/nss_decryptor_win.cc |
+++ /dev/null |
@@ -1,177 +0,0 @@ |
-// Copyright (c) 2011 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/browser/importer/nss_decryptor_win.h" |
- |
-#include "base/files/file_path.h" |
-#include "base/strings/sys_string_conversions.h" |
- |
-namespace { |
- |
-typedef BOOL (WINAPI* SetDllDirectoryFunc)(LPCTSTR lpPathName); |
- |
-// A helper class whose destructor calls SetDllDirectory(NULL) to undo the |
-// effects of a previous SetDllDirectory call. |
-class SetDllDirectoryCaller { |
- public: |
- explicit SetDllDirectoryCaller() : func_(NULL) { } |
- |
- ~SetDllDirectoryCaller() { |
- if (func_) |
- func_(NULL); |
- } |
- |
- // Sets the SetDllDirectory function pointer to activates this object. |
- void set_func(SetDllDirectoryFunc func) { func_ = func; } |
- |
- private: |
- SetDllDirectoryFunc func_; |
-}; |
- |
-} // namespace |
- |
-// static |
-const wchar_t NSSDecryptor::kNSS3Library[] = L"nss3.dll"; |
-const wchar_t NSSDecryptor::kSoftokn3Library[] = L"softokn3.dll"; |
-const wchar_t NSSDecryptor::kPLDS4Library[] = L"plds4.dll"; |
-const wchar_t NSSDecryptor::kNSPR4Library[] = L"nspr4.dll"; |
- |
-bool NSSDecryptor::Init(const base::FilePath& dll_path, |
- const base::FilePath& db_path) { |
- // We call SetDllDirectory to work around a Purify bug (GetModuleHandle |
- // fails inside Purify under certain conditions). SetDllDirectory only |
- // exists on Windows XP SP1 or later, so we look up its address at run time. |
- HMODULE kernel32_dll = GetModuleHandle(L"kernel32.dll"); |
- if (kernel32_dll == NULL) |
- return false; |
- SetDllDirectoryFunc set_dll_directory = |
- (SetDllDirectoryFunc)GetProcAddress(kernel32_dll, "SetDllDirectoryW"); |
- SetDllDirectoryCaller caller; |
- |
- if (set_dll_directory != NULL) { |
- if (!set_dll_directory(dll_path.value().c_str())) |
- return false; |
- caller.set_func(set_dll_directory); |
- nss3_dll_ = LoadLibrary(kNSS3Library); |
- if (nss3_dll_ == NULL) |
- return false; |
- } else { |
- // Fall back on LoadLibraryEx if SetDllDirectory isn't available. We |
- // actually prefer this method because it doesn't change the DLL search |
- // path, which is a process-wide property. |
- base::FilePath path = dll_path.Append(kNSS3Library); |
- nss3_dll_ = LoadLibraryEx(path.value().c_str(), NULL, |
- LOAD_WITH_ALTERED_SEARCH_PATH); |
- if (nss3_dll_ == NULL) |
- return false; |
- |
- // Firefox 2 uses NSS 3.11. Firefox 3 uses NSS 3.12. NSS 3.12 has two |
- // changes in its DLLs: |
- // 1. nss3.dll is not linked with softokn3.dll at build time, but rather |
- // loads softokn3.dll using LoadLibrary in NSS_Init. |
- // 2. softokn3.dll has a new dependency sqlite3.dll. |
- // NSS_Init's LoadLibrary call has trouble finding sqlite3.dll. To help |
- // it out, we preload softokn3.dll using LoadLibraryEx with the |
- // LOAD_WITH_ALTERED_SEARCH_PATH flag. This helps because LoadLibrary |
- // doesn't load a DLL again if it's already loaded. This workaround is |
- // harmless for NSS 3.11. |
- path = base::FilePath(dll_path).Append(kSoftokn3Library); |
- softokn3_dll_ = LoadLibraryEx(path.value().c_str(), NULL, |
- LOAD_WITH_ALTERED_SEARCH_PATH); |
- if (softokn3_dll_ == NULL) { |
- Free(); |
- return false; |
- } |
- } |
- HMODULE plds4_dll = GetModuleHandle(kPLDS4Library); |
- HMODULE nspr4_dll = GetModuleHandle(kNSPR4Library); |
- |
- return InitNSS(db_path, plds4_dll, nspr4_dll); |
-} |
- |
-NSSDecryptor::NSSDecryptor() |
- : NSS_Init(NULL), NSS_Shutdown(NULL), PK11_GetInternalKeySlot(NULL), |
- PK11_CheckUserPassword(NULL), PK11_FreeSlot(NULL), |
- PK11_Authenticate(NULL), PK11SDR_Decrypt(NULL), SECITEM_FreeItem(NULL), |
- PL_ArenaFinish(NULL), PR_Cleanup(NULL), |
- nss3_dll_(NULL), softokn3_dll_(NULL), |
- is_nss_initialized_(false) { |
-} |
- |
-NSSDecryptor::~NSSDecryptor() { |
- Free(); |
-} |
- |
-bool NSSDecryptor::InitNSS(const base::FilePath& db_path, |
- base::NativeLibrary plds4_dll, |
- base::NativeLibrary nspr4_dll) { |
- // NSPR DLLs are already loaded now. |
- if (plds4_dll == NULL || nspr4_dll == NULL) { |
- Free(); |
- return false; |
- } |
- |
- // Gets the function address. |
- NSS_Init = (NSSInitFunc) |
- base::GetFunctionPointerFromNativeLibrary(nss3_dll_, "NSS_Init"); |
- NSS_Shutdown = (NSSShutdownFunc) |
- base::GetFunctionPointerFromNativeLibrary(nss3_dll_, "NSS_Shutdown"); |
- PK11_GetInternalKeySlot = (PK11GetInternalKeySlotFunc) |
- base::GetFunctionPointerFromNativeLibrary(nss3_dll_, |
- "PK11_GetInternalKeySlot"); |
- PK11_FreeSlot = (PK11FreeSlotFunc) |
- base::GetFunctionPointerFromNativeLibrary(nss3_dll_, "PK11_FreeSlot"); |
- PK11_Authenticate = (PK11AuthenticateFunc) |
- base::GetFunctionPointerFromNativeLibrary(nss3_dll_, "PK11_Authenticate"); |
- PK11SDR_Decrypt = (PK11SDRDecryptFunc) |
- base::GetFunctionPointerFromNativeLibrary(nss3_dll_, "PK11SDR_Decrypt"); |
- SECITEM_FreeItem = (SECITEMFreeItemFunc) |
- base::GetFunctionPointerFromNativeLibrary(nss3_dll_, "SECITEM_FreeItem"); |
- PL_ArenaFinish = (PLArenaFinishFunc) |
- base::GetFunctionPointerFromNativeLibrary(plds4_dll, "PL_ArenaFinish"); |
- PR_Cleanup = (PRCleanupFunc) |
- base::GetFunctionPointerFromNativeLibrary(nspr4_dll, "PR_Cleanup"); |
- |
- if (NSS_Init == NULL || NSS_Shutdown == NULL || |
- PK11_GetInternalKeySlot == NULL || PK11_FreeSlot == NULL || |
- PK11_Authenticate == NULL || PK11SDR_Decrypt == NULL || |
- SECITEM_FreeItem == NULL || PL_ArenaFinish == NULL || |
- PR_Cleanup == NULL) { |
- Free(); |
- return false; |
- } |
- |
- SECStatus result = NSS_Init(base::SysWideToNativeMB(db_path.value()).c_str()); |
- if (result != SECSuccess) { |
- Free(); |
- return false; |
- } |
- |
- is_nss_initialized_ = true; |
- return true; |
-} |
- |
-void NSSDecryptor::Free() { |
- if (is_nss_initialized_) { |
- NSS_Shutdown(); |
- PL_ArenaFinish(); |
- PR_Cleanup(); |
- is_nss_initialized_ = false; |
- } |
- if (softokn3_dll_ != NULL) |
- base::UnloadNativeLibrary(softokn3_dll_); |
- if (nss3_dll_ != NULL) |
- base::UnloadNativeLibrary(nss3_dll_); |
- NSS_Init = NULL; |
- NSS_Shutdown = NULL; |
- PK11_GetInternalKeySlot = NULL; |
- PK11_FreeSlot = NULL; |
- PK11_Authenticate = NULL; |
- PK11SDR_Decrypt = NULL; |
- SECITEM_FreeItem = NULL; |
- PL_ArenaFinish = NULL; |
- PR_Cleanup = NULL; |
- nss3_dll_ = NULL; |
- softokn3_dll_ = NULL; |
-} |