|
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" WK_EXPORT 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 #ifndef NDEBUG |
|
81 // Break into the debugger when Ctrl-Alt-Shift is held down during launch. This makes it easier |
|
82 // to debug problems that happen early in the web process's liftime. |
|
83 const unsigned short highBitMaskShort = 0x8000; |
|
84 if ((::GetKeyState(VK_CONTROL) & highBitMaskShort) && (::GetKeyState(VK_MENU) & highBitMaskShort) && (::GetKeyState(VK_SHIFT) & highBitMaskShort)) |
|
85 ::DebugBreak(); |
|
86 #endif |
|
87 |
|
88 enableTerminationOnHeapCorruption(); |
|
89 |
|
90 CommandLine commandLine; |
|
91 if (!commandLine.parse(lpstrCmdLine)) |
|
92 return EXIT_FAILURE; |
|
93 |
|
94 String mode = commandLine["mode"]; |
|
95 if (mode == "webprocess") |
|
96 return WebKit::WebProcessMain(&commandLine); |
|
97 |
|
98 return EXIT_FAILURE; |
|
99 } |
|
100 |
|
101 #endif |