Index: chrome/app/google_update_client.cc |
=================================================================== |
--- chrome/app/google_update_client.cc (revision 29840) |
+++ chrome/app/google_update_client.cc (working copy) |
@@ -1,135 +0,0 @@ |
-// Copyright (c) 2006-2008 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/app/google_update_client.h" |
- |
-#include <shlobj.h> |
-#include <strsafe.h> |
- |
-#include "chrome/app/client_util.h" |
-#include "chrome/installer/util/google_update_constants.h" |
-#include "chrome/installer/util/install_util.h" |
- |
-namespace { |
-// Allocates the out param on success. |
-bool GoogleUpdateEnvQueryStr(const wchar_t* key_name, wchar_t** out) { |
- DWORD count = ::GetEnvironmentVariableW(key_name, NULL, 0); |
- if (!count) { |
- return false; |
- } |
- wchar_t* value = new wchar_t[count + 1]; |
- if (!::GetEnvironmentVariableW(key_name, value, count)) { |
- delete[] value; |
- return false; |
- } |
- *out = value; |
- return true; |
-} |
-} // anonymous namespace |
- |
-namespace google_update { |
- |
-GoogleUpdateClient::GoogleUpdateClient() : version_(NULL) { |
-} |
- |
-GoogleUpdateClient::~GoogleUpdateClient() { |
- delete[] version_; |
-} |
- |
-std::wstring GoogleUpdateClient::GetDLLFullPath() { |
- return client_util::GetDLLPath(dll_, dll_path_); |
-} |
- |
-std::wstring GoogleUpdateClient::GetDLLPath() { |
- return dll_path_; |
-} |
- |
-const wchar_t* GoogleUpdateClient::GetVersion() const { |
- return version_; |
-} |
- |
-bool GoogleUpdateClient::Launch(HINSTANCE instance, |
- sandbox::SandboxInterfaceInfo* sandbox, |
- wchar_t* command_line, |
- const char* entry_name, |
- int* ret) { |
- if (client_util::FileExists(dll_path_)) { |
- // Setting the version on the environment block is a 'best effort' deal. |
- // It enables Google Update running on a child to load the same DLL version. |
- ::SetEnvironmentVariableW(google_update::kEnvProductVersionKey, version_); |
- } |
- |
- // The dll can be in the exe's directory or in the current directory. |
- // Use the alternate search path to be sure that it's not trying to load it |
- // calling application's directory. |
- HINSTANCE dll_handle = ::LoadLibraryEx(dll_.c_str(), NULL, |
- LOAD_WITH_ALTERED_SEARCH_PATH); |
- if (NULL == dll_handle) { |
- unsigned long err = GetLastError(); |
- if (err) { |
- WCHAR message[500] = {0}; |
- FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, err, 0, |
- reinterpret_cast<LPWSTR>(&message), 500, NULL); |
- ::OutputDebugStringW(message); |
- } |
- return false; |
- } |
- |
- bool did_launch = false; |
- client_util::DLL_MAIN entry = reinterpret_cast<client_util::DLL_MAIN>( |
- ::GetProcAddress(dll_handle, entry_name)); |
- if (NULL != entry) { |
- // record did_run "dr" in client state |
- std::wstring key_path(google_update::kRegPathClientState); |
- key_path.append(L"\\" + guid_); |
- HKEY reg_key; |
- if (::RegCreateKeyEx(HKEY_CURRENT_USER, key_path.c_str(), 0, NULL, |
- REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, |
- ®_key, NULL) == ERROR_SUCCESS) { |
- const wchar_t kVal[] = L"1"; |
- ::RegSetValueEx(reg_key, google_update::kRegDidRunField, 0, REG_SZ, |
- reinterpret_cast<const BYTE *>(kVal), sizeof(kVal)); |
- ::RegCloseKey(reg_key); |
- } |
- |
- int rc = (entry)(instance, sandbox, command_line); |
- if (ret) { |
- *ret = rc; |
- } |
- did_launch = true; |
- } |
-#ifdef PURIFY |
- // We should never unload the dll. There is only risk and no gain from |
- // doing so. The singleton dtors have been already run by AtExitManager. |
- ::FreeLibrary(dll_handle); |
-#endif |
- return did_launch; |
-} |
- |
-bool GoogleUpdateClient::Init(const wchar_t* client_guid, |
- const wchar_t* client_dll) { |
- dll_path_ = client_util::GetExecutablePath(); |
- guid_.assign(client_guid); |
- dll_.assign(client_dll); |
- bool ret = false; |
- if (!guid_.empty()) { |
- if (GoogleUpdateEnvQueryStr(google_update::kEnvProductVersionKey, |
- &version_)) { |
- ret = true; |
- } else { |
- std::wstring key(google_update::kRegPathClients); |
- key.append(L"\\" + guid_); |
- if (client_util::GetChromiumVersion(dll_path_.c_str(), |
- key.c_str(), |
- &version_)) |
- ret = true; |
- } |
- } |
- |
- if (version_) { |
- dll_path_.append(version_); |
- } |
- return ret; |
-} |
-} // namespace google_update |