// Copyright (c) 2009 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.
#ifndef CHROME_FRAME_CHROME_LAUNCHER_H_
#define CHROME_FRAME_CHROME_LAUNCHER_H_
#include <string>
// arraysize macro shamelessly stolen from base\basictypes.h
template <typename T, size_t N>
char (&ArraySizeHelper(T (&array)[N]))[N];
#define arraysize(array) (sizeof(ArraySizeHelper(array)))
namespace chrome_launcher {
// The base name of the chrome_launcher.exe file.
extern const wchar_t kLauncherExeBaseName[];
// Returns true if command_line contains only flags that we allow through.
// Returns false if command_line contains any unrecognized flags.
bool IsValidCommandLine(const wchar_t* command_line);
// Given a command-line without an initial program part, launch our associated
// chrome.exe with a sanitized version of that command line. Returns true iff
// successful.
bool SanitizeAndLaunchChrome(const wchar_t* command_line);
// Returns a pointer to the position in command_line the string right after the
// name of the executable. This is equivalent to the second element of the
// array returned by CommandLineToArgvW. Returns NULL if there are no further
// arguments.
const wchar_t* GetArgumentsStart(const wchar_t* command_line);
// Returns the full path to the Chrome executable.
bool GetChromeExecutablePath(std::wstring* chrome_path);
// Returns whether a given argument is considered a valid flag. Only accepts
// flags of the forms:
// --foo
// --foo=bar
bool IsValidArgument(const std::wstring& argument);
// Returns a string that is equivalent in input_str without any leading
// or trailing whitespace. Returns an empty string if input_str contained only
// whitespace.
std::wstring TrimWhiteSpace(const wchar_t* input_str);
} // namespace chrome_launcher
#endif // CHROME_FRAME_CHROME_LAUNCHER_H_