11e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
21e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
31e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// found in the LICENSE file.
41e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
51e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include <windows.h>
61e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include <stdlib.h>
71e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include <tchar.h>
81e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
91e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "base/at_exit.h"
101e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "base/command_line.h"
111e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "base/files/file_path.h"
121e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "base/logging.h"
131e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "components/breakpad/tools/crash_service.h"
141e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
151e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)int __stdcall wWinMain(HINSTANCE instance, HINSTANCE, wchar_t* cmd_line,
161e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)                       int show_mode) {
171e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // Manages the destruction of singletons.
181e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  base::AtExitManager exit_manager;
191e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
201e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  CommandLine::Init(0, NULL);
211e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
221e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // Logging to stderr.
231e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  logging::LoggingSettings settings;
241e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  settings.logging_dest = logging::LOG_TO_SYSTEM_DEBUG_LOG;
251e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  logging::InitLogging(settings);
261e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // Logging with pid, tid and timestamp.
271e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  logging::SetLogItems(true, true, true, false);
281e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
291e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  VLOG(1) << "session start. cmdline is [" << cmd_line << "]";
301e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
311e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  breakpad::CrashService crash_service;
321e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  if (!crash_service.Initialize(base::FilePath(), base::FilePath()))
331e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    return 1;
341e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
351e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  VLOG(1) << "ready to process crash requests";
361e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
371e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // Enter the message loop.
381e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  int retv = crash_service.ProcessingLoop();
391e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  // Time to exit.
401e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  VLOG(1) << "session end. return code is " << retv;
411e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  return retv;
421e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)}
43