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/PlatformDisplay.h>
35#include <wtf/FileSystem.h>
36#include <wtf/glib/GUniquePtr.h>
37
38#if USE(GSTREAMER)
39#include <WebCore/GStreamerCommon.h>
40#endif
41
42#if PLATFORM(WAYLAND)
43#if USE(WPE_RENDERER)
44#include <wpe/fdo-egl.h>
45#else
46#include "WaylandCompositor.h"
47#endif
48#endif
49
50#if USE(WPE_RENDERER)
51#include <wpe/wpe.h>
52#endif
53
54namespace WebKit {
55
56#if ENABLE(REMOTE_INSPECTOR)
57static void initializeRemoteInspectorServer(const char* address)
58{
59 if (Inspector::RemoteInspectorServer::singleton().isRunning())
60 return;
61
62 if (!address[0])
63 return;
64
65 GUniquePtr<char> inspectorAddress(g_strdup(address));
66 char* portPtr = g_strrstr(inspectorAddress.get(), ":");
67 if (!portPtr)
68 return;
69
70 *portPtr = '\0';
71 portPtr++;
72 guint64 port = g_ascii_strtoull(portPtr, nullptr, 10);
73 if (!port)
74 return;
75
76 Inspector::RemoteInspectorServer::singleton().start(inspectorAddress.get(), port);
77}
78#endif
79
80static bool memoryPressureMonitorDisabled()
81{
82 static const char* disableMemoryPressureMonitor = getenv("WEBKIT_DISABLE_MEMORY_PRESSURE_MONITOR");
83 return disableMemoryPressureMonitor && !strcmp(disableMemoryPressureMonitor, "1");
84}
85
86void WebProcessPool::platformInitialize()
87{
88#if PLATFORM(GTK)
89 m_alwaysUsesComplexTextCodePath = true;
90#endif
91 if (const char* forceComplexText = getenv("WEBKIT_FORCE_COMPLEX_TEXT"))
92 m_alwaysUsesComplexTextCodePath = !strcmp(forceComplexText, "1");
93
94#if ENABLE(REMOTE_INSPECTOR)
95 if (const char* address = g_getenv("WEBKIT_INSPECTOR_SERVER"))
96 initializeRemoteInspectorServer(address);
97#endif
98
99 if (!memoryPressureMonitorDisabled())
100 installMemoryPressureHandler();
101}
102
103void WebProcessPool::platformInitializeWebProcess(WebProcessCreationParameters& parameters)
104{
105#if PLATFORM(WPE)
106 if (!parameters.isServiceWorkerProcess) {
107 parameters.hostClientFileDescriptor = wpe_renderer_host_create_client();
108 parameters.implementationLibraryName = FileSystem::fileSystemRepresentation(wpe_loader_get_loaded_implementation_library_name());
109 }
110#endif
111
112#if PLATFORM(WAYLAND)
113 if (WebCore::PlatformDisplay::sharedDisplay().type() == WebCore::PlatformDisplay::Type::Wayland) {
114#if USE(WPE_RENDERER)
115 wpe_loader_init("libWPEBackend-fdo-1.0.so");
116 if (wpe_fdo_initialize_for_egl_display(WebCore::PlatformDisplay::sharedDisplay().eglDisplay())) {
117 parameters.hostClientFileDescriptor = wpe_renderer_host_create_client();
118 parameters.implementationLibraryName = FileSystem::fileSystemRepresentation(wpe_loader_get_loaded_implementation_library_name());
119 }
120#else
121 parameters.waylandCompositorDisplayName = WaylandCompositor::singleton().displayName();
122#endif
123 }
124#endif
125
126 parameters.memoryCacheDisabled = m_memoryCacheDisabled || cacheModel() == CacheModel::DocumentViewer;
127 parameters.proxySettings = m_networkProxySettings;
128
129 if (memoryPressureMonitorDisabled())
130 parameters.shouldSuppressMemoryPressureHandler = true;
131
132#if USE(GSTREAMER)
133 parameters.gstreamerOptions = WebCore::extractGStreamerOptionsFromCommandLine();
134#endif
135}
136
137void WebProcessPool::platformInvalidateContext()
138{
139}
140
141void WebProcessPool::platformResolvePathsForSandboxExtensions()
142{
143}
144
145} // namespace WebKit
146