1/*
2 * Copyright (C) 2010 Apple Inc. All rights reserved.
3 * Portions Copyright (c) 2010 Motorola Mobility, Inc. All rights reserved.
4 * Copyright (C) 2012 Samsung Electronics Ltd. All Rights Reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * 2. Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 *
15 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS AS IS''
16 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
17 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
18 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
19 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
20 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
21 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
23 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
24 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
25 * THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28#include "config.h"
29#include "WebProcessPool.h"
30
31#include "WebMemoryPressureHandler.h"
32#include "WebProcessCreationParameters.h"
33#include <JavaScriptCore/RemoteInspectorServer.h>
34#include <WebCore/GStreamerCommon.h>
35#include <wtf/FileSystem.h>
36#include <wtf/glib/GUniquePtr.h>
37
38#if PLATFORM(WPE)
39#include <wpe/wpe.h>
40#endif
41
42namespace WebKit {
43
44#if ENABLE(REMOTE_INSPECTOR)
45static void initializeRemoteInspectorServer(const char* address)
46{
47 if (Inspector::RemoteInspectorServer::singleton().isRunning())
48 return;
49
50 if (!address[0])
51 return;
52
53 GUniquePtr<char> inspectorAddress(g_strdup(address));
54 char* portPtr = g_strrstr(inspectorAddress.get(), ":");
55 if (!portPtr)
56 return;
57
58 *portPtr = '\0';
59 portPtr++;
60 guint64 port = g_ascii_strtoull(portPtr, nullptr, 10);
61 if (!port)
62 return;
63
64 Inspector::RemoteInspectorServer::singleton().start(inspectorAddress.get(), port);
65}
66#endif
67
68static bool memoryPressureMonitorDisabled()
69{
70 static const char* disableMemoryPressureMonitor = getenv("WEBKIT_DISABLE_MEMORY_PRESSURE_MONITOR");
71 return disableMemoryPressureMonitor && !strcmp(disableMemoryPressureMonitor, "1");
72}
73
74void WebProcessPool::platformInitialize()
75{
76#if PLATFORM(GTK)
77 m_alwaysUsesComplexTextCodePath = true;
78#endif
79 if (const char* forceComplexText = getenv("WEBKIT_FORCE_COMPLEX_TEXT"))
80 m_alwaysUsesComplexTextCodePath = !strcmp(forceComplexText, "1");
81
82#if ENABLE(REMOTE_INSPECTOR)
83 if (const char* address = g_getenv("WEBKIT_INSPECTOR_SERVER"))
84 initializeRemoteInspectorServer(address);
85#endif
86
87 if (!memoryPressureMonitorDisabled())
88 installMemoryPressureHandler();
89
90 // Process warming is incompatible with the fact our WebProcessProxy::platformGetLaunchOptions()
91 // requires a valid WebsiteDataStore at initialization time for our sandbox permissions.
92 // FIXME: With process warming disabled, the performance of
93 // process-swap-on-navigation is not going to be great. So this needs to be
94 // re-enabled when we enable PSON.
95 configuration().setIsAutomaticProcessWarmingEnabled(false);
96}
97
98void WebProcessPool::platformInitializeWebProcess(WebProcessCreationParameters& parameters)
99{
100#if PLATFORM(WPE)
101 if (!parameters.isServiceWorkerProcess) {
102 parameters.hostClientFileDescriptor = wpe_renderer_host_create_client();
103 parameters.implementationLibraryName = FileSystem::fileSystemRepresentation(wpe_loader_get_loaded_implementation_library_name());
104 }
105#endif
106
107 parameters.memoryCacheDisabled = m_memoryCacheDisabled || cacheModel() == CacheModel::DocumentViewer;
108 parameters.proxySettings = m_networkProxySettings;
109
110 if (memoryPressureMonitorDisabled())
111 parameters.shouldSuppressMemoryPressureHandler = true;
112
113#if USE(GSTREAMER)
114 parameters.gstreamerOptions = WebCore::extractGStreamerOptionsFromCommandLine();
115#endif
116}
117
118void WebProcessPool::platformInvalidateContext()
119{
120}
121
122void WebProcessPool::platformResolvePathsForSandboxExtensions()
123{
124}
125
126} // namespace WebKit
127