2010-07-11 Maciej Stachowiak <mjs@apple.com>
[WebKit.git] / WebKit2 / WebProcess / WebKitMain.cpp
1 /*
2  * Copyright (C) 2010 Apple Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
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.
12  *
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.
24  */
25
26 #include "CommandLine.h"
27
28 #include "WebProcessMain.h"
29
30 #if PLATFORM(MAC)
31 #include <objc/objc-auto.h>
32 #endif
33
34 using namespace WebCore;
35 using namespace WebKit;
36
37 #if PLATFORM(MAC)
38
39 extern "C" int WebKitMain(int argc, char** argv);
40
41 int WebKitMain(int argc, char** argv)
42 {
43     ASSERT(!objc_collectingEnabled());
44     
45     CommandLine commandLine;
46     if (!commandLine.parse(argc, argv))
47         return EXIT_FAILURE;
48     
49     String mode = commandLine["mode"];
50     if (mode == "legacywebprocess")
51         return WebProcessMain(&commandLine);
52     
53     return EXIT_FAILURE;
54 }
55
56 #elif PLATFORM(WIN)
57
58 static void enableTerminationOnHeapCorruption()
59 {
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
62
63     const HEAP_INFORMATION_CLASS heapEnableTerminationOnCorruption = static_cast<HEAP_INFORMATION_CLASS>(1);
64
65     HMODULE hMod = ::GetModuleHandleW(L"kernel32.dll");
66     if (!hMod)
67         return;
68
69     typedef BOOL (WINAPI*HSI)(HANDLE, HEAP_INFORMATION_CLASS, PVOID, SIZE_T);
70     HSI heapSetInformation = reinterpret_cast<HSI>(::GetProcAddress(hMod, "HeapSetInformation"));
71     if (!heapSetInformation)
72         return;
73
74     heapSetInformation(0, heapEnableTerminationOnCorruption, 0, 0);
75 }
76
77 extern "C" __declspec(dllexport) 
78 int WebKitMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpstrCmdLine, int nCmdShow)
79 {
80     enableTerminationOnHeapCorruption();
81
82     CommandLine commandLine;
83     if (!commandLine.parse(lpstrCmdLine))
84         return EXIT_FAILURE;
85
86     String mode = commandLine["mode"];
87     if (mode == "webprocess")
88         return WebKit::WebProcessMain(&commandLine);
89
90     return EXIT_FAILURE;
91 }
92
93 #endif