| Index: remoting/host/desktop_process.cc
|
| diff --git a/remoting/host/desktop_process.cc b/remoting/host/desktop_process.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..dd4ed75d5d0ebbfbc2acb8262106ce5a0053ff82
|
| --- /dev/null
|
| +++ b/remoting/host/desktop_process.cc
|
| @@ -0,0 +1,139 @@
|
| +// Copyright (c) 2012 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.
|
| +//
|
| +// This file implements the Windows service controlling Me2Me host processes
|
| +// running within user sessions.
|
| +
|
| +#include "remoting/host/desktop_process.h"
|
| +
|
| +#include "base/at_exit.h"
|
| +#include "base/command_line.h"
|
| +#include "base/file_path.h"
|
| +#include "base/logging.h"
|
| +#include "base/scoped_native_library.h"
|
| +#include "base/stringprintf.h"
|
| +#include "base/utf_string_conversions.h"
|
| +#include "base/win/windows_version.h"
|
| +#include "remoting/host/branding.h"
|
| +#include "remoting/host/constants.h"
|
| +#include "remoting/host/usage_stats_consent.h"
|
| +
|
| +#if defined(OS_MACOSX)
|
| +#include "base/mac/scoped_nsautorelease_pool.h"
|
| +#endif // defined(OS_MACOSX)
|
| +
|
| +#if defined(OS_WIN)
|
| +#include <commctrl.h>
|
| +#endif // defined(OS_WIN)
|
| +
|
| +namespace {
|
| +
|
| +// "--help" or "--?" prints the usage message.
|
| +const char kHelpSwitchName[] = "help";
|
| +const char kQuestionSwitchName[] = "?";
|
| +
|
| +const wchar_t kUsageMessage[] =
|
| + L"\n"
|
| + L"Usage: %ls [options]\n"
|
| + L"\n"
|
| + L"Options:\n"
|
| + L" --help, --? - Print this message.\n";
|
| +
|
| +void usage(const FilePath& program_name) {
|
| + LOG(INFO) << StringPrintf(kUsageMessage,
|
| + UTF16ToWide(program_name.value()).c_str());
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| +namespace remoting {
|
| +
|
| +DesktopProcess::DesktopProcess() {
|
| +}
|
| +
|
| +DesktopProcess::~DesktopProcess() {
|
| +}
|
| +
|
| +int DesktopProcess::Run() {
|
| + NOTIMPLEMENTED();
|
| + return 0;
|
| +}
|
| +
|
| +} // namespace remoting
|
| +
|
| +int main(int argc, char** argv) {
|
| +#if defined(OS_MACOSX)
|
| + // Needed so we don't leak objects when threads are created.
|
| + base::mac::ScopedNSAutoreleasePool pool;
|
| +#endif
|
| +
|
| + CommandLine::Init(argc, argv);
|
| +
|
| + // This object instance is required by Chrome code (for example,
|
| + // LazyInstance, MessageLoop).
|
| + base::AtExitManager exit_manager;
|
| +
|
| + // Initialize logging with an appropriate log-file location, and default to
|
| + // log to that on Windows, or to standard error output otherwise.
|
| + FilePath debug_log = remoting::GetConfigDir().
|
| + Append(FILE_PATH_LITERAL("debug.log"));
|
| + InitLogging(debug_log.value().c_str(),
|
| +#if defined(OS_WIN)
|
| + logging::LOG_ONLY_TO_FILE,
|
| +#else
|
| + logging::LOG_ONLY_TO_SYSTEM_DEBUG_LOG,
|
| +#endif
|
| + logging::DONT_LOCK_LOG_FILE,
|
| + logging::APPEND_TO_OLD_LOG_FILE,
|
| + logging::DISABLE_DCHECK_FOR_NON_OFFICIAL_RELEASE_BUILDS);
|
| +
|
| + const CommandLine* command_line = CommandLine::ForCurrentProcess();
|
| + if (command_line->HasSwitch(kHelpSwitchName) ||
|
| + command_line->HasSwitch(kQuestionSwitchName)) {
|
| + usage(command_line->GetProgram());
|
| + return remoting::kSuccessExitCode;
|
| + }
|
| +
|
| + remoting::DesktopProcess desktop_process;
|
| + return desktop_process.Run();
|
| +}
|
| +
|
| +#if defined(OS_WIN)
|
| +
|
| +int CALLBACK WinMain(HINSTANCE instance,
|
| + HINSTANCE previous_instance,
|
| + LPSTR raw_command_line,
|
| + int show_command) {
|
| +#ifdef OFFICIAL_BUILD
|
| + if (remoting::IsUsageStatsAllowed()) {
|
| + remoting::InitializeCrashReporting();
|
| + }
|
| +#endif // OFFICIAL_BUILD
|
| +
|
| + // Register and initialize common controls.
|
| + INITCOMMONCONTROLSEX info;
|
| + info.dwSize = sizeof(info);
|
| + info.dwICC = ICC_STANDARD_CLASSES;
|
| + InitCommonControlsEx(&info);
|
| +
|
| + // Mark the process as DPI-aware, so Windows won't scale coordinates in APIs.
|
| + // N.B. This API exists on Vista and above.
|
| + if (base::win::GetVersion() >= base::win::VERSION_VISTA) {
|
| + FilePath path(base::GetNativeLibraryName(UTF8ToUTF16("user32")));
|
| + base::ScopedNativeLibrary user32(path);
|
| + CHECK(user32.is_valid());
|
| +
|
| + typedef BOOL (WINAPI * SetProcessDPIAwareFn)();
|
| + SetProcessDPIAwareFn set_process_dpi_aware =
|
| + static_cast<SetProcessDPIAwareFn>(
|
| + user32.GetFunctionPointer("SetProcessDPIAware"));
|
| + set_process_dpi_aware();
|
| + }
|
| +
|
| + // CommandLine::Init() ignores the passed |argc| and |argv| on Windows getting
|
| + // the command line from GetCommandLineW(), so we can safely pass NULL here.
|
| + return main(0, NULL);
|
| +}
|
| +
|
| +#endif // defined(OS_WIN)
|
|
|