blob: 0b5f8b94f018fdd4b9a78e154a711f7c3deeeca9 [file] [log] [blame]
// Copyright (c) 2011 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.
#include "base/process_util.h"
#include "build/build_config.h"
#include "chrome/browser/first_run/upgrade_util.h"
// The entry point for all invocations of Chromium, browser and renderer. On
// windows, this does nothing but load chrome.dll and invoke its entry point in
// order to make it easy to update the app from GoogleUpdate. We don't need
// that extra layer with on linux.
//
// TODO(tc): This is similar to chrome_exe_main_mac.mm. After it's
// more clear what needs to go here, we should evaluate whether or not
// to merge this file with chrome_exe_main_mac.mm.
extern "C" {
int ChromeMain(int argc, const char** argv);
#if defined(OS_POSIX) && !defined(OS_MACOSX) && defined(USE_TCMALLOC)
int tc_set_new_mode(int mode);
#endif
}
int main(int argc, const char** argv) {
base::EnableTerminationOnHeapCorruption();
base::EnableTerminationOnOutOfMemory();
// NOTE(willchan): One might ask why this call is done here rather than in
// process_util_linux.cc with the definition of
// EnableTerminationOnOutOfMemory(). That's because base shouldn't have a
// dependency on TCMalloc. Really, we ought to have our allocator shim code
// implement this EnableTerminationOnOutOfMemory() function. Whateverz. This
// works for now.
#if defined(OS_POSIX) && !defined(OS_MACOSX) && defined(USE_TCMALLOC)
// For tcmalloc, we need to tell it to behave like new.
tc_set_new_mode(1);
#endif
// The exit manager is in charge of calling the dtors of singletons.
// Win has one here, but we assert with multiples from BrowserMain() if we
// keep it.
// base::AtExitManager exit_manager;
int return_code = ChromeMain(argc, argv);
#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
// Launch a new instance if we're shutting down because we detected an
// upgrade in the persistent mode.
upgrade_util::RelaunchChromeBrowserWithNewCommandLineIfNeeded();
#endif
return return_code;
}