OLD | NEW |
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 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 // This file defines utility functions that can report details about the | 5 // This file defines utility functions that can report details about the |
6 // host operating environment. | 6 // host operating environment. |
7 | 7 |
8 #ifndef CHROME_APP_CLIENT_UTIL_H_ | 8 #ifndef CHROME_APP_CLIENT_UTIL_H_ |
9 #define CHROME_APP_CLIENT_UTIL_H_ | 9 #define CHROME_APP_CLIENT_UTIL_H_ |
10 | 10 |
11 #include <windows.h> | 11 #include <windows.h> |
12 | |
13 #include <string> | 12 #include <string> |
14 | 13 |
15 #include "sandbox/src/sandbox_factory.h" | 14 namespace sandbox { |
| 15 union SandboxInterfaceInfo; |
| 16 } |
16 | 17 |
17 namespace client_util { | 18 // Implements the common aspects of loading chrome.dll for both chrome and |
18 typedef int (*DLL_MAIN)(HINSTANCE instance, sandbox::SandboxInterfaceInfo*, | 19 // chromium scenarios, which are in charge of implementing two abstract |
19 TCHAR*); | 20 // methods: GetRegistryPath() and OnBeforeLaunch(). |
| 21 class MainDllLoader { |
| 22 public: |
| 23 MainDllLoader(); |
| 24 virtual ~MainDllLoader(); |
20 | 25 |
21 extern const wchar_t kProductVersionKey[]; | 26 // Loads and calls the entry point of chrome.dll. |instance| is the exe |
| 27 // instance retrieved from wWinMain and the |sbox_info| is the broker or |
| 28 // target services interface pointer. |
| 29 // The return value is what the main entry point of chrome.dll returns |
| 30 // upon termination. |
| 31 int Launch(HINSTANCE instance, sandbox::SandboxInterfaceInfo* sbox_info); |
22 | 32 |
23 // Returns true if file specified by file_path exists | 33 // Derived classes must return the relative registry path that holds the |
24 bool FileExists(const std::wstring& file_path); | 34 // most current version of chrome.dll. |
| 35 virtual std::wstring GetRegistryPath() = 0; |
25 | 36 |
26 // Returns Chromium version after reading it from reg_key registry key. Uses | 37 // Called after chrome.dll has beem loaded but before the entry point |
27 // exe_path to detemine registry root key (HKLM/HKCU). Note it is the | 38 // is invoked. Derived classes can implement custom actions here. |
28 // responsibility of caller to free *version when function is successful. | 39 virtual void OnBeforeLaunch(const std::wstring& version) {} |
29 bool GetChromiumVersion(const wchar_t* const exe_path, | |
30 const wchar_t* const reg_key_path, | |
31 wchar_t** version); | |
32 | 40 |
33 // Get path to DLL specified by dll_name. If dll_path is specified and it | 41 protected: |
34 // exists we assume DLL is in that directory and return that. Else we search | 42 HMODULE Load(std::wstring* version, std::wstring* file); |
35 // for that DLL by calling Windows API. | |
36 std::wstring GetDLLPath(const std::wstring& dll_name, | |
37 const std::wstring& dll_path); | |
38 | 43 |
39 // Returns the path to the exe (without the file name) that called this | 44 private: |
40 // function. | 45 // Chrome.dll handle. |
41 std::wstring GetExecutablePath(); | 46 HMODULE dll_; |
| 47 }; |
42 | 48 |
43 } // namespace client_util | 49 // Factory for the MainDllLoader. Caller owns the pointer and should call |
| 50 // delete to free it. |
| 51 MainDllLoader* MakeMainDllLoader(); |
44 | 52 |
45 #endif // CHROME_APP_CLIENT_UTIL_H_ | 53 #endif // CHROME_APP_CLIENT_UTIL_H_ |
OLD | NEW |