| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include <windows.h> | 5 #include <windows.h> |
| 6 #include <shlwapi.h> | 6 #include <shlwapi.h> |
| 7 | 7 |
| 8 #include "base/command_line.h" | 8 #include "base/command_line.h" |
| 9 #include "base/debug/trace_event.h" | 9 #include "base/debug/trace_event.h" |
| 10 #include "base/environment.h" | 10 #include "base/environment.h" |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 67 void RecordDidRun(const string16& dll_path) { | 67 void RecordDidRun(const string16& dll_path) { |
| 68 bool system_level = !InstallUtil::IsPerUserInstall(dll_path.c_str()); | 68 bool system_level = !InstallUtil::IsPerUserInstall(dll_path.c_str()); |
| 69 GoogleUpdateSettings::UpdateDidRunState(true, system_level); | 69 GoogleUpdateSettings::UpdateDidRunState(true, system_level); |
| 70 } | 70 } |
| 71 | 71 |
| 72 void ClearDidRun(const string16& dll_path) { | 72 void ClearDidRun(const string16& dll_path) { |
| 73 bool system_level = !InstallUtil::IsPerUserInstall(dll_path.c_str()); | 73 bool system_level = !InstallUtil::IsPerUserInstall(dll_path.c_str()); |
| 74 GoogleUpdateSettings::UpdateDidRunState(false, system_level); | 74 GoogleUpdateSettings::UpdateDidRunState(false, system_level); |
| 75 } | 75 } |
| 76 | 76 |
| 77 #if defined(CHROME_SPLIT_DLL) | |
| 78 // Deferred initialization entry point for chrome1.dll. | |
| 79 typedef BOOL (__stdcall *DoDeferredCrtInitFunc)(HINSTANCE hinstance); | |
| 80 | |
| 81 bool InitSplitChromeDll(HMODULE mod) { | |
| 82 if (!mod) | |
| 83 return false; | |
| 84 DoDeferredCrtInitFunc init = reinterpret_cast<DoDeferredCrtInitFunc>( | |
| 85 ::GetProcAddress(mod, "_DoDeferredCrtInit@4")); | |
| 86 return (init(mod) == TRUE); | |
| 87 } | |
| 88 #endif | |
| 89 } // namespace | 77 } // namespace |
| 90 | 78 |
| 91 string16 GetExecutablePath() { | 79 string16 GetExecutablePath() { |
| 92 wchar_t path[MAX_PATH]; | 80 wchar_t path[MAX_PATH]; |
| 93 ::GetModuleFileNameW(NULL, path, MAX_PATH); | 81 ::GetModuleFileNameW(NULL, path, MAX_PATH); |
| 94 if (!::PathRemoveFileSpecW(path)) | 82 if (!::PathRemoveFileSpecW(path)) |
| 95 return string16(); | 83 return string16(); |
| 96 string16 exe_path(path); | 84 string16 exe_path(path); |
| 97 return exe_path.append(1, L'\\'); | 85 return exe_path.append(1, L'\\'); |
| 98 } | 86 } |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 159 out_file->append(*out_version).append(1, L'\\'); | 147 out_file->append(*out_version).append(1, L'\\'); |
| 160 dll = LoadChromeWithDirectory(out_file); | 148 dll = LoadChromeWithDirectory(out_file); |
| 161 if (!dll) { | 149 if (!dll) { |
| 162 PLOG(ERROR) << "Failed to load Chrome DLL from " << *out_file; | 150 PLOG(ERROR) << "Failed to load Chrome DLL from " << *out_file; |
| 163 return NULL; | 151 return NULL; |
| 164 } | 152 } |
| 165 } | 153 } |
| 166 | 154 |
| 167 DCHECK(dll); | 155 DCHECK(dll); |
| 168 | 156 |
| 169 #if defined(CHROME_SPLIT_DLL) | |
| 170 // In split dlls mode, we need to manually initialize both DLLs because | |
| 171 // the circular dependencies between them make the loader not call the | |
| 172 // Dllmain for DLL_PROCESS_ATTACH. | |
| 173 InitSplitChromeDll(dll); | |
| 174 InitSplitChromeDll(::GetModuleHandleA("chrome1.dll")); | |
| 175 #endif | |
| 176 | |
| 177 return dll; | 157 return dll; |
| 178 } | 158 } |
| 179 | 159 |
| 180 // Launching is a matter of loading the right dll, setting the CHROME_VERSION | 160 // Launching is a matter of loading the right dll, setting the CHROME_VERSION |
| 181 // environment variable and just calling the entry point. Derived classes can | 161 // environment variable and just calling the entry point. Derived classes can |
| 182 // add custom code in the OnBeforeLaunch callback. | 162 // add custom code in the OnBeforeLaunch callback. |
| 183 int MainDllLoader::Launch(HINSTANCE instance, | 163 int MainDllLoader::Launch(HINSTANCE instance, |
| 184 sandbox::SandboxInterfaceInfo* sbox_info) { | 164 sandbox::SandboxInterfaceInfo* sbox_info) { |
| 185 string16 version; | 165 string16 version; |
| 186 string16 file; | 166 string16 file; |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 256 } | 236 } |
| 257 }; | 237 }; |
| 258 | 238 |
| 259 MainDllLoader* MakeMainDllLoader() { | 239 MainDllLoader* MakeMainDllLoader() { |
| 260 #if defined(GOOGLE_CHROME_BUILD) | 240 #if defined(GOOGLE_CHROME_BUILD) |
| 261 return new ChromeDllLoader(); | 241 return new ChromeDllLoader(); |
| 262 #else | 242 #else |
| 263 return new ChromiumDllLoader(); | 243 return new ChromiumDllLoader(); |
| 264 #endif | 244 #endif |
| 265 } | 245 } |
| OLD | NEW |