OLD | NEW |
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2009 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 #ifndef CHROME_FRAME_CHROME_LAUNCHER_H_ | 5 #ifndef CHROME_FRAME_CHROME_LAUNCHER_H_ |
6 #define CHROME_FRAME_CHROME_LAUNCHER_H_ | 6 #define CHROME_FRAME_CHROME_LAUNCHER_H_ |
7 | 7 |
8 #include <string> | 8 #include <string> |
9 | 9 |
10 #include "base/file_path.h" | 10 // arraysize macro shamelessly stolen from base\basictypes.h |
| 11 template <typename T, size_t N> |
| 12 char (&ArraySizeHelper(T (&array)[N]))[N]; |
11 | 13 |
12 class CommandLine; | 14 #define arraysize(array) (sizeof(ArraySizeHelper(array))) |
13 | 15 |
14 namespace chrome_launcher { | 16 namespace chrome_launcher { |
15 | 17 |
16 // The base name of the chrome_launcher.exe file. | 18 // The base name of the chrome_launcher.exe file. |
17 extern const wchar_t kLauncherExeBaseName[]; | 19 extern const wchar_t kLauncherExeBaseName[]; |
18 | 20 |
19 // Creates a command line suitable for launching Chrome. You can add any | 21 // Returns true if command_line contains only flags that we allow through. |
20 // flags needed before launching. | 22 // Returns false if command_line contains any unrecognized flags. |
21 // | 23 bool IsValidCommandLine(const wchar_t* command_line); |
22 // The command-line may use the Chrome executable directly, or use an in-between | |
23 // process if needed for security/elevation purposes. You must delete the | |
24 // returned command line. | |
25 CommandLine* CreateLaunchCommandLine(); | |
26 | |
27 // Fills in a new command line from the flags on this process's command line | |
28 // that we are allowing Low Integrity to invoke. | |
29 // | |
30 // Logs a warning for any flags that were passed that are not allowed to be | |
31 // invoked by Low Integrity. | |
32 void SanitizeCommandLine(const CommandLine& original, CommandLine* sanitized); | |
33 | 24 |
34 // Given a command-line without an initial program part, launch our associated | 25 // Given a command-line without an initial program part, launch our associated |
35 // chrome.exe with a sanitized version of that command line. Returns true iff | 26 // chrome.exe with a sanitized version of that command line. Returns true iff |
36 // successful. | 27 // successful. |
37 bool SanitizeAndLaunchChrome(const wchar_t* command_line); | 28 bool SanitizeAndLaunchChrome(const wchar_t* command_line); |
38 | 29 |
| 30 // Returns a pointer to the position in command_line the string right after the |
| 31 // name of the executable. This is equivalent to the second element of the |
| 32 // array returned by CommandLineToArgvW. Returns NULL if there are no further |
| 33 // arguments. |
| 34 const wchar_t* GetArgumentsStart(const wchar_t* command_line); |
| 35 |
39 // Returns the full path to the Chrome executable. | 36 // Returns the full path to the Chrome executable. |
40 FilePath GetChromeExecutablePath(); | 37 bool GetChromeExecutablePath(std::wstring* chrome_path); |
41 | 38 |
42 // The type of the CfLaunchChrome entrypoint exported from this DLL. | 39 // Returns whether a given argument is considered a valid flag. Only accepts |
43 typedef int (__stdcall *CfLaunchChromeProc)(); | 40 // flags of the forms: |
| 41 // --foo |
| 42 // --foo=bar |
| 43 bool IsValidArgument(const std::wstring& argument); |
| 44 |
| 45 // Returns a string that is equivalent in input_str without any leading |
| 46 // or trailing whitespace. Returns an empty string if input_str contained only |
| 47 // whitespace. |
| 48 std::wstring TrimWhiteSpace(const wchar_t* input_str); |
44 | 49 |
45 } // namespace chrome_launcher | 50 } // namespace chrome_launcher |
46 | 51 |
47 #endif // CHROME_FRAME_CHROME_LAUNCHER_H_ | 52 #endif // CHROME_FRAME_CHROME_LAUNCHER_H_ |
OLD | NEW |