Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3354)

Unified Diff: chrome/app/chrome_exe_main.cc

Issue 345036: Rewrite of chrome.exe startup code... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/app/breakpad_win.cc ('k') | chrome/app/client_util.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/app/chrome_exe_main.cc
===================================================================
--- chrome/app/chrome_exe_main.cc (revision 29840)
+++ chrome/app/chrome_exe_main.cc (working copy)
@@ -6,103 +6,46 @@
#include <tchar.h>
#include "base/at_exit.h"
-#include "base/base_switches.h"
#include "base/command_line.h"
-#include "base/debug_on_start.h"
-#include "base/process_util.h"
#include "base/win_util.h"
#include "chrome/app/breakpad_win.h"
#include "chrome/app/client_util.h"
-#include "chrome/app/google_update_client.h"
-#include "chrome/common/chrome_switches.h"
#include "chrome/common/result_codes.h"
-#include "sandbox/src/sandbox_factory.h"
#include "sandbox/src/dep.h"
+#include "sandbox/src/sandbox_factory.h"
-// Generataed header containing the Google Update appid.
-#include "appid.h"
-int APIENTRY wWinMain(HINSTANCE instance, HINSTANCE prev_instance,
- wchar_t* command_line, int) {
+int APIENTRY wWinMain(HINSTANCE instance, HINSTANCE, wchar_t*, int) {
base::EnableTerminationOnHeapCorruption();
// The exit manager is in charge of calling the dtors of singletons.
base::AtExitManager exit_manager;
- win_util::WinVersion win_version = win_util::GetWinVersion();
- if (win_version < win_util::WINVERSION_VISTA) {
- // On Vista, this is unnecessary since it is controlled through the
- // /NXCOMPAT linker flag.
- // Enforces strong DEP support.
- sandbox::SetCurrentProcessDEP(sandbox::DEP_ENABLED);
+ bool exit_now = true;
+ // We restarted because of a previous crash. Ask user if we should relaunch.
+ if (ShowRestartDialogIfCrashed(&exit_now)) {
+ if (exit_now)
+ return ResultCodes::NORMAL_EXIT;
}
- // Get the interface pointer to the BrokerServices or TargetServices,
- // depending who we are.
+ // Initialize the commandline singleton from the environment.
+ CommandLine::Init(0, NULL);
+
+ // Initialize the sandbox services.
sandbox::SandboxInterfaceInfo sandbox_info = {0};
sandbox_info.broker_services = sandbox::SandboxFactory::GetBrokerServices();
if (!sandbox_info.broker_services)
sandbox_info.target_services = sandbox::SandboxFactory::GetTargetServices();
- CommandLine::Init(0, NULL);
-
- const wchar_t* dll_name = L"chrome.dll";
- std::wstring dll_full_path;
- std::wstring versionned_path;
-
-#if defined(GOOGLE_CHROME_BUILD)
- google_update::GoogleUpdateClient client;
-
- // TODO(erikkay): verify client.Init() return value for official builds
- client.Init(google_update::kChromeGuid, dll_name);
- dll_full_path = client.GetDLLFullPath();
- versionned_path = client.GetDLLPath();
-#else
- std::wstring exe_path = client_util::GetExecutablePath();
- wchar_t *version;
- if (client_util::GetChromiumVersion(exe_path.c_str(), L"Software\\Chromium",
- &version)) {
- versionned_path = exe_path;
- versionned_path.append(version);
- delete[] version;
+ if (win_util::GetWinVersion() < win_util::WINVERSION_VISTA) {
+ // Enforces strong DEP support. Vista uses the NXCOMPAT flag in the exe.
+ sandbox::SetCurrentProcessDEP(sandbox::DEP_ENABLED);
}
- dll_full_path = client_util::GetDLLPath(dll_name, versionned_path);
-#endif
+ // Load and launch the chrome dll. *Everything* happens inside.
+ MainDllLoader* loader = MakeMainDllLoader();
+ int rc = loader->Launch(instance, &sandbox_info);
+ delete loader;
- // If the versionned path exists, we set the current directory to this path.
- if (client_util::FileExists(versionned_path)) {
- ::SetCurrentDirectory(versionned_path.c_str());
- }
-
- HINSTANCE dll_handle = ::LoadLibraryEx(dll_name, NULL,
- LOAD_WITH_ALTERED_SEARCH_PATH);
-
- // Initialize the crash reporter.
- InitCrashReporterWithDllPath(dll_full_path);
-
- bool exit_now = true;
- if (ShowRestartDialogIfCrashed(&exit_now)) {
- // We have restarted because of a previous crash. The user might
- // decide that he does not want to continue.
- if (exit_now)
- return ResultCodes::NORMAL_EXIT;
- }
-
-#if defined(GOOGLE_CHROME_BUILD)
- int ret = 0;
- if (client.Launch(instance, &sandbox_info, command_line, "ChromeMain",
- &ret)) {
- return ret;
- }
-#else
- if (NULL != dll_handle) {
- client_util::DLL_MAIN entry = reinterpret_cast<client_util::DLL_MAIN>(
- ::GetProcAddress(dll_handle, "ChromeMain"));
- if (NULL != entry)
- return (entry)(instance, &sandbox_info, command_line);
- }
-#endif
-
- return ResultCodes::GOOGLE_UPDATE_LAUNCH_FAILED;
+ return rc;
}
« no previous file with comments | « chrome/app/breakpad_win.cc ('k') | chrome/app/client_util.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698