15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <windows.h>
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/at_exit.h"
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/command_line.h"
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/logging.h"
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Visual Studio needs at least one C++ file in project http://goo.gl/roro9
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace {
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)base::AtExitManager* g_exit_manager = NULL;
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// DLL Entry Point - This is necessary to initialize basic things like the
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// CommandLine and Logging components needed by functions in the DLL.
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)extern "C" BOOL WINAPI DllMain(HINSTANCE instance,
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                               DWORD reason,
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                               LPVOID reserved) {
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (reason == DLL_PROCESS_ATTACH) {
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    g_exit_manager = new base::AtExitManager();
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    CommandLine::Init(0, NULL);
25eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    logging::LoggingSettings settings;
26eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    settings.logging_dest = logging::LOG_TO_SYSTEM_DEBUG_LOG;
27eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    logging::InitLogging(settings);
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  } else if (reason == DLL_PROCESS_DETACH) {
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    CommandLine::Reset();
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    delete g_exit_manager;
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    g_exit_manager = NULL;
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return TRUE;
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
36