2 * Copyright (C) 2010 Apple Inc. All rights reserved.
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
14 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23 * THE POSSIBILITY OF SUCH DAMAGE.
26 #include "CommandLine.h"
28 #include "WebProcessMain.h"
31 #include <objc/objc-auto.h>
34 using namespace WebCore;
35 using namespace WebKit;
39 extern "C" int WebKitMain(int argc, char** argv);
41 int WebKitMain(int argc, char** argv)
43 ASSERT(!objc_collectingEnabled());
45 CommandLine commandLine;
46 if (!commandLine.parse(argc, argv))
49 String mode = commandLine["mode"];
50 if (mode == "legacywebprocess")
51 return WebProcessMain(&commandLine);
58 static void enableTerminationOnHeapCorruption()
60 // Enable termination on heap corruption on OSes that support it (Vista and XPSP3).
61 // http://msdn.microsoft.com/en-us/library/aa366705(VS.85).aspx
63 const HEAP_INFORMATION_CLASS heapEnableTerminationOnCorruption = static_cast<HEAP_INFORMATION_CLASS>(1);
65 HMODULE hMod = ::GetModuleHandleW(L"kernel32.dll");
69 typedef BOOL (WINAPI*HSI)(HANDLE, HEAP_INFORMATION_CLASS, PVOID, SIZE_T);
70 HSI heapSetInformation = reinterpret_cast<HSI>(::GetProcAddress(hMod, "HeapSetInformation"));
71 if (!heapSetInformation)
74 heapSetInformation(0, heapEnableTerminationOnCorruption, 0, 0);
77 extern "C" __declspec(dllexport)
78 int WebKitMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpstrCmdLine, int nCmdShow)
80 enableTerminationOnHeapCorruption();
82 CommandLine commandLine;
83 if (!commandLine.parse(lpstrCmdLine))
86 String mode = commandLine["mode"];
87 if (mode == "webprocess")
88 return WebKit::WebProcessMain(&commandLine);